一句话定义:Distinct-n 和 Self-BLEU 是一对用来衡量机器生成文本多样性的指标。前者统计文本里有多少不重复的 n 元词组(n-gram),后者计算同一批生成样本彼此之间有多像——分数越高,越像复读机。
Distinct-n 怎么算
把模型生成的所有文本切成连续的 n 个词组成的片段(n-gram,中文里常按字或词切),去重后除以片段总数:
- Distinct-1:看单个词,衡量用词是否贫乏;
- Distinct-2:看两词词组,衡量搭配是否单一;
取值在 0 到 1 之间,越高说明重复度越低。打个比方:一个人讲话,如果把“然后”“就是说”“这个”去掉之后没剩下几句新话,他的 Distinct-n 就很低。
Self-BLEU 怎么算
BLEU 原本是机器翻译的评分:拿机器译文和人工参考译文比对,看有多少词组重合。Self-BLEU 借用了 BLEU 的计算方式,但把“参考答案”换成模型自己的输出——一批生成句子轮流当“译文”,其余当“参考”,两两打分再取平均。分数越高,说明这些句子彼此越像,模型在复制自己。
比方:收上来一叠作文互相查重,查重率居高不下,说明大家背的是同一篇范文。
和相邻概念的区别
BLEU 衡量的是“像不像标准答案”,需要参考答案;这两个指标衡量的是“变不变”,不需要参考答案。而它们俩之间也有分工:
| 维度 | Distinct-n | Self-BLEU |
|---|---|---|
| 衡量什么 | 文本自身内部的不重复程度 | 一批样本之间的相似程度 |
| 需要几条样本 | 一条文本就能算 | 需要一批样本,两两比较 |
| 分数方向 | 越高越多样 | 越低越多样 |
| 敏感因素 | 文本长度(越长越容易“撞”出新词组,分数虚高) | 样本数量、BLEU 的 n 阶数与平滑实现细节 |
| 典型刷分方式 | 生成语法崩坏的乱码,分数立刻飙升 | 只输出极短句,互相都不像 |
实际意义
只盯着 BLEU 或准确率调模型,会奖励“安全但空洞”的输出——一个对话模型句句回“我不知道”,参考答案重合度可能不差,但根本没法用。多样性指标的作用就是把这类“复读机”行为暴露出来,尤其在做闲聊、客服话术、文案和创意写作时,值得放进评估表。
反过来,这两个指标也都能被“胡说八道”刷高:只要句子够乱,Distinct-n 自然漂亮。所以它们必须和人工评估、任务指标一起看。而翻译、摘要这类有明确标准答案的任务,多样性过高往往意味着跑题,别拿这两个指标当唯一目标。
工程上典型的权衡是:束搜索(beam search)输出稳但容易千篇一律,采样策略(top-k、top-p、温度)更活泼但容易跑偏。用多样性指标做监控,找两者的平衡点,比凭感觉调参靠谱。具体实现和阈值以原始论文或官方页面为准。
