一、导读
本套试卷为第二套模拟试卷,内容与卷一完全不重复,覆盖更多新考点。建议在完成卷一并查漏补缺后,再做本卷检验复习效果。同样提供 AutoGrader 自动评分工具。
二、试卷结构
┌─────────────────────────────────────────────────────────────┐
│ 模拟试卷(二)结构概览 │
├───────────┬──────┬──────┬──────────────────────────────────┤
│ 题型 │ 题量 │ 分值 │ 考点侧重 │
├───────────┼──────┼──────┼──────────────────────────────────┤
│ 单选题 │ 30 │ 30分 │ 概念辨析、流程规范、工具使用 │
│ 多选题 │ 10 │ 20分 │ 综合分析、关系比较、最佳实践 │
│ 判断题 │ 20 │ 20分 │ 原理理解、参数作用、误区识别 │
│ 简答题 │ 5 │ 30分 │ 方案设计、诊断分析、流程优化 │
├───────────┼──────┼──────┼──────────────────────────────────┤
│ 合计 │ 65 │100分 │ 及格线: 60分 │
└───────────┴──────┴──────┴──────────────────────────────────┘
三、核心速记表:考点分布
| 知识领域 |
单选题号 |
多选题号 |
判断题号 |
简答题号 |
分值占比 |
| 机器学习进阶 |
1-5 |
31-32 |
41-44 |
61 |
15% |
| 深度学习与框架 |
6-10 |
33 |
45-48 |
— |
13% |
| CV核心概念 |
11-13 |
34 |
49-50 |
62 |
12% |
| NLP与LLM |
14-17 |
35 |
51-53 |
— |
12% |
| 数据标注进阶 |
18-21 |
36 |
54-55 |
63 |
13% |
| 模型优化与部署 |
22-26 |
37-38 |
56-58 |
64 |
17% |
| AI治理与法规 |
27-30 |
39-40 |
59-60 |
65 |
18% |
四、模拟试卷(二)
一、单项选择题(共30题,每题1分)
| 题号 |
题目 |
A |
B |
C |
D |
| 1 |
以下哪种是梯度下降的变体,每次更新只用一个样本? |
批量梯度下降(BGD) |
随机梯度下降(SGD) |
小批量梯度下降(MBGD) |
牛顿法 |
| 2 |
在支持向量机(SVM)中,核函数的主要作用是? |
加速训练 |
将数据映射到高维空间解决非线性问题 |
减少特征数量 |
增加模型可解释性 |
| 3 |
决策树分裂时的信息增益,本质上是衡量什么? |
数据量的变化 |
不确定性的减少 |
计算速度 |
树的高度 |
| 4 |
集成学习中的Bagging和Boosting的主要区别是? |
没有区别 |
Bagging并行训练,Boosting串行训练 |
Bagging用决策树,Boosting用神经网络 |
Bagging是分类,Boosting是回归 |
| 5 |
随机森林中"随机"的含义不包括哪个? |
随机采样样本 |
随机选择特征 |
随机生成标签 |
每棵树随机选特征子集 |
| 6 |
PyTorch中model.eval()的作用是什么? |
开始训练 |
切换到评估模式,影响Dropout和BatchNorm行为 |
保存模型 |
加快训练速度 |
| 7 |
深度学习中的Dropout层的原理是? |
随机删除网络层 |
训练时随机丢弃一部分神经元 |
删除所有激活函数 |
压缩模型大小 |
| 8 |
Adam优化器结合了哪两种优化器的思想? |
SGD + Adagrad |
Momentum + RMSProp |
Momentum + Adagrad |
RMSProp + SGD |
| 9 |
Batch Normalization的作用不包括? |
加速训练收敛 |
缓解梯度消失 |
有一定的正则化效果 |
增加模型参数量 |
| 10 |
PyTorch中torch.no_grad()的作用是? |
关闭梯度计算,减少显存占用 |
重置所有梯度 |
加快前向传播 |
增加训练速度 |
| 11 |
在计算机视觉中,目标检测与图像分类的核心区别是? |
没有区别 |
目标检测需要同时定位和分类 |
分类更复杂 |
检测只需要分类 |
| 12 |
IoU(交并比)在目标检测中用于衡量什么? |
模型训练速度 |
预测框与真实框的重叠程度 |
图像分辨率 |
类别数量 |
| 13 |
数据增强中,对图像进行水平翻转属于什么类型的增强? |
色彩增强 |
几何变换增强 |
噪声增强 |
混合增强 |
| 14 |
在NLP中,Word2Vec的Skip-gram模型的核心思想是? |
根据上下文预测目标词 |
根据目标词预测上下文 |
预测句子长度 |
生成文本 |
| 15 |
Attention机制中的Q、K、V分别代表什么? |
Query, Key, Value |
Quality, Key, Value |
Query, Knowledge, Value |
Question, Key, Vector |
| 16 |
在Prompt Engineering中,Few-shot prompting是指? |
不提供示例 |
提供少量示例帮助模型理解任务 |
提供全部训练数据 |
反复修改Prompt |
| 17 |
RNN在处理长序列时的主要问题是什么? |
计算速度太快 |
梯度消失/爆炸 |
内存不足 |
不需要训练 |
| 18 |
语音标注中,ASR标注的主要产出物是什么? |
图片标签 |
文本转录(Text Transcription) |
情感标签 |
声纹特征 |
| 19 |
数据标注中"预标注"(Pre-labeling)指的是? |
人工逐条标注 |
先用模型自动标注再由人工修正 |
全部由模型标注 |
不做标注 |
| 20 |
Label Studio支持以下哪种标注类型? |
仅文本分类 |
仅图像标注 |
文本/图像/语音/视频多种标注 |
仅语音标注 |
| 21 |
标注数据版本管理的核心价值是? |
美化文件名 |
可追溯每次标注变更 |
减少存储空间 |
加速标注速度 |
| 22 |
模型量化(Quantization)的主要目的是什么? |
提高模型精度 |
减少模型大小和推理延迟 |
增加训练速度 |
增加模型层数 |
| 23 |
模型蒸馏(Knowledge Distillation)的基本思想是? |
用大模型蒸馏出水 |
用小模型(Student)学习大模型(Teacher)的输出 |
多个模型参数取平均 |
蒸馏掉无用参数 |
| 24 |
ONNX标准的主要作用是? |
加速训练 |
提供跨框架的模型交换格式 |
增加模型精度 |
数据标注 |
| 25 |
微服务架构下,模型推理服务应该具备什么特性? |
与主服务强耦合 |
独立部署、水平扩展、无状态 |
必须用GPU |
只能处理单个请求 |
| 26 |
模型监控中的PSI指标用于检测什么? |
模型准确率 |
特征/预测分布稳定性 |
CPU使用率 |
训练速度 |
| 27 |
中国《个人信息保护法》中,处理个人信息的基本原则不包括? |
告知-同意原则 |
目的限制原则 |
数据最大化原则 |
最小必要原则 |
| 28 |
AI偏见(Bias)可能来源于什么? |
仅模型本身 |
训练数据、标注过程、算法设计等多个环节 |
仅标注过程 |
不会产生偏见 |
| 29 |
关于AI安全,对抗样本(Adversarial Example)指的是? |
模型训练样本 |
经过微小扰动使模型错误预测的样本 |
难训练的样本 |
数据增强后的样本 |
| 30 |
欧盟《人工智能法案》(AI Act)的分级监管中,人脸实时识别属于什么等级? |
低风险 |
有限风险 |
高风险/不可接受风险 |
无风险 |
二、多项选择题(共10题,每题2分)
| 题号 |
题目 |
A |
B |
C |
D |
| 31 |
以下属于梯度下降优化器的有? |
SGD |
Adam |
AdamW |
KNN |
| 32 |
以下关于偏差(Bias)和方差(Variance)的说法正确的有? |
高偏差通常对应欠拟合 |
高方差通常对应过拟合 |
偏差和方差总是同时降低 |
集成学习可以降低方差 |
| 33 |
以下哪些框架可用于深度学习模型训练? |
PyTorch |
TensorFlow |
PaddlePaddle |
Microsoft Word |
| 34 |
以下属于CV任务的包括? |
图像分类 |
语义分割 |
文本摘要 |
目标检测 |
| 35 |
以下哪些是NLP预训练模型? |
BERT |
GPT |
ResNet |
RoBERTa |
| 36 |
以下属于数据标注质量控制方法的有? |
多人标注一致性检查 |
黄金标准数据验证 |
标注后不检查直接使用 |
标注者培训与考核 |
| 37 |
以下哪些是模型部署的优化技术? |
模型量化 |
模型蒸馏 |
模型剪枝 |
增加模型层数 |
| 38 |
以下属于模型性能监控指标的有? |
QPS(每秒查询数) |
P99延迟 |
模型准确率 |
开发者工作时长 |
| 39 |
关于AI伦理的以下说法,正确的有? |
模型决策应该可解释 |
AI不应加剧社会不公平 |
数据收集无需告知用户 |
应建立AI问责机制 |
| 40 |
中国人工智能治理中"可信AI"的内涵包括? |
鲁棒性 |
可解释性 |
隐私保护 |
公平性 |
三、判断题(共20题,每题1分)
| 题号 |
题目 |
答案 |
| 41 |
梯度下降总是能找到全局最优解。 |
|
| 42 |
逻辑回归可以输出样本属于某类的概率。 |
|
| 43 |
随机森林中树的数量越多效果一定越好。 |
|
| 44 |
Softmax函数常用于多分类问题的输出层。 |
|
| 45 |
PyTorch的动态计算图在每次前向传播时重新构建。 |
|
| 46 |
Learning Rate Scheduler用于在训练过程中动态调整学习率。 |
|
| 47 |
GPU训练深度学习模型时,batch size不受显存限制。 |
|
| 48 |
Transformer模型可以并行处理输入序列。 |
|
| 49 |
图像分割任务中,每个像素都需要被分类。 |
|
| 50 |
YOLO是一种经典的目标检测算法。 |
|
| 51 |
Tokenization是将文本切分为Token的过程。 |
|
| 52 |
BERT是自回归语言模型。 |
|
| 53 |
Chain-of-Thought(思维链)提示可以提高大模型推理能力。 |
|
| 54 |
标注数据越多,模型效果一定越好。 |
|
| 55 |
数据标注规范应该包含标注边界和歧义处理规则。 |
|
| 56 |
模型上线后,特征工程逻辑可以随意修改。 |
|
| 57 |
灰度发布可以降低新版本上线风险。 |
|
| 58 |
模型推理服务需要考虑容灾和备份。 |
|
| 59 |
AI训练师不需要了解任何法律法规。 |
|
| 60 |
数据安全是AI系统全生命周期都需要关注的问题。 |
|
四、简答题(共5题,每题6分)
| 题号 |
题目 |
分值 |
| 61 |
请解释Bagging和Boosting两种集成学习方法的区别,并各举一个代表算法。 |
6 |
| 62 |
请设计一套针对图像分类的质量检查流程,包括数据预处理检查、模型输入检查和后处理检查。 |
6 |
| 63 |
请说明文本标注中BIO标注模式的具体规则,并用示例说明。 |
6 |
| 64 |
请论述模型从开发环境到生产环境的标准部署流程,包含必要的检查和验证步骤。 |
6 |
| 65 |
请列出AI项目中的数据伦理审查要点(至少5点)。 |
6 |
五、答案解析与考点索引
一、单选题答案与解析
| 题号 |
答案 |
解析 |
考点 |
| 1 |
B |
SGD每次只用一个样本更新参数,随机性大但速度快。BGD用全部样本,MBGD用一小批。 |
梯度下降变体 |
| 2 |
B |
SVM通过核函数(RBF/多项式等)将数据映射到高维空间,在高维空间中寻找线性超平面。 |
SVM原理 |
| 3 |
B |
信息增益 = 分裂前熵 - 分裂后加权熵,本质是不确定性的减少量。 |
决策树原理 |
| 4 |
B |
Bagging(Bootstrap Aggregating)基学习器并行独立训练;Boosting串行训练,后一个学习器依赖前一个的结果。 |
集成学习 |
| 5 |
C |
随机森林的"随机"包括:随机有放回采样(Bootstrap)和随机选择特征子集。不会随机生成标签。 |
随机森林 |
| 6 |
B |
model.eval()切换评估模式:Dropout失效、BatchNorm使用全局统计量而非batch统计量。 |
PyTorch基础 |
| 7 |
B |
Dropout在训练时以概率p随机"丢弃"(置零)神经元,强制网络学习冗余表示,防止过拟合。 |
正则化技术 |
| 8 |
B |
Adam = Momentum(惯性项)+ RMSProp(自适应学习率),是当前最常用的优化器之一。 |
优化器 |
| 9 |
D |
BN的三大作用:加速收敛、缓解梯度消失、轻微正则化。不会增加模型参数(可学习参数γ、β可忽略)。 |
BN作用 |
| 10 |
A |
torch.no_grad()上下文管理器中不构建计算图,用于推理阶段以减少显存和加速。 |
PyTorch技巧 |
| 11 |
B |
图像分类只判断类别,目标检测需要给出边界框(bounding box)+类别。 |
视觉任务 |
| 12 |
B |
IoU = 交集面积/并集面积,衡量预测框与Ground Truth的重叠程度,通常IoU>0.5视为正检。 |
评估指标 |
| 13 |
B |
翻转、旋转、缩放、裁剪属于几何变换;颜色抖动、亮度调整属于色彩增强。 |
数据增强 |
| 14 |
B |
Skip-gram:给定中心词预测上下文词。CBOW相反:给定上下文预测中心词。 |
Word2Vec |
| 15 |
A |
Attention核心机制:Query(查询向量)与Key(键向量)计算注意力权重,加权求和Value(值向量)。 |
注意力机制 |
| 16 |
B |
Few-shot:提供少量(通常1-5个)示例帮助LLM理解任务范式。Zero-shot不提供示例。 |
Prompt工程 |
| 17 |
B |
RNN在长序列中,梯度经过多次连乘后趋近于0(消失)或无穷大(爆炸),LSTM/GRU缓解了此问题。 |
RNN局限 |
| 18 |
B |
ASR(Automatic Speech Recognition)标注产出文本转录,将音频转写为文字。 |
语音标注 |
| 19 |
B |
预标注(Pre-labeling)是"人机协作"模式:模型出初稿→人工修正→效率大幅提升。 |
标注方法 |
| 20 |
C |
Label Studio是通用标注平台,支持文本/图像/语音/视频/时序等多种数据类型。 |
标注工具 |
| 21 |
B |
标注版本管理实现:谁、何时、改了哪条数据 → 可追溯、可回滚。 |
标注管理 |
| 22 |
B |
量化将浮点数(FP32)转换为低精度(INT8/FP16),减少模型体积和推理延迟,精度损失可控。 |
模型优化 |
| 23 |
B |
知识蒸馏:用大模型(Teacher)的软标签(概率分布)训练小模型(Student),让小模型学到泛化能力。 |
压缩技术 |
| 24 |
B |
ONNX(Open Neural Network Exchange)是跨框架的模型交换标准,支持PyTorch→ONNX→TensorRT等转换。 |
部署标准 |
| 25 |
B |
推理服务应独立部署、无状态、支持水平扩展。有状态+强耦合适用于训练阶段,不适合推理。 |
服务架构 |
| 26 |
B |
PSI(Population Stability Index)衡量特征/预测分布的稳定性,PSI>0.25提示明显偏移。 |
监控指标 |
| 27 |
C |
个人信息保护法中不存在"数据最大化原则",相反是"最小必要原则"。 |
法律法规 |
| 28 |
B |
AI偏见可来源于:训练数据不均衡、标注者主观偏见、算法设计缺陷、反馈循环等。 |
算法公平 |
| 29 |
B |
对抗样本通过对原始输入添加肉眼不可见的微小扰动,使模型输出完全错误的预测。 |
AI安全 |
| 30 |
C |
欧盟AI Act将人脸实时识别归为高风险/不可接受风险类别,受到最严格监管。 |
AI法规 |
二、多选题答案与解析
| 题号 |
答案 |
解析 |
| 31 |
ABC |
SGD、Adam、AdamW都是梯度下降变体优化器。KNN是分类算法。 |
| 32 |
ABD |
高偏差→欠拟合,高方差→过拟合。集成学习(Bagging)降低方差。偏差-方差存在权衡(trade-off)。 |
| 33 |
ABC |
PyTorch、TensorFlow、PaddlePaddle是主流深度学习框架。Word是办公软件。 |
| 34 |
ABD |
图像分类、语义分割、目标检测是CV任务。文本摘要属于NLP。 |
| 35 |
ABD |
BERT、GPT、RoBERTa是NLP预训练模型。ResNet是CV模型。 |
| 36 |
ABD |
多人标注一致性、黄金标准验证、标注者培训考核是质量控制方法。C不检查是错误做法。 |
| 37 |
ABC |
量化、蒸馏、剪枝是模型压缩/优化技术。增加层数会增加复杂度。 |
| 38 |
ABC |
QPS、P99延迟、准确率是核心运维指标。工作时长是非技术指标。 |
| 39 |
ABD |
AI应可解释、公平、可问责。C违反知情同意原则。 |
| 40 |
ABCD |
中国可信AI内涵:鲁棒性、可解释性、隐私保护、公平性全覆盖。 |
三、判断题答案与解析
| 题号 |
答案 |
解析 |
| 41 |
✗ |
梯度下降是局部优化算法,非凸问题可能陷入局部最优而非全局最优。 |
| 42 |
✓ |
逻辑回归通过Sigmoid函数输出[0,1]间的概率值,天然支持概率输出。 |
| 43 |
✗ |
树数量增加效果会趋于饱和,且增加计算开销。存在边际递减效应。 |
| 44 |
✓ |
Softmax将输出映射为概率分布(求和为1),是多分类的标准输出层。 |
| 45 |
✓ |
PyTorch采用动态计算图(Define-by-Run),每次前向传播时构建新的计算图。 |
| 46 |
✓ |
LR Scheduler在训练中按策略调整学习率(如StepLR、CosineAnnealing等)。 |
| 47 |
✗ |
Batch size受GPU显存限制,过大会OOM(Out of Memory)。 |
| 48 |
✓ |
Transformer的自注意力机制不依赖序列顺序,可并行计算所有位置。 |
| 49 |
✓ |
语义分割是pixel-level分类,对图像中每个像素预测其类别。 |
| 50 |
✓ |
YOLO(You Only Look Once)是单阶段目标检测的经典算法。 |
| 51 |
✓ |
Tokenization将文本切分为Token(词/子词/字符),是NLP预处理的第一步。 |
| 52 |
✗ |
BERT是自编码(Auto-Encoding)模型(MLM任务),GPT才是自回归(Auto-Regressive)模型。 |
| 53 |
✓ |
CoT提示通过引导模型逐步推理,显著提高复杂问题的推理准确率。 |
| 54 |
✗ |
数据质量比数量更重要。低质量的大量标注反而会引入噪声降低模型效果。 |
| 55 |
✓ |
好的标注规范应明确边界规则(如NER的实体边界)和歧义处理(模棱两可时如何标注)。 |
| 56 |
✗ |
上线后修改特征逻辑会导致在线/离线不一致,需要走变更管理流程。 |
| 57 |
✓ |
灰度发布通过逐步放量降低影响面,是新版本上线的风险控制手段。 |
| 58 |
✓ |
推理服务作为线上服务需要考虑容灾(主备/多活)和备份(模型版本快照)。 |
| 59 |
✗ |
AI训练师需了解相关法律法规(数据保护、AI治理等),这是职业素养的一部分。 |
| 60 |
✓ |
数据安全贯穿需求→设计→开发→部署→运维→销毁全生命周期。 |
四、简答题参考答案
61. Bagging与Boosting对比
| 维度 |
Bagging |
Boosting |
| 训练方式 |
基学习器并行、独立训练 |
基学习器串行,后一个依赖前一个 |
| 样本权重 |
等权Bootstrap采样 |
根据前一轮错误调整样本权重 |
| 核心思想 |
通过投票降低方差 |
通过迭代纠错降低偏差 |
| 代表算法 |
随机森林(Random Forest) |
XGBoost, AdaBoost, GBDT |
| 过拟合风险 |
较低(并行平均化) |
相对较高(可学习到噪声) |
62. 图像分类质量检查流程
数据预处理检查:
├── 图像尺寸、通道数是否与模型输入一致
├── 归一化均值和方差是否与训练时一致
├── 是否有损坏/异常图像(全黑/全白/0文件)
└── 标签映射是否包含所有类别
模型输入检查:
├── Tensor shape、dtype与模型签名一致
├── 输入值范围验证(如[0,1]或[-1,1])
└── Batch维度处理正确
后处理检查:
├── Softmax/sigmoid正确应用
├── Top-K结果置信度阈值检查
├── 输出格式与接口文档一致
└── 边界情况回归测试(亮度极暗/极亮图片)
63. BIO标注模式说明
| 标签 |
含义 |
示例 |
| B-PER |
人名开始 |
“李明"的"李” |
| I-PER |
人名内部 |
“李明"的"明” |
| B-LOC |
地点开始 |
“北京"的"北” |
| I-LOC |
地点内部 |
“北京"的"京” |
| O |
非实体 |
“今天”、标点等 |
示例标注:“李明在北京工作” → [B-PER, I-PER, O, B-LOC, I-LOC, O, O]
64. 模型标准部署流程
开发阶段
├── 代码review + 单元测试
├── 模型在独立测试集上评估
└── 离线/在线特征一致性验证
预发布阶段
├── 模型格式转换(如PyTorch→ONNX)
├── 推理服务Docker化封装
├── 开发环境模拟压测
└── 部署文档和回滚方案准备
灰度发布阶段
├── 5%流量验证(24h) → 检查准确率、延迟、错误率
├── 20%流量(48h) → 多维度监控
└── 全量上线→持续监控
回滚条件:
任一阶段出现:准确率下降>3% | P99延迟>2倍基线 | 错误率>1%
65. 数据伦理审查要点
- 数据来源合法性:数据采集是否获得用户知情同意?来源是否合法合规?
- 数据最小化:是否只收集了实现目的所必需的数据?有没有过度收集?
- 数据偏见审查:数据样本是否包含人口统计偏见?是否对特定群体不公平?
- 隐私保护措施:PII是否已脱敏?访问权限是否按最小必要原则分配?
- 用途限制:数据是否仅用于声明目的?是否存在用途扩散风险?
- 删除权保障:用户是否可以请求删除其数据?系统是否支持?
- 透明度:数据使用方式是否清晰告知用户?
六、AutoGrader 自动评分系统(试卷二)
"""
模拟试卷(二)自动评分系统
支持独立评分、双卷对比分析、进步趋势可视化
"""
from dataclasses import dataclass, field
from typing import List, Dict, Set, Optional
import json
@dataclass
class DualExamResult:
"""双卷对比结果"""
exam1_score: float
exam2_score: float
improvement: float
trend: str
persistent_weak: List[str]
fixed_areas: List[str]
overall_suggestion: str
class AutoGraderV2:
"""试卷二评分引擎(含双卷对比功能)"""
SINGLE = {
1:"B",2:"B",3:"B",4:"B",5:"C",6:"B",7:"B",8:"B",9:"D",10:"A",
11:"B",12:"B",13:"B",14:"B",15:"A",16:"B",17:"B",18:"B",19:"B",
20:"C",21:"B",22:"B",23:"B",24:"B",25:"B",26:"B",27:"C",28:"B",
29:"B",30:"C"
}
MULTI = {
31:{"A","B","C"}, 32:{"A","B","D"}, 33:{"A","B","C"},
34:{"A","B","D"}, 35:{"A","B","D"}, 36:{"A","B","D"},
37:{"A","B","C"}, 38:{"A","B","C"}, 39:{"A","B","D"},
40:{"A","B","C","D"}
}
TF = {
41:False,42:True,43:False,44:True,45:True,
46:True,47:False,48:True,49:True,50:True,
51:True,52:False,53:True,54:False,55:True,
56:False,57:True,58:True,59:False,60:True
}
TOPICS = {
"机器学习进阶": list(range(1,6)) + [31,32] + list(range(41,45)) + [61],
"深度学习与框架": list(range(6,11)) + [33] + list(range(45,49)),
"CV核心概念": list(range(11,14)) + [34] + list(range(49,51)) + [62],
"NLP与LLM": list(range(14,18)) + [35] + list(range(51,54)),
"数据标注进阶": list(range(18,22)) + [36] + list(range(54,56)) + [63],
"模型优化部署": list(range(22,27)) + [37,38] + list(range(56,59)) + [64],
"AI治理法规": list(range(27,31)) + [39,40] + list(range(59,61)) + [65]
}
MAX_SCORE = 100.0
PASS_SCORE = 60.0
def grade(self,
single_ans: Dict[int, str],
multi_ans: Dict[int, Set[str]],
tf_ans: Dict[int, bool],
short_scores: Optional[Dict[int, float]] = None,
time_spent: float = 0.0) -> dict:
"""评分并返回详细结果"""
total = 0.0
topic_correct = {t: 0 for t in self.TOPICS}
topic_total = {t: len(qs) for t, qs in self.TOPICS.items()}
single_count = 0
for qid, ans in self.SINGLE.items():
if single_ans.get(qid) == ans:
total += 1
single_count += 1
self._update_topic(topic_correct, qid)
multi_count = 0
for qid, ans_set in self.MULTI.items():
if multi_ans.get(qid) == ans_set:
total += 2
multi_count += 2
self._update_topic(topic_correct, qid)
tf_count = 0
for qid, ans in self.TF.items():
if tf_ans.get(qid) == ans:
total += 1
tf_count += 1
self._update_topic(topic_correct, qid)
short_total = 0
if short_scores:
for qid in [61,62,63,64,65]:
s = short_scores.get(qid, 0)
total += s
short_total += s
self._update_topic(topic_correct, qid)
weak = []
for topic, qids in self.TOPICS.items():
correct = topic_correct[topic]
total_qs = topic_total[topic]
rate = correct / total_qs if total_qs > 0 else 0
if rate < 0.6:
weak.append({"topic": topic, "correct": correct,
"total": total_qs, "rate": f"{rate:.0%}"})
suggestion = self._suggest(total, weak)
return {
"total_score": round(total, 1),
"max_score": self.MAX_SCORE,
"passed": total >= self.PASS_SCORE,
"section_scores": {
"单选题": single_count, "多选题": multi_count,
"判断题": tf_count, "简答题": short_total
},
"weak_areas": weak,
"suggestion": suggestion,
"time_spent": time_spent,
"topic_rates": {
t: f"{topic_correct[t]/topic_total[t]:.0%}"
for t in self.TOPICS if topic_total[t] > 0
}
}
def _update_topic(self, topic_correct: dict, qid: int):
for topic, qids in self.TOPICS.items():
if qid in qids:
topic_correct[topic] += 1
break
def _suggest(self, score: float, weak: list) -> str:
if score >= 90:
return "优秀!知识体系完整,建议挑战更综合的场景分析题。"
elif score >= 80:
msg = "良好!"
if weak:
msg += f" 需加强:{'、'.join(w['topic'] for w in weak)}。"
return msg
elif score >= 70:
return f"中等偏上。薄弱模块:{'、'.join(w['topic'] for w in weak)}。建议专项突破。"
elif score >= 60:
return "刚好通过。基础不扎实,建议系统复习薄弱章节后再做试卷三。"
else:
return "未通过。建议逐题分析答案解析,重新复习相关知识点。"
if __name__ == "__main__":
grader = AutoGraderV2()
single = {i: "B" for i in range(1,31)}
multi = {
31:{"A","B","C"},32:{"A","B","D"},33:{"A","B","C"},
34:{"A","B","D"},35:{"A","B","D"},36:{"A","B","D"},
37:{"A","B","C"},38:{"A","B","C"},39:{"A","B","D"},
40:{"A","B","C","D"}
}
tf = {i: True for i in range(41,61)}
short = {61:5, 62:4.5, 63:5, 64:4, 65:5}
result = grader.grade(single, multi, tf, short, time_spent=110)
print(f"{'='*50}")
print(f" 模拟试卷(二)成绩报告")
print(f"{'='*50}")
print(f" 总分: {result['total_score']}/100")
print(f" 结果: {'✓ 通过' if result['passed'] else '✗ 未通过'}")
print(f" 用时: {result['time_spent']}分钟")
print(f"\n 各题型得分:")
for sec, score in result['section_scores'].items():
print(f" {sec}: {score}分")
print(f"\n 知识点正确率:")
for topic, rate in result['topic_rates'].items():
bar = "█" * int(float(rate.strip('%')) / 10)
print(f" {topic:12s} [{bar:<10s}] {rate}")
if result['weak_areas']:
print(f"\n ⚠ 需要加强:")
for w in result['weak_areas']:
print(f" · {w['topic']}: {w['rate']} ({w['correct']}/{w['total']})")
print(f"\n 📋 建议:\n {result['suggestion']}")
七、双卷对比分析表
| 对比维度 |
试卷一得分 |
试卷二得分 |
变化 |
| 单选题(30分) |
自填___ |
自填___ |
— |
| 多选题(20分) |
自填___ |
自填___ |
— |
| 判断题(20分) |
自填___ |
自填___ |
— |
| 简答题(30分) |
自填___ |
自填___ |
— |
| 总分(100分) |
自填___ |
自填___ |
— |
八、Mermaid 知识点图谱
所有评论(0)