
基于 lm-evaluation-harness 的 MTS-Dialog 临床笔记生成评测任务指南【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness本文以 lm-evaluation-harness 中内置的 MTS-Dialog 评测任务为核心系统讲解该医疗领域数据集在项目中的接入方式、两种评测变体开放式生成问答与困惑度评估的完整 YAML 配置、底层指标计算实现与运行方法。读完本文你将能够在本地一键复现 MTS-Dialog 的临床笔记生成评测并理解其 BLEU / ROUGE / BERTScore / BLEURT / 困惑度等指标在框架中的聚合原理。一、任务背景MTS-Dialog 数据集MTS-DialogMedical Text Summarization - Dialog是 EACL 2023 论文《An Empirical Study of Clinical Note Generation from Doctor-Patient Encounters》引入的公开数据集由 Asma Ben Abacha、Wen-wai Yim、Yadan Fan、Thomas Lin 等作者发布。它包含1,700 条医患对话doctor-patient dialogues及对应的临床笔记clinical notes目标是研究如何将门诊对话自动摘要/生成为结构化临床记录。在 lm-evaluation-harness 中MTS-Dialog 被实现为开放式问答Open-Ended Question Answering评测模型需要读取一段医患对话文本自主生成一份总结性临床笔记。该任务位于 lm_eval/tasks/mts_dialog/ 目录由两个 YAML 配置和两个 Python 工具函数文件组成lm_eval/tasks/mts_dialog/ ├── README.md # 任务说明与引用信息 ├── mts_dialog.yaml # 开放式生成评测generate_until ├── mts_dialog_perplexity.yaml # 困惑度评测loglikelihood_rolling ├── utils.py # 生成式指标计算与结果处理 └── utils_perplexity.py # 困惑度结果处理二、任务总览两种评测变体根据 README.md 的 Tasks 一节本任务包含两个评测入口任务名评测方式output_type核心指标mts_dialog英文开放式生成 QAgenerate_untilBLEU、ROUGE-1/2/L、BERTScore、BLEURTmts_dialog_perplexity英文开放式 QA困惑度评估loglikelihood_rollingword_perplexity、byte_perplexity、bits_per_byte两个任务均使用同一份数据集har1/MTS_Dialogue-Clinical_Note但评估范式截然不同前者要求模型生成自由文本并与参考笔记做 n-gram/语义匹配后者只衡量模型对参考笔记的建模能力困惑度不关心生成内容。在 lm_eval/api/task.py 的ALL_OUTPUT_TYPES中可以看到框架支持的输出类型共四种loglikelihood、multiple_choice、loglikelihood_rolling、generate_untilMTS-Dialog 恰好覆盖了其中的generate_until与loglikelihood_rolling两种典型场景。三、mts_dialog开放式临床笔记生成评测3.1 完整配置解析mts_dialog.yaml 是生成式评测的核心配置逐字段说明如下task: mts_dialog dataset_path: har1/MTS_Dialogue-Clinical_Note description: Instructions: The following text is from a collection of medical dialogs between doctor and patient. Extract all relevant information to compose a note that summarizes the relevant content of the dialog. output_type: generate_until training_split: train validation_split: train test_split: train doc_to_text: !function utils.doc_to_text doc_to_target: !function utils.doc_to_target process_results: !function utils.process_results generation_kwargs: until: - \n\n metric_list: - metric: bleu aggregation: nanmean higher_is_better: true - metric: rouge1 aggregation: nanmean higher_is_better: true - metric: rouge2 aggregation: nanmean higher_is_better: true - metric: rougeL aggregation: nanmean higher_is_better: true - metric: bert_score aggregation: nanmean higher_is_better: true - metric: bleurt aggregation: nanmean higher_is_better: true metadata: version: 1.2关键设计要点dataset_path: har1/MTS_Dialogue-Clinical_Note数据集从 HuggingFace Hub 拉取。首次运行时会自动下载并缓存缓存遵循datasets库规范默认位于~/.cache/huggingface/datasets。training_split/validation_split/test_split均为train该数据集没有官方划分因此评测时全部使用训练集文档。实际评测时模型会在全部 1,700 条对话上生成临床笔记。description作为任务指令框架会把这段指令文本作为提示词前缀拼接到每个样本前要求模型从医患对话中提取所有相关信息撰写一份总结对话内容的笔记。这属于少样本few-shot为零时的零样本指令式评测。doc_to_text: !function utils.doc_to_text指示框架调用 utils.py 中的doc_to_text(doc)函数返回数据集样本的dialogue字段作为模型输入。doc_to_target: !function utils.doc_to_target对应doc_to_target(doc)返回section_text字段即人类撰写的参考临床笔记作为评测的金标准。generation_kwargs.until: [\n\n]规定模型在遇到连续两个换行符时停止生成避免输出过长内容。generate_until会调用模型接口的生成 API而非打分接口在 lm_eval/evaluator.py 中会依据output_type generate_until分支处理这类请求。metric_list中的六个指标均使用nanmean聚合nanmean是 lm_eval/api/metrics.py 中注册的聚合函数在存在 NaN 样本时仍能计算非空样本的均值避免单条失败拖垮整体评分。3.2 指标计算实现utils.pyutils.py 承担了从加载指标库到逐样本评分的全部逻辑指标库加载与依赖声明文件顶部通过evaluate库加载bleu、rouge、bertscore、bleurt使用bleurt-base-512检查点。若缺少依赖会抛出ModuleNotFoundError并提示安装命令pip install evaluate bert-score rouge_score0.1.2 nltk absl-py其中 BLEURT 需要从githttps://github.com/google-research/bleurt.git安装。doc_eval(pred, refs)对单个样本计算全部指标并逐一对每个指标做 try/except 容错——任一指标计算失败时相应位置以np.NAN占位不影响其他指标。BLEU 零值保护代码中特别处理了bleu 0的情况为其加上1e-5微小增量因为纯 0 值会破坏后续 stderr标准误差的计算稳定性。process_results(doc, results)接收模型生成的文本与参考笔记先检查二者长度——若参考或预测文本长度小于 5 个字符直接返回全 NaN过短文本上的 n-gram 指标无统计意义否则调用doc_eval并返回 BLEU、ROUGE-1/2/L、BLEURT取均值、BERTScore-F1取均值六项分数。从源码结构可以推断这种逐样本评分 nanmean 聚合的组合使得单条生成失败或过短不会导致整个任务崩溃保证了评测流程的鲁棒性。四、mts_dialog_perplexity困惑度评测变体4.1 配置解析mts_dialog_perplexity.yaml 通过 YAML 的include机制复用基础配置仅替换输出类型与指标include: mts_dialog.yaml task: mts_dialog_perplexity output_type: loglikelihood_rolling doc_to_text: process_results: !function utils_perplexity.process_results metric_list: - metric: word_perplexity higher_is_better: false - metric: byte_perplexity higher_is_better: false - metric: bits_per_byte higher_is_better: false metadata: version: 1.0要点说明include: mts_dialog.yaml继承父任务的数据集路径、数据集划分与doc_to_target定义utils_perplexity.py直接复用了utils.doc_to_target只覆写差异字段。output_type: loglikelihood_rolling切换为滚动对数似然rolling log-likelihood打分模式框架会对文本逐窗口计算对数概率而不是调用生成接口。该类型在 lm_eval/api/task.py 的ALL_OUTPUT_TYPES中与generate_until并列。doc_to_text: 由于本变体只对参考笔记本身打分输入提示为空。三个指标higher_is_better: false困惑度与每字节比特数都是越低越好。4.2 困惑度计算实现utils_perplexity.pyutils_perplexity.py 的实现非常精简def process_results(doc, results): (loglikelihood,) results _words len(re.split(r\s, doc_to_target(doc))) _bytes len(doc_to_target(doc).encode(utf-8)) return { word_perplexity: (loglikelihood, _words), byte_perplexity: (loglikelihood, _bytes), bits_per_byte: (loglikelihood, _bytes), }它按空格切分参考笔记统计词数_words并按 UTF-8 编码统计字节数_bytes然后以(loglikelihood, 词数/字节数)二元组作为每个指标的返回值。这种设计对应 lm_eval/api/metrics.py 中的加权聚合实现word_perplexity与byte_perplexity使用weighted_perplexity聚合公式为exp(-weighted_mean(items))——即以词数/字节数为权重对对数似然加权平均后取指数bits_per_byte使用bits_per_byte聚合公式为-weighted_mean(items) / log(2)将平均负对数似然换算为每字节比特数这是语言模型信息论评估中的标准量纲。五、本地运行评测在仓库根目录下可通过 CLI 直接运行两个任务。以 HuggingFace 模型为例# 运行开放式临床笔记生成评测 lm_eval --model hf \ --model_args pretrainedQwen/Qwen2.5-7B-Instruct \ --tasks mts_dialog \ --batch_size auto \ --output_path results/mts_dialog # 运行困惑度评测 lm_eval --model hf \ --model_args pretrainedQwen/Qwen2.5-7B-Instruct \ --tasks mts_dialog_perplexity \ --batch_size auto \ --output_path results/mts_dialog_perplexity说明--tasks mts_dialog或--tasks mts_dialog_perplexity指定评测任务也可以写成--tasks mts_dialog,mts_dialog_perplexity同时评测两个变体。--model_args pretrained模型名指定模型--batch_size auto自动选择批大小--output_path指定结果落盘目录结果会以 JSON 形式保存包含各指标均值、stderr 等。框架同样支持通过--model openai-completions、--model vllm等接入 API 模型或推理引擎具体可参考 docs/interface.md 与 docs/model_guide.md。生成式评测需要确保 utils.py 中声明的指标依赖已安装否则框架会直接报错提示。运行结束后mts_dialog会输出 BLEU、ROUGE-1/2/L、BERTScore、BLEURT 六项分数越高越好mts_dialog_perplexity会输出词级困惑度、字节级困惑度与每字节比特数越低越好可直接用于对比不同模型在临床笔记生成任务上的表现。六、小结MTS-Dialog 任务为临床 NLP 提供了一套开箱即用的评测基准mts_dialog覆盖自由生成 多元匹配指标的主流评测路径mts_dialog_perplexity则提供了轻量的困惑度量化视角。二者的 YAML 配置与工具函数实现mts_dialog.yaml、mts_dialog_perplexity.yaml、utils.py、utils_perplexity.py清晰展示了 lm-evaluation-harness 中generate_until与loglikelihood_rolling两类输出类型、nanmean/weighted_perplexity等聚合函数以及include配置复用机制的实际用法可作为在医疗垂直领域新增生成式评测任务的直接参考模板。【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考