资讯动态

使用 lm-evaluation-harness 评测医学临床笔记生成任务:MedText 任务配置与实现解析

发布时间:2026/9/15 15:55:40 来源:尧图企业网站定制
使用 lm-evaluation-harness 评测医学临床笔记生成任务MedText 任务配置与实现解析【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harnessMedText 是基于合成临床笔记构建的医学诊断问答数据集lm-evaluation-harness 为其提供了两套现成的评测任务medtext开放式生成 文本相似度指标与medtext_perplexity滚动对数似然困惑度。本文以 lm_eval/tasks/medtext/README.md 为主线结合任务 YAML 配置与 Python 工具函数逐项讲解任务加载、文档映射、指标计算与运行方式帮助你直接复用这套医学领域评测基准。数据集与任务背景MedText 是一个医学诊断数据集收录了超过 1000 条教科书级质量的病人主诉patient presentations及其诊断与治疗方案。数据集中完整覆盖了人们就医时最常见的 100 种疾病和 30 种外伤且每种疾病包含从轻度、复杂到重症的多个数据点。它源自论文Towards Automatic Generation of Shareable Synthetic Clinical Notes Using Neural Language ModelsOren Melamud 与 Chaitanya Shivade2019arXiv:1905.07002该工作旨在利用神经语言模型自动生成可共享的合成临床笔记。在 lm-evaluation-harness 中该任务包位于 lm_eval/tasks/medtext/共包含 5 个文件文件作用README.md任务说明、论文信息与引用格式medtext.yaml开放式生成评测任务定义medtext_perplexity.yaml基于困惑度的评测任务定义utils.py生成任务的文档映射与结果处理逻辑utils_perplexity.py困惑度任务的结果处理逻辑README 中定义了两个评测任务均面向英文开放式问答Open-ended QAmedtext开放式英文问答使用生成式指标评估medtext_perplexity同一任务但改用困惑度perplexity评估。medtext 任务开放式生成评测medtext.yaml 是medtext任务的核心定义完整内容如下task: medtext dataset_path: BI55/MedText description: Instructions: The following text is from a collection of medical records. What follows is the patients record. Answer how a doctor would, what is the likely diagnosis, and what is the treatment?. Answer how a doctor would, what is the likely diagnosis, and what is the treatment? 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: bleurt aggregation: nanmean higher_is_better: true - metric: bert_score aggregation: nanmean higher_is_better: true metadata: version: 1.0各配置项含义如下dataset_path: BI55/MedText指明 Hugging Face Hub 上的数据集仓库 ID评测时框架会按此路径加载数据集output_type: generate_until声明该任务属于自回归文本生成类型模型需要持续生成 token直到命中终止条件training_split / validation_split / test_split: train数据集的 train 划分同时被用作训练、验证与测试集合即所有数据点都会参与评测doc_to_text: !function utils.doc_to_text!function语法指示框架调用同目录下utils.py中导出的doc_to_text函数将数据样本映射为模型输入的提示文本doc_to_target: !function utils.doc_to_target将样本映射为参考答案ground truthprocess_results: !function utils.process_results评测阶段对模型输出与参考答案计算各类指标generation_kwargs.until: [\n\n]模型生成的终止符为两个连续换行一旦生成该序列即停止保证输出停留在单条临床记录的回答范围内metric_list依次声明了 bleu、rouge1、rouge2、rougeL、bleurt、bert_score 六项生成质量指标全部使用nanmean聚合、数值越高越好metadata.version: 1.0任务配置版本号便于结果复现与版本追踪。文档映射与结果处理函数utils.py 实现了三个关键函数。首先是提示与参考答案的映射def doc_to_text(doc) - str: return doc[Prompt] def doc_to_target(doc) - str: return doc[Completion]doc_to_text直接取数据样本中的Prompt字段作为模型输入配合 YAML 中的description前缀构成完整提示doc_to_target取Completion字段作为参考答案用于后续指标比对。process_results将模型生成结果与参考答案组装后交给doc_eval计算六项指标def process_results(doc, results): pred, refs [results[0]], [doc_to_target(doc)] if len(refs[0]) 1 or len(pred[0]) 1: return { bleu: np.NAN, rouge1: np.NAN, rouge2: np.NAN, rougeL: np.NAN, bleurt: np.NAN, bert_score: np.NAN, } results doc_eval(pred, refs) return { bleu: results[bleu], rouge1: results[rouge1], rouge2: results[rouge2], rougeL: results[rougeL], bleurt: results[bleurt], bert_score: results[bert_score], }值得注意的细节当参考答案或模型输出为空字符串时函数直接返回全 NaN避免对无效样本计算指标同时doc_eval中还有一处工程性保护——当 BLEU 恰好为 0.0 时会加上1e-5的微小偏移以免破坏后续 stderr标准误差的计算。指标计算与依赖安装utils.py 顶部使用 Hugging Face 的evaluate库加载四个评测器bleu evaluate.load(bleu) rouge evaluate.load(rouge) bertscore evaluate.load(bertscore) bleurt evaluate.load(bleurt, bleurt-base-512, module_typemetric)其中 BLEURT 使用bleurt-base-512检查点BERTScore 使用默认英文langen配置。如果缺少相关依赖模块会抛出明确的安装提示所需包包括pip install evaluate bert-score rouge_score0.1.2 nltk absl-pyBLEURT 指标本身来自 google-research 的 bleurt 仓库evaluate库会负责加载。每个指标在计算时都包裹了try/except若单个指标计算失败例如 BERTScore 需要下载模型权重失败该指标会回退为np.NAN而不会中断整个评测流程doc_eval最终返回包含bleu、rouge1、rouge2、rougeL、bleurt、bert_score六个键的字典与 YAML 中的metric_list一一对应。medtext_perplexity 任务滚动对数似然评测medtext_perplexity.yaml 通过include继承基础任务配置仅改写评测方式include: medtext.yaml task: medtext_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核心差异有三点output_type: loglikelihood_rolling将评测从生成式改为滚动对数似然rolling log-likelihood即对参考文本分段计算对数概率并加总无需模型实际生成文本doc_to_text: 输入提示被清空模型直接对Completion参考文本进行似然评估metric_list替换为word_perplexity、byte_perplexity、bits_per_byte三项均为越低越好higher_is_better: false。结果处理与聚合原理utils_perplexity.py 中process_results根据参考文本的规模对对数似然进行归一化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通过按空白符切分参考文本得到字节数_bytes通过对参考文本做 UTF-8 编码后取长度得到返回的元组(loglikelihood, 归一化基数)是加权聚合的标准接口形式。对应地lm_eval/api/metrics.py 中注册了三个指标及其聚合方式同文件第 302-329 行word_perplexity与byte_perplexity使用weighted_perplexity聚合exp(-weighted_mean(items))第 51-53 行即对对数似然按词数/字节数加权平均后取负指数bits_per_byte使用同名bits_per_byte聚合-weighted_mean(items) / math.log(2)第 56-58 行将对数似然折算为每字节的比特数。由此困惑度任务可以在不调用解码器的情况下快速衡量模型对医学临床文本的建模能力与medtext的生成式指标形成互补前者反映生成得像不像后者反映概率上认不认。运行方式两个任务均已注册进任务管理器可直接通过 lm-evaluation-harness 的统一 CLI 运行例如使用 Hugging Face 模型lm_eval --model hf \ --model_args pretrainedEleutherAI/pythia-70m \ --tasks medtext \ --num_fewshot 0如需同时评估困惑度版本lm_eval --model hf \ --model_args pretrainedEleutherAI/pythia-70m \ --tasks medtext_perplexity \ --num_fewshot 0注意运行medtext前需先安装evaluate及配套指标依赖见上文否则 utils.py 会抛出ModuleNotFoundErrormedtext_perplexity由于只依赖框架内置的对数似然与加权聚合逻辑通常无需额外指标依赖。评测结果会以nanmean聚合输出各指标均值可直接用于跨模型的医学领域能力对比。引用格式在论文或技术报告中引用 MedText 任务时可使用 README 提供的 BibTeX 条目省略 url 字段arXiv 编号见eprintmisc{melamud2019automaticgenerationshareablesynthetic, title{Towards Automatic Generation of Shareable Synthetic Clinical Notes Using Neural Language Models}, author{Oren Melamud and Chaitanya Shivade}, year{2019}, eprint{1905.07002}, archivePrefix{arXiv}, primaryClass{cs.CL}, }小结MedText 任务包是 lm-evaluation-harness 中一个典型的同一数据集、双评测范式案例medtext通过generate_until结合 BLEU/ROUGE/BLEURT/BERTScore 评估生成质量medtext_perplexity通过loglikelihood_rolling结合加权困惑度与每字节比特数评估概率建模能力。从 medtext.yaml 的!function函数引用、utils.py 的防御式指标计算到 metrics.py 的加权聚合实现整个链路清晰展示了如何为一个医疗领域数据集快速搭建可复现、可对比的评测基准可作为新增同类型医学文本评测任务的参考模板。【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价