这是 自动评估基准 系列文章的第四篇,敬请关注系列文章:
基础概念 设计你的自动评估任务 一些评估测试集 技巧与提示
通常我们会假设在互联网上公开可用的数据集是存在数据污染问题的。
缓解措施有:
不过也不用太担心,数据集被污染并不意味着训练过程就没有意义和信号收益。
可能遇到的实际问题
微调模型、系统提示和聊天模板
要避免指令微调模型的表现过于糟糕,需要做到:
Assistant
和 User
前缀,可以查看另外,你无需假设不同的分词器实际表现会相同,特别是在处理聊天模板的时候。更具体的说明可以查看

分词
一般来说,在 MCQA 评估中将上下文与选项放在一起做分词会更好,因为这样生成的 tokens 序列对于模型来说会自然一些。
不过,有些分词器 (如enc(context + choice) = enc(context) + enc(choice)
(并且有可能增加或删除空格)。因此把上下文和选项放在一起处理的话,上下文的分词结果会 “渗透” 到选项的分词结果中,进而导致选项的对数概率结果被混淆而不可信。
如果你的模型也有这个问题,你可以尝试分别对上下文和选项计算分词结果,然后去除额外添加的特殊字符,最后将两个结果拼接到一起。
起始 token:有些模型 (如 Gemma
) 在推理时会对
终止 token:有时候模型会出现无法终止生成的问题,也就是模型未能生成终止 token (比如 \n
),这是因为模型不会单独预测终止 token,而只能包含在更高级的 token (如 \n\n
,在代码模型中也可能是单个 token) 中生成。此时可能需要添加一个特定的检查来 “回溯” 生成的文本来确保在正确的位置截断句子,以确保计算的度量指标无误。
在进行多语言评估时,需要根据评估任务和度量指标来确定文本分词方法。由于某些语言不使用空格作为单词间的分隔符 (例如韩语、泰语、日语和中文等),所以需要特定语言的分词器才能合理的切分,否则就会影响一些度量指标分数,如
代码模型通常会在训练时将 \n\t
单独作为一个 token。这意味着在生成文本时会将 \n\t
一步生成。如果某个任务将 \n
定义为终止 token (表示生成停止),但模型生成单个 token 却是 \n\t
,那生成过程就会无限持续。为了让模型能够停止生成,需要更新文本的终止 token,或者定义一种机制来回溯最新 token 的字符表征,以便停止 (并截断) 生成。
MCQA 评估的简单加速
如果你的 MCQA 评估任务只需要模型预测一个 token,那么预测速度就可以大大加快。
你可以单次运行 上下文
推理得到全词汇表 (其中就包括了所有的选项) 的概率分布,进而按对数概率获取你感兴趣的 token,这样就避免了对每个选项的多次推理 (上下文 + 选项 1
, 上下文 + 选项 2
, 等等),从而实现加速。
(我们在 lighteval
中就是这么做的)。
如果生成式评估中的结果不及预期怎么办?
首先要经常检查模型的生成结果。排查可能原因时,需要关注以下常见问题:
英文原文:
https://github.com/huggingface/evaluation-guidebook/blob/main/translations/zh/contents/automated-benchmarks/tips-and-tricks.md 原文作者: clefourrier
译者: SuSung-boy
审校: adeenayakup
内容中包含的图片若涉及版权问题,请及时与我们联系删除