资讯动态

领域特定评估实战:用 Argilla、Distilabel 与 LightEval 构建考试问答评估流水线(smol-course)

发布时间:2026/10/9 4:52:20 来源:尧图企业网站定制
教程人工智能大模型NLP微调【免费下载链接】smol-courseA course on aligning smol models.项目地址https://gitcode.com/gh_mirrors/smo/smol-course点击查看免费下载主流基准如 MMLU、TruthfulQA大多衡量推理、数学、代码等通用能力但真实业务场景往往需要对特定领域金融、法律、医疗等做定制化评估。本文以 smol-course 项目中的《Evaluación Específica en un Dominio》项目文档为骨架完整还原一条「文档 → 试题生成 → 人工标注 → 数据集发布 → LightEval 评估」的端到端流水线你将掌握 distilabel 的合成数据生成、Argilla 的标注闭环、Hugging Face Hub 数据集发布以及 LightEval 自定义任务与自定义指标的编写方法最终能用它评估任何领域内的 LLM包括本项目关注的 smol 小模型。项目结构与四步流程该评估项目位于 v1/es/4_evaluation/project/遵循一个步骤一个脚本的设计共 4 个脚本覆盖从数据生成到模型评估的全流程脚本名称作用generate_dataset.py使用指定的语言模型从多个文本文档中生成考试题目annotate_dataset.py在 Argilla 中创建数据集供人工对生成的题目进行标注审核create_dataset.py处理 Argilla 中标注好的数据创建并发布 Hugging Face 数据集evaluation_task.py定义 LightEval 自定义任务用于在考试题数据集上评估语言模型整条流水线的思路是先用 LLM 合成大量候选样本再由领域专家人工把关最后把高质量样本沉淀为可复用的评估基准。这与该模块文档 v1/es/4_evaluation/README.md 中合成生成 专家验证的评估方法论一脉相承也对应 custom_evaluation.md 中使用 LLM 生成初始样本、由专家验证完善的数据集创建建议。第 1 步用 distilabel 生成考试题库generate_dataset.py基于 distilabel 构建生成管线读取输入目录中的全部.txt文档交给指定 LLM 生成问题 正确答案 干扰项distractors。文档中提到默认模型为 Meta-Llama-3.1-8B-Instruct而从源码看generate_dataset.py 中--model_id与--tokenizer_id的实际默认值是Qwen/Qwen2.5-7B-Instruct——你完全可以换成任意 Hugging Face 上的模型 ID也可以替换成自己领域的文档。运行命令与参数说明python generate_dataset.py --input_dir ubicacion/de/los/documentos --model_id id_del_modelo --output_path output_directory参数默认值说明--input_dirdata存放输入文本文档的目录每个.txt文件视为同一主题下的一份独立文档--model_idQwen/Qwen2.5-7B-Instruct用于文本生成推理的模型 ID--tokenizer_idQwen/Qwen2.5-7B-Instruct分词器 ID--max_new_tokens2048每次生成的最大新 token 数--output_pathexam_questions_output生成结果Distiset的保存目录命令执行后会在--output_path下生成一个 distilabelDistiset其中包含输入目录中所有文档对应的考试题目。Distiset 是 distilabel 的多配置数据集容器后续标注脚本正是通过Distiset.load_from_disk()加载它。源码级要点结构化输出保证数据质量生成质量的关键在于结构化输出约束。脚本定义了 Pydantic 数据模型generate_dataset.pyclass ExamQuestion(BaseModel): question: str Field(..., descriptionThe question to be answered) answer: str Field(..., descriptionThe correct answer to the question) distractors: List[str] Field( ..., descriptionA list of incorrect but viable answers to the question ) class ExamQuestions(BaseModel): exam: List[ExamQuestion]随后通过InferenceEndpointsLLM的structured_output{schema: ExamQuestions.model_json_schema(), format: json}generate_dataset.py强制模型按 JSON 输出保证每条记录都包含 question、answer 和多个 distractors——这正是后续 LightEval 选择题评估任务能直接消费的格式。同时脚本内置了系统提示词要求模型扮演出题人输出符合规定 JSON 结构和指令模板把文档内容插入{{ instruction }}占位符。需要留意的是脚本通过os.environ[HF_TOKEN]读取 Hugging Face 令牌来调用 InferenceEndpoints因此运行前需设置好环境变量。第 2 步用 Argilla 人工标注与审核LLM 生成的题目质量参差不齐必须经过人工把关。annotate_dataset.py负责把 Distiset 中的题目灌入 Argilla 数据集供你或领域专家逐条审核。它做的关键设计是把正确答案和干扰项打乱顺序展示避免标注者因固定位置产生习惯性偏见同时把 LLM 认为的正确答案以 suggestion建议形式提供给标注者加快审核速度。运行命令与参数说明python annotate_dataset.py --dataset_path ubicacion/del/distiset --output_dataset_name nombre_de_los_datos_argilla参数默认值说明--argilla_api_keyargilla.apikeyArgilla 实例的 API Key--argilla_api_urlhttp://localhost:6900Argilla 服务地址--dataset_pathexam_questions第 1 步生成的 Distiset 路径--dataset_configdefault使用的数据集配置名--dataset_splittrain使用的数据集划分--output_dataset_nameexam_questions创建的 Argilla 数据集名称源码级要点数据集结构与去偏逻辑annotate_dataset.py 中创建的数据集结构包含字段fieldsquestion与answer_aanswer_d四个候选答案文本标注问题questionscorrect_answer从四个答案中选出正确项的单选标签、improved_question可否改进题目、improved_answer可否改进最佳答案两个自由文本问题。去偏逻辑在 annotate_dataset.py从 Distiset 中解析generation列的 JSON用choices()从干扰项中抽取 3 个与正确答案合并后用sample()随机打乱再通过rg.Suggestion(question_namecorrect_answer, valueanswer_names[suggestion_idx])把 LLM 的正确答案建议挂到对应选项上。标注时你在 Argilla 界面中会看到随机排列的候选答案和 LLM 的建议只需确认建议是否正确或改选其他选项。标注耗时取决于评估数据规模、领域复杂度与 LLM 质量。项目文档给出的经验数据是在使用 Llama-3.1-70B-Instruct、迁移学习领域下约 1 小时完成了 150 条样本的标注主要工作就是批准正确的建议、丢弃错误项。若尚未部署 Argilla可参考 Argilla 官方快速入门指南在本地或 Spaces 上启动实例然后填入--argilla_api_url与--argilla_api_key。第 3 步导出并发布 Hugging Face 数据集标注完成后create_dataset.py负责把 Argilla 中的人工标注结果整理成标准数据集并推送到 Hugging Face Hub。它的处理逻辑create_dataset.py会遍历 Argilla 记录若记录没有人工响应len(record.responses) 0则采用 LLM 的 suggestion 作为correct_answer若存在人工响应则取标注者提交的correct_answer响应值覆盖之。这样既保留了 LLM 的高效建议又让专家的人工修正拥有更高优先级。运行命令与参数说明huggingface_hub login python create_dataset.py --dataset_path nombre_de_los_datos_argilla --dataset_repo_id id_repo_hf参数默认值说明--argilla_api_keyargilla.apikeyArgilla API Key--argilla_api_urlhttp://localhost:6900Argilla 服务地址--dataset_pathexam_questions要读取的 Argilla 数据集名称--dataset_repo_idburtenshaw/exam_questions目标 Hugging Face 数据集仓库 ID最终数据集包含question、answer_aanswer_d以及记录正确选项的correct_answer列。项目文档中示例数据集的预览效果如下对应burtenshaw/exam_questions仓库的train划分第 4 步在 LightEval 中定义自定义评估任务评估环节的核心是 evaluation_task.py它用 LightEval 的LightevalTaskConfig定义了一个选择题评估任务包含三部分prompt 函数、自定义 accuracy 指标、任务配置。运行评估命令lighteval accelerate \ --model_args pretrainedHuggingFaceH4/zephyr-7b-beta \ --tasks community|exam_questions|0|0 \ --custom_tasks domain-eval/evaluation_task.py \ --output_dir ./evals其中--model_args指定被测模型示例为zephyr-7b-beta可替换为任意模型包括本项目关心的 SmolLM 系列小模型--custom_tasks指向自定义任务文件--tasks community|exam_questions|0|0是 LightEval 的任务定位串套件|任务名|子集|划分。需要留意脚本中LightevalTaskConfig的name字段当前为exampleevaluation_task.py而文档命令中使用了exam_questions这一任务名——实际使用时请确保命令行任务串中的名字与任务文件中注册的name保持一致否则 LightEval 将无法定位任务。源码级要点prompt 函数、自定义指标与任务配置prompt 函数evaluation_task.py把数据集的每一行转换为 LightEval 的Doc对象将question拼上指令前缀Choose the correct answer for the following exam question:作为查询把answer_aanswer_d作为候选选项choices并通过[answer_a,answer_b,answer_c,answer_d].index(line[correct_answer])计算出正确答案的下标gold_index作为评分基准。自定义指标evaluation_task.py是一个选择题准确率指标def sample_level_fn(formatted_doc: Doc, **kwargs) - bool: response np.argmin(kwargs[choices_logprob]) return response formatted_doc.gold_index custom_metric SampleLevelMetric( metric_nameexam_question_accuracy, higher_is_betterTrue, categoryMetricCategory.MULTICHOICE, use_caseMetricUseCase.NONE, sample_level_fnsample_level_fn, corpus_level_fnnp.mean, )它取模型在四个候选选项上的choices_logprob对数概率用np.argmin得到模型认为最不可能的选项下标与gold_index比对corpus_level_fnnp.mean表示把逐样本结果按均值聚合成整体准确率。SampleLevelMetric是 LightEval 定义逐样本指标 语料级聚合函数的标准入口对应 custom_evaluation.md 中关于简单指标每样本单值的写法如需多值指标可参考该文档中的SampleLevelMetricGrouping示例。任务配置evaluation_task.py通过LightevalTaskConfig完成prompt_function指向上述 prompt 函数suite[community]使任务归入 community 套件供 CLI 的--tasks引用hf_repoburtenshaw/exam_questions、hf_subsetdefault、hf_avail_splits[train]、evaluation_splits[train]指定数据集来源与评估划分metric[custom_metric]挂载自定义指标文件末尾通过TASKS_TABLE [task]把任务注册给 LightEval 的社区任务发现机制。完整工作流与延伸建议将四个脚本串起来就得到一条可复用的领域评估流水线# 1) 生成题库需先设置 HF_TOKEN 环境变量 python generate_dataset.py --input_dir ./mis_documentos --model_id Qwen/Qwen2.5-7B-Instruct --output_path ./exam_distiset # 2) 导入 Argilla 标注默认连接 http://localhost:6900 python annotate_dataset.py --dataset_path ./exam_distiset --output_dataset_name exam_questions # 3) 导出并发布 HF 数据集先执行 huggingface_hub login python create_dataset.py --dataset_path exam_questions --dataset_repo_id tu_usuario/exam_questions # 4) 运行 LightEval 自定义评估 lighteval accelerate \ --model_args pretrainedHuggingFaceTB/SmolLM2-135M-Instruct \ --tasks community|exam_questions|0|0 \ --custom_tasks domain-eval/evaluation_task.py \ --output_dir ./evals几点落地建议替换领域数据把--input_dir换成你的领域文档法律条款、病历、财报等模型 ID 换成能力匹配的模型控制标注成本借助 Argilla 的 suggestion 机制可大幅提速重点审核模型建议与人工判断不一致的记录对齐任务命名修改evaluation_task.py中的任务name后务必同步更新 CLI 的--tasks任务串配合小模型评估本仓库聚焦 smol 小模型的训练与评估LightEval 的accelerate后端天然支持在受限算力下批量评估 SmolLM 等小模型评估结果可与更大模型对比量化领域能力的差距。关于 LightEval 自定义任务、自定义指标与既有指标用法的进一步细节可查阅该项目所在评估模块的配套文档 custom_evaluation.md 与 automatic_benchmarks.md并参考 v1/es/4_evaluation/project/ 目录下四个脚本的完整实现。赞分享教程人工智能大模型NLP微调【免费下载链接】smol-courseA course on aligning smol models.项目地址https://gitcode.com/gh_mirrors/smo/smol-course点击查看免费下载相关推荐smol-course 领域定制评测全流程用 Argilla、Distilabel 与 LightEval 构建端到端考试题评估管线smol course 领域定制评测全流程用 Argilla、Distilabel 与 LightEval 构建端到端考试题评估管线 主流评测基准MMLU、教程人工智能大模型NLP微调smol-course 模型评估实战用 LightEval 跑通自动基准与领域定制评估附 Argilla Distilabel 端到端流水线smol course 模型评估实战用 LightEval 跑通自动基准与领域定制评估附 Argilla Distilabel 端到端流水线 评估是语教程人工智能大模型NLP微调smol-course 自定义领域评估实战基于 LightEval 构建领域专属评测流水线smol course 自定义领域评估实战基于 LightEval 构建领域专属评测流水线 通用基准benchmark如 MMLU 只能反映模型的通用能力教程人工智能大模型NLP微调上一篇终极3个转录本定量技巧RNA-seq数据分析者的快速入门指南下一篇FluentRead 功能全景指南页面翻译、图片与文档翻译、视频字幕与术语库实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑