人工智能训练师-模拟试卷(三)+答案解析
·
一、导读
第三套模拟试卷在题型结构一致的基础上,重点覆盖了前两套尚未充分考察的知识领域:模型训练管道、MLOps基础、模型测试方法论、生产环境监控、标注工作流优化等。简答题难度略高,侧重综合场景分析,更适合做完卷一、卷二后的拔高训练。
二、试卷结构
┌─────────────────────────────────────────────────────────────┐
│ 模拟试卷(三)结构概览 │
├───────────┬──────┬──────┬──────────────────────────────────┤
│ 题型 │ 题量 │ 分值 │ 考点侧重 │
├───────────┼──────┼──────┼──────────────────────────────────┤
│ 单选题 │ 30 │ 30分 │ 工具使用、流程规范、参数理解 │
│ 多选题 │ 10 │ 20分 │ 方法论比较、最佳实践、综合判断 │
│ 判断题 │ 20 │ 20分 │ 原理辨析、概念边界、参数影响 │
│ 简答题 │ 5 │ 30分 │ 综合分析、方案设计、问题诊断 │
├───────────┼──────┼──────┼──────────────────────────────────┤
│ 合计 │ 65 │100分 │ 及格线: 60分 │
└───────────┴──────┴──────┴──────────────────────────────────┘
三、核心速记表:考点分布
| 知识领域 | 单选题号 | 多选题号 | 判断题号 | 简答题号 | 分值占比 |
|---|---|---|---|---|---|
| 数据处理与特征工程 | 1-5 | 31 | 41-44 | 61 | 14% |
| 模型训练与调优 | 6-10 | 32-33 | 45-48 | 62 | 16% |
| 模型测试与评估 | 11-14 | 34 | 49-52 | — | 12% |
| 标注工具与工作流 | 15-18 | 35 | 53-54 | 63 | 13% |
| MLOps与DevOps | 19-23 | 36-37 | 55-57 | 64 | 17% |
| Prompt工程与LLM应用 | 24-26 | 38 | 58 | — | 10% |
| 项目管理与软技能 | 27-30 | 39-40 | 59-60 | 65 | 18% |
四、模拟试卷(三)
一、单项选择题(共30题,每题1分)
| 题号 | 题目 | A | B | C | D |
|---|---|---|---|---|---|
| 1 | 特征工程中,对数值特征进行标准化(Standardization)的公式是? | (x-min)/(max-min) | (x-μ)/σ | x/σ | log(x)/μ |
| 2 | 皮尔逊相关系数用于衡量什么? | 两个变量之间的线性相关性 | 两个变量的因果关系 | 单个变量的方差 | 模型准确率 |
| 3 | 处理类别型特征时,高基数特征最不适合哪种编码方式? | Target Encoding | Label Encoding | One-Hot Encoding | Mean Encoding |
| 4 | 数据归一化(Normalization)后的特征值范围通常是? | [-1, 1] | [0, 1] | [-∞, +∞] | [0, 100] |
| 5 | PCA(主成分分析)的主要作用是? | 增加特征维度 | 降维、去相关性 | 数据增强 | 模型集成 |
| 6 | 模型训练中,train()和eval()模式的主要区别在于? |
无区别 | Dropout和BatchNorm的行为不同 | 训练模式不需要计算梯度 | eval模式会更新参数 |
| 7 | 以下哪个不属于模型训练的超参数? | 学习率(Learning Rate) | 批大小(Batch Size) | 模型权重(Weights) | Dropout率 |
| 8 | 训练日志(Training Log)中需要记录的最小信息不包括? | 每个epoch的loss | 验证集指标 | 学习率变化 | 编译器版本号 |
| 9 | DistributedDataParallel(DDP)的优势是什么? | 只能用单GPU | 多GPU并行训练,每GPU独立计算梯度 | 不需要同步 | 只能用CPU |
| 10 | 混合精度训练(AMP)的主要好处是什么? | 提高精度 | 减少显存占用和加速训练 | 增加参数量 | 提升模型可解释性 |
| 11 | 模型测试中,鲁棒性测试的目的是什么? | 验证基本功能 | 验证模型在异常/扰动输入下的稳定性 | 检查代码规范 | 测试训练速度 |
| 12 | 回归任务的常用损失函数是? | 交叉熵损失(CrossEntropy) | 均方误差(MSE) | 铰链损失(Hinge Loss) | 对比损失(Contrastive Loss) |
| 13 | 模型性能基准测试(Benchmark)通常需要比较什么? | 仅同模型的旧版本 | 同任务的其他开源模型/SOTA | 仅训练时间 | 仅模型大小 |
| 14 | 测试覆盖率(Test Coverage)在AI训练师语境中指什么? | 代码覆盖率 | 测试用例对业务场景的覆盖程度 | 数据量 | 训练轮数 |
| 15 | 使用Doccano进行文本标注的步骤顺序是? | 导出→标注→导入 | 创建项目→导入数据→标注→导出 | 标注→导入→导出 | 导入→导出→标注 |
| 16 | 标注项目的工时估算,通常用什么单位? | 代码行数 | 条/小时 或 条/天 | GPU小时 | CPU核数 |
| 17 | 标注规范的迭代更新应该在什么时候进行? | 项目结束后 | 发现规范不完善时及时补充 | 从来不需要 | 每天更新 |
| 18 | 标注平台中"任务分配"功能的主要用途是什么? | 给每个人分配相同的所有数据 | 将标注任务合理分配给标注者并控制复杂度 | 随机分配 | 所有数据给一个人 |
| 19 | MLOps和DevOps的核心区别在于? | 完全一样 | MLOps包含数据版本化、模型版本化、实验追踪 | MLOps不需要CI/CD | DevOps更关注模型 |
| 20 | 实验追踪(Experiment Tracking)中应该记录什么? | 仅准确率 | 超参数、指标、代码版本、数据版本 | 仅训练时间 | 仅模型大小 |
| 21 | 特征存储(Feature Store)的核心价值是? | 增加存储成本 | 统一管理特征定义,保证在线/离线一致性 | 存储全部原始数据 | 替代数据库 |
| 22 | CI/CD在AI项目中的含义是? | Continuous Integration / Continuous Deployment | Copy Image / Copy Data | Check Input / Check Data | Create Image / Create Data |
| 23 | 模型注册中心(Model Registry)的主要功能是? | 存储训练数据 | 集中管理模型版本、元数据和部署状态 | 管理标注数据 | 管理GPU资源 |
| 24 | 在Prompt Engineering中,Chain-of-Thought提示的主要作用是? | 减少输出长度 | 引导模型逐步推理,提高复杂问题准确率 | 增加输出随机性 | 减少计算成本 |
| 25 | 以下哪个不是Prompt优化的常见技巧? | 提供清晰的角色设定 | 使用分隔符分隔不同部分 | 完全随机化Prompt内容 | 提供Few-Shot示例 |
| 26 | LLM应用中的上下文窗口(Context Window)指什么? | GPU显存大小 | 模型一次能处理的最大Token数量 | 训练数据量 | 模型参数数量 |
| 27 | 以下哪项不是AI训练师三级岗位的典型工作? | 模型训练与调优 | 数据标注质量管控 | 发表AI顶会论文(非核心要求) | 模型部署与监控 |
| 28 | 在AI项目团队中,训练师通常需要和谁协作? | 只需独立工作 | 算法工程师、数据工程师、产品经理 | 只和标注团队 | 不和任何人协作 |
| 29 | 撰写项目技术报告时,不需要包含什么? | 项目背景与目标 | 技术方案与实施过程 | 个人薪资信息 | 效果评估与改进建议 |
| 30 | 遇到超出技术能力范围的问题时,AI训练师应该? | 忽略不管 | 及时向上级/技术专家求助,明确描述问题 | 随便猜测 | 直接辞职 |
二、多项选择题(共10题,每题2分)
| 题号 | 题目 | A | B | C | D |
|---|---|---|---|---|---|
| 31 | 以下属于数据预处理步骤的有? | 缺失值填充 | 异常值检测 | 特征归一化 | 模型推理 |
| 32 | 训练过程中的调优手段包括? | 调整学习率 | 修改损失函数 | 增加训练数据量 | 忽略验证集表现 |
| 33 | 以下哪些是判断模型过拟合的依据? | 训练集准确率远高于验证集 | 验证集loss先降后升 | 模型参数极少 | 训练集和验证集准确率都低 |
| 34 | 模型测试应该覆盖的场景包括? | 正常场景 | 边界场景 | 异常/对抗场景 | 只测训练集数据 |
| 35 | 以下哪些是数据标注工具需要具备的功能? | 项目管理 | 标注规范展示 | 任务分配与跟踪 | 数据导入导出 |
| 36 | MLOps平台通常包含的功能有? | 模型版本管理 | 实验追踪 | 自动部署管道 | 邮件系统 |
| 37 | 以下关于模型监控的指标,合理的包括? | 推理P99延迟 | 预测分布变化(PSI) | 模型准确率趋势 | 每天喝了几杯咖啡 |
| 38 | 好的Prompt设计原则包括? | 清晰明确的任务描述 | 适当的上下文信息 | 要求JSON格式时提供Schema | 越模糊越好 |
| 39 | AI训练师需要具备的软技能包括? | 沟通协作能力 | 文档写作能力 | 问题分析能力 | 完全不需要沟通 |
| 40 | 以下关于AI项目文档的说法正确的有? | 文档应在项目进行中同步更新 | 技术文档应面向不同读者分层 | 文档只需要代码注释 | 好的文档可以降低交接成本 |
三、判断题(共20题,每题1分)
| 题号 | 题目 | 答案 |
|---|---|---|
| 41 | 皮尔逊相关系数为0表示两个变量完全相关。 | |
| 42 | 特征工程中,归一化就是把数据变成[0,1]范围。 | |
| 43 | 缺失值处理时,删除所有含缺失值的行总是最优方案。 | |
| 44 | Pearson相关系数无法捕捉非线性关系。 | |
| 45 | 模型训练中设置随机种子(seed)可以保证结果可复现。 | |
| 46 | 学习率衰减(Decay)在训练后期通常需要减小学习率。 | |
| 47 | 使用梯度累积(Gradient Accumulation)可以在显存有限时模拟更大的batch size。 | |
| 48 | 训练过程中GPU利用率100%一定表示训练效率最高。 | |
| 49 | 测试集可以用于超参数选择。 | |
| 50 | 多分类任务中,所有类别的Precision和Recall通常取宏平均(Macro Avg)。 | |
| 51 | 模型测试只需在开发阶段做一次。 | |
| 52 | 测试用例应该包含正例、反例和边界例。 | |
| 53 | 标注团队不需要了解业务背景。 | |
| 54 | 多人标注的交叉验证可以提高标注质量。 | |
| 55 | 实验追踪仅仅是一个可选的好习惯,不影响模型迭代效率。 | |
| 56 | 模型上线后还需要持续监控性能指标。 | |
| 57 | 特征存储可以确保在线推理和离线训练使用相同的特征计算逻辑。 | |
| 58 | Prompt Engineering的价值在于通过精心设计输入引导LLM产出高质量输出。 | |
| 59 | AI训练师的工作只需要关注技术,不需要考虑业务价值。 | |
| 60 | 遇到自己无法解决的问题时,隐瞒不报是合理的做法。 |
四、简答题(共5题,每题6分)
| 题号 | 题目 | 分值 |
|---|---|---|
| 61 | 请设计一个完整的文本分类项目的数据处理管道(Pipeline),包括原始数据读取到模型输入的完整流程。 | 6 |
| 62 | 请阐述模型训练中从数据处理到模型保存的完整训练Pipeline,并说明每个阶段的关键检查点。 | 6 |
| 63 | 请设计一个标注团队的管理方案,包括人员培训、质量控制和效率提升措施。 | 6 |
| 64 | 请说明MLOps在AI项目中的价值,并描述一个典型的MLOps工作流。 | 6 |
| 65 | 在实际工作中,你发现某模型的线上准确率从95%逐渐下降到88%。请设计一个完整的故障排查和处理流程。 | 6 |
五、答案解析与考点索引
一、单选题答案与解析
| 题号 | 答案 | 解析 | 考点 |
|---|---|---|---|
| 1 | B | 标准化(Z-score): (x-μ)/σ,使特征变为均值为0、标准差为1的分布。A是最小-最大归一化。 | 特征标准化 |
| 2 | A | 皮尔逊相关系数®衡量两变量间的线性相关程度,范围[-1,1]。相关系数≠因果关系。 | 相关性分析 |
| 3 | C | One-Hot会将高基数特征(如用户ID有10万取值)展开为10万维稀疏向量,导致维度爆炸。 | 特征编码 |
| 4 | B | Min-Max归一化将特征缩放到[0,1]或[-1,1]。A是标准化后的分布特征不是固定范围。 | 归一化 |
| 5 | B | PCA通过线性变换将高维数据投影到低维空间,去除特征间相关性,实现降维。 | 降维方法 |
| 6 | B | train()模式下Dropout生效、BatchNorm用batch统计量;eval()模式下Dropout失效、BatchNorm用全局统计量。 | 模式切换 |
| 7 | C | 模型权重是训练过程中学习到的参数,不是超参数。超参数是训练前手动设定的。 | 超参数概念 |
| 8 | D | 编译器版本通常不影响模型训练结果,不被视为训练日志的必需信息。 | 训练日志 |
| 9 | B | DDP每个GPU独立前向+反向传播,梯度通过AllReduce同步,实现高效多卡训练。 | 分布式训练 |
| 10 | B | AMP使用FP16计算减少显存和加速训练,通过loss scaling保持精度。 | 混合精度 |
| 11 | B | 鲁棒性测试验证模型在噪声、对抗样本、异常输入等扰动下的表现稳定性。 | 测试类型 |
| 12 | B | 均方误差(MSE)是最常用的回归损失函数。交叉熵对应分类,铰链损失对应SVM。 | 损失函数 |
| 13 | B | Benchmark需要对比同任务的其他模型/SOTA,全面评估模型在标准测试集上的竞争力。 | 基准测试 |
| 14 | B | AI场景中的测试覆盖率指测试用例对业务场景的覆盖程度,而非传统软件工程的代码覆盖率。 | 测试概念 |
| 15 | B | Doccano标准流程:创建项目→配置标签→导入数据→执行标注→导出标注结果。 | 标注工具 |
| 16 | B | 标注工时通常用条/小时或条/天衡量,与内容复杂度、标注类型相关。 | 工时估算 |
| 17 | B | 标注规范应持续迭代。发现边界不清、歧义问题时及时更新通知团队。 | 规范管理 |
| 18 | B | 任务分配应合理分配,保证难度均匀、标注者不会疲劳度过高,支持质量抽检。 | 任务管理 |
| 19 | B | MLOps=DevOps+数据版本化+模型版本化+实验追踪+模型监控。 | MLOps概念 |
| 20 | B | 实验追踪需记录超参数、评估指标、代码版本(Git commit)、数据版本,确保可复现。 | 实验管理 |
| 21 | B | 特征存储统一管理特征定义和计算逻辑,保证在线推理与离线训练使用相同的特征。 | 特征平台 |
| 22 | A | CI/CD全称Continuous Integration / Continuous Deployment,自动化构建测试部署流程。 | 术语含义 |
| 23 | B | 模型注册中心集中管理各版本模型的元数据(创建时间、指标、标签)和部署状态(测试/生产/归档)。 | 模型管理 |
| 24 | B | CoT提示通过"让我们一步一步思考"等引导激发大模型逐步推理能力。 | CoT提示 |
| 25 | C | 完全随机化Prompt内容会导致输出质量不可控,不是优化技巧。A/B/D均是常见技巧。 | Prompt技巧 |
| 26 | B | 上下文窗口指模型一次能处理的最大Token数量(如GPT-4的128K),决定了输入+输出的上限。 | LLM概念 |
| 27 | C | 发表顶会论文更偏向研究员/算法科学家职责,三级训练师侧重工程应用。 | 岗位认知 |
| 28 | B | AI训练师需与算法工程师(模型)、数据工程师(数据管道)、产品经理(需求)等多角色协作。 | 团队协作 |
| 29 | C | 个人薪资信息属于隐私,不需要出现在项目技术报告中。 | 文档规范 |
| 30 | B | 专业做法是及时上报,清晰描述问题现象和已尝试的解决步骤,寻求技术支持。 | 职业素养 |
二、多选题答案与解析
| 题号 | 答案 | 解析 |
|---|---|---|
| 31 | ABC | 缺失值处理、异常值检测、归一化是标准预处理步骤。D模型推理是推理阶段。 |
| 32 | ABC | 调整学习率、改损失函数、增加数据都是调优手段。D忽视验证集是错误的。 |
| 33 | AB | A训练集远高于验证集和B验证集loss先降后升是过拟合特征。C参数少可能欠拟合。D双双低是欠拟合。 |
| 34 | ABC | 正常/边界/异常场景都需要覆盖。D只用训练集测试没有意义。 |
| 35 | ABCD | 项目管理、规范展示、任务分配、导入导出都是标注平台基本功能。 |
| 36 | ABC | 版本管理、实验追踪、自动部署是MLOps核心功能。邮件系统不是AI专用功能。 |
| 37 | ABC | 延迟、分布稳定性(PSI)、准确率趋势是核心监控指标。D不是技术指标。 |
| 38 | ABC | 清晰描述、上下文信息、格式约束都是好的Prompt设计原则。D模糊性会在生产场景导致不稳定输出。 |
| 39 | ABC | 沟通、写作、分析能力是训练师必备软技能。D完全不需要沟通显然错误。 |
| 40 | ABD | 文档应同步更新、面向不同读者分层、降低交接成本。C仅有代码注释远远不够。 |
三、判断题答案与解析
| 题号 | 答案 | 解析 |
|---|---|---|
| 41 | ✗ | 相关系数为0表示无线性相关,但仍可能存在非线性关系(如y=x²中r≈0但存在函数关系)。 |
| 42 | ✓ | Min-Max归一化(X-min)/(max-min)将数据缩放到[0,1]范围内。 |
| 43 | ✗ | 直接删除会损失信息。应根据缺失比例和业务含义选择填充/删除/标记策略。 |
| 44 | ✓ | 皮尔逊相关系数只捕捉线性关系,无法识别非线性相关性(如U型关系)。 |
| 45 | ✓ | 设置随机种子后,随机初始化、数据shuffle等都变得可复现,有助于调优和debug。 |
| 46 | ✓ | 训练后期减小学习率有助于精细调整参数,避免在最优解附近震荡。 |
| 47 | ✓ | 梯度累积(多步累计梯度再更新)可以用小batch模拟大batch效果,解决显存不足问题。 |
| 48 | ✗ | GPU利用率高不一定代表有效计算。可能出现CPU瓶颈(数据加载慢)导致的"空转"。 |
| 49 | ✗ | 测试集不能用于超参数选择,否则会过拟合测试集。应用验证集做超参数选择。 |
| 50 | ✓ | Macro Avg对各类别指标等权平均,不受类别不均衡影响,是多分类常用方式。 |
| 51 | ✗ | 模型测试是持续的:开发期→功能测试,上线前→性能测试,上线后→回归测试+监控。 |
| 52 | ✓ | 正例(正常功能)、反例(预期拒绝)、边界例(边界条件)覆盖是测试设计的标准方法。 |
| 53 | ✗ | 了解业务背景有助于标注者理解标注目的和规则,提高标注质量和一致性。 |
| 54 | ✓ | 多人交叉标注+一致性校验可以发现标注歧义,是提升标注质量的有效手段。 |
| 55 | ✗ | 实验追踪直接影响模型迭代效率:无法复现→无法比较→无法优化,是效率的基础保障。 |
| 56 | ✓ | 上线后可能出现数据漂移、概念漂移、模型衰退等,需持续监控。 |
| 57 | ✓ | 特征存储的核心价值:同一套特征定义,离线训练和在线推理使用完全一致的计算逻辑。 |
| 58 | ✓ | Prompt Engineering的本质:通过精心设计输入文本,引导LLM输出符合预期的高质量结果。 |
| 59 | ✗ | AI训练师需要理解业务价值,才能设计出真正解决业务问题的AI方案。 |
| 60 | ✗ | 隐瞒问题可能导致更严重的后果。应及时沟通、透明汇报。 |
四、简答题参考答案
61. 文本分类数据处理Pipeline
原始数据读取
├── 支持多种格式: CSV/JSON/TXT
├── 读取时指定编码(UTF-8)
└── 数据格式校验(列名、类型)
数据清洗
├── 去重: 基于文本Hash去重
├── 缺失值: 删除标签缺失的行,文本缺失填""
├── 文本清洗: 去除HTML标签、多余空格、特殊字符
└── 长度过滤: 删除<3字或>2000字的异常文本
数据标注
├── 标注规范确认
├── 标注一致性检验(Kappa>0.8)
└── 标注质量抽检(10%抽样)
特征工程
├── Tokenization(分词/子词切分)
├── 序列Padding/Truncation到固定长度
├── Attention Mask生成
└── Label映射(文本标签→数字ID)
数据划分
├── 分层抽样 Stratified Split
├── 训练:验证:测试 = 8:1:1
└── 类别分布检查(确保各类别比例一致)
输出格式
├── PyTorch Dataset / TensorFlow Dataset
├── DataLoader(Batch+Shuffle)
└── 数据统计报告(各类别样本量、平均长度等)
62. 模型训练Pipeline及检查点
| 阶段 | 关键操作 | 检查点 |
|---|---|---|
| 数据加载 | 创建DataLoader | 验证batch shape正确、shuffle生效 |
| 模型初始化 | 加载预训练权重/随机初始化 | 参数量合理、预训练权重加载成功 |
| 训练循环 | For epoch: train → validate | 记录loss/准确率、检查梯度是否NaN |
| 验证评估 | 每个epoch后在验证集评估 | 早停条件检查、最佳模型保存 |
| 模型保存 | 保存最佳checkpoint | 保存config+state_dict+optimizer状态 |
| 训练报告 | 汇总所有epoch指标 | 输出训练曲线图、最终指标 |
63. 标注团队管理方案
人员培训:
- 岗前培训:业务背景(2h)+ 标注规范讲解(2h)+ 实操练习(4h)
- 考核上岗:黄金标准数据集考核,准确率>90%方可上岗
- 持续培训:每周例会复盘高频错误
质量控制:
- 交叉标注:20%数据双重标注,计算一致性
- 每日抽检:质量专员每天抽检每人5%标注结果
- 黄金标准验证:每周用黄金标准数据集重新考核
效率提升:
- 预标注辅助:模型先标注人工修正,效率提升50%+
- 快捷键优化:减少鼠标操作,提升标注速度
- 工作量透明:每日公布标注量,激励竞争
64. MLOps价值与典型工作流
MLOps核心价值:
- 可复现性:代码+数据+环境版本化,实验可重新运行
- 效率提升:自动化训练→评估→部署流水线
- 质量保障:持续监控模型性能,自动发现问题
- 协作管理:统一的实验记录和模型注册,团队协作有序
典型工作流:
数据版本化→特征工程→实验追踪→模型训练→模型注册→
CI/CD部署→A/B测试→性能监控→触发重训→循环迭代
65. 线上准确率下降排查流程
┌──────────────┐
│ 准确率下降 │
│ 95% → 88% │
└──────┬───────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌─────────┐ ┌──────────┐
│ 数据层面 │ │模型层面 │ │ 环境层面 │
│ 排查 │ │排查 │ │ 排查 │
└────┬─────┘ └────┬────┘ └────┬─────┘
│ │ │
┌────────▼──────┐ ┌──▼──────┐ ┌──▼─────────┐
│·特征分布漂移 │ │·模型文件│ │·推理服务异常 │
│·特征缺失率 │ │ 损坏 │ │·特征计算变更 │
│·数据源变更 │ │·版本错误│ │·依赖库升级 │
│·概念漂移 │ │·配置变更│ │·GPU异常 │
└───────┬───────┘ └──┬─────┘ └──────┬──────┘
│ │ │
└────────────┼─────────────┘
│
┌────▼─────┐
│ 根因定位 │
│ + 处理方案│
└────┬─────┘
│
┌──────────┼──────────┐
▼ ▼ ▼
┌─────────┐ ┌───────┐ ┌───────┐
│数据漂移 │ │概念 │ │环境 │
│→重训练 │ │漂移 │ │问题 │
│ 或校准 │ │→重训 │ │→修复 │
└─────────┘ └───────┘ └───────┘
六、AutoGrader 自动评分系统(试卷三)
"""
模拟试卷(三)评分 + 三卷综合分析
支持三卷成绩对比和综合能力雷达图数据生成
"""
from dataclasses import dataclass, field
from typing import List, Dict, Set, Optional, Tuple
import json
import math
@dataclass
class MultiExamReport:
"""多卷综合分析报告"""
exams: List[Dict] # 各卷成绩详情
avg_score: float # 平均分
trend: str # 趋势:持续上升/波动/持续下降
stable_strong: List[str] # 持续强势领域
consistent_weak: List[str] # 持续薄弱领域
readiness: str # 考试准备度评估
suggested_focus: List[Tuple[str, str]] # 考前重点复习建议
class AutoGraderV3:
"""试卷三评分 + 三卷综合分析引擎"""
SINGLE = {
1:"B",2:"A",3:"C",4:"B",5:"B",6:"B",7:"C",8:"D",9:"B",10:"B",
11:"B",12:"B",13:"B",14:"B",15:"B",16:"B",17:"B",18:"B",19:"B",
20:"B",21:"B",22:"A",23:"B",24:"B",25:"C",26:"B",27:"C",28:"B",
29:"C",30:"B"
}
MULTI = {
31:{"A","B","C"}, 32:{"A","B","C"}, 33:{"A","B"},
34:{"A","B","C"}, 35:{"A","B","C","D"}, 36:{"A","B","C"},
37:{"A","B","C"}, 38:{"A","B","C"}, 39:{"A","B","C"},
40:{"A","B","D"}
}
TF = {
41:False,42:True,43:False,44:True,45:True,
46:True,47:True,48:False,49:False,50:True,
51:False,52:True,53:False,54:True,55:False,
56:True,57:True,58:True,59:False,60:False
}
TOPICS = {
"数据处理": list(range(1,6)) + [31] + list(range(41,45)) + [61],
"模型训练": list(range(6,11)) + [32,33] + list(range(45,49)) + [62],
"模型测试": list(range(11,15)) + [34] + list(range(49,53)),
"标注管理": list(range(15,19)) + [35] + list(range(53,55)) + [63],
"MLOps": list(range(19,24)) + [36,37] + list(range(55,58)) + [64],
"Prompt与LLM": list(range(24,27)) + [38] + [58],
"职业素养": list(range(27,31)) + [39,40] + list(range(59,61)) + [65]
}
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}
for qid, ans in self.SINGLE.items():
if single_ans.get(qid) == ans:
total += 1
self._inc_topic(topic_correct, qid)
for qid, ans_set in self.MULTI.items():
if multi_ans.get(qid) == ans_set:
total += 2
self._inc_topic(topic_correct, qid)
for qid, ans in self.TF.items():
if tf_ans.get(qid) == ans:
total += 1
self._inc_topic(topic_correct, qid)
if short_scores:
for qid in [61,62,63,64,65]:
total += short_scores.get(qid, 0)
self._inc_topic(topic_correct, qid)
weak = []
for topic, qids in self.TOPICS.items():
correct = topic_correct[topic]
total_qs = len(qids)
rate = correct / total_qs if total_qs > 0 else 0
if rate < 0.6:
weak.append({"topic": topic, "rate": f"{rate:.0%}"})
return {
"total_score": round(total, 1),
"passed": total >= 60,
"weak_areas": weak,
"topic_rates": {
t: f"{topic_correct[t]/len(qs):.0%}"
for t, qs in self.TOPICS.items() if len(qs) > 0
},
"time_spent": time_spent
}
def _inc_topic(self, tc: dict, qid: int):
for topic, qids in self.TOPICS.items():
if qid in qids:
tc[topic] += 1
break
@staticmethod
def analyze_triple(results: List[dict]) -> MultiExamReport:
"""三卷综合分析"""
if len(results) < 3:
return MultiExamReport(
exams=results, avg_score=0, trend="数据不足",
stable_strong=[], consistent_weak=[],
readiness="需完成全部三套试卷后分析",
suggested_focus=[]
)
scores = [r.get("total_score", 0) for r in results]
avg = sum(scores) / len(scores)
# 趋势分析
diffs = [scores[i+1] - scores[i] for i in range(len(scores)-1)]
if all(d > 2 for d in diffs):
trend = "持续上升 ↑ — 复习效果显著"
elif all(d < -2 for d in diffs):
trend = "持续下降 ↓ — 建议暂停刷题,回归知识复习"
else:
trend = "波动中 — 知识掌握不够稳定"
# 考试准备度
if avg >= 85:
readiness = "充分 — 可以自信参加正式考试"
elif avg >= 70:
readiness = "良好 — 建议针对性补强薄弱项后参加考试"
elif avg >= 60:
readiness = "勉强 — 建议再系统复习1-2周"
else:
readiness = "不足 — 建议制定详细复习计划,重点突破薄弱模块"
return MultiExamReport(
exams=results, avg_score=round(avg, 1),
trend=trend, stable_strong=[],
consistent_weak=[], readiness=readiness,
suggested_focus=[]
)
# ============ 使用示例 ============
if __name__ == "__main__":
grader = AutoGraderV3()
single = {i: "B" for i in range(1,31)}
multi = {
31:{"A","B","C"},32:{"A","B","C"},33:{"A","B"},
34:{"A","B","C"},35:{"A","B","C","D"},36:{"A","B","C"},
37:{"A","B","C"},38:{"A","B","C"},39:{"A","B","C"},
40:{"A","B","D"}
}
tf = {i: True for i in range(41,61)}
short = {61:5, 62:4, 63:5, 64:4, 65:5}
result = grader.grade(single, multi, tf, short, time_spent=115)
print(f"{'='*50}")
print(f" 模拟试卷(三)成绩报告")
print(f"{'='*50}")
print(f" 总分: {result['total_score']}/100")
print(f" 结果: {'✓ 通过' if result['passed'] else '✗ 未通过'}")
print(f"\n 各知识点正确率:")
for topic, rate in result['topic_rates'].items():
bar = "█" * int(float(rate.strip('%')) / 10)
print(f" {topic:10s} [{bar:<10s}] {rate}")
if result['weak_areas']:
print(f"\n ⚠ 薄弱领域:")
for w in result['weak_areas']:
print(f" · {w['topic']}: {w['rate']}")
# 导出JSON
print(f"\n{json.dumps(result, ensure_ascii=False, indent=2)}")
七、三卷综合对比表
| 对比维度 | 试卷一 | 试卷二 | 试卷三 | 趋势 |
|---|---|---|---|---|
| 总分 | ___/100 | ___/100 | ___/100 | — |
| 数据处理 | — | — | ___% | — |
| 模型训练 | — | — | ___% | — |
| 标注管理 | — | — | ___% | — |
| 部署运维 | — | — | ___% | — |
| 考试准备度 | — | — | — | — |
八、Mermaid 知识点图谱
更多推荐

所有评论(0)