跳到主内容
快讯直播
AI智模界
AI 词典

No-repeat N-gram:给模型立一条不许复读的硬规矩

一句话定义:No-repeat N-gram 是一种解码阶段的硬性约束,规定模型在生成时,不能再次输出此前已经出现过的、由连续 n 个 token 组成的片段。

先把术语拆开。N-gram 指连续的 n 个 token,n=4 就是连着的四个 token。这个机制在每一步生成前做一件事:取已生成序列末尾的 n-1 个 token,逐个和词表里的候选 token 拼成 n-gram,查一下这个 n-gram 在历史输出里有没有出现过。出现过,就把该候选 token 的分数直接压到负无穷,也就是把它从候选里排除。本质上是一次查表加屏蔽,不改变模型权重,只在采样那一刻生效。

举个例子,设 n=4。模型前面已经写过“我认为这个方案可行”。写到第二遍、上下文末尾是“我认为 这个 方案”时,候选词“可行”一旦被选中,就会拼出 4-gram「我认为 / 这个 / 方案 / 可行」,而它在历史里出现过,于是被屏蔽。模型只能退而求其次,去选“值得试”“风险可控”这类词。这样重复的句子就无法原样写出来,模型只能换说法。这就是它能专门处理反复重复同一短语的原因。

它和几种“惩罚”参数容易混,区别在于惩罚的粒度和软硬程度:

机制作用对象方式看上下文顺序吗典型副作用
Repetition penalty单个 token对出现过的 token 概率打折扣,软不看高频虚词被压,句子变生硬
Frequency penalty单个 token按出现次数累加扣分,软不看次数越多扣越狠,长文后期用词扭曲
Presence penalty单个 token出现过就扣一次固定分,软不看只区分“有无”,不区分次数
No-repeat N-gram连续 n 个 token命中已有片段直接置为负无穷,硬看可能阻断必要重复(代码、引用、叠句)

一句话概括:重复惩罚、频率惩罚采用扣分式,每次出现都扣一点分,累积起来促使模型减少使用同一个词;No-repeat N-gram 则不会退让,一旦命中就直接屏蔽,取消候选资格。

这个差别带来两个互补的盲区。软惩罚防不住“换个说法继续啰嗦”:同义词一换,token 全变了,扣分扣不到它头上。硬约束也防不住语义重复:模型完全可以把“这个方案可行”改写成“此方案具备可行性”,照样是同一句话在反复说。所以两者常搭配使用,一个管字面复现,一个管用词扎堆。

对从业者来说,这个机制的价值在于成本几乎为零:它只是解码参数,不重训、不改模型,在长文生成、摘要、翻译、模板化输出里尤其好用,能明显减少模型自我复读。代价是硬约束会误伤合理重复,代码里的括号结构、法条引用、人名地名、诗歌叠句都可能被拦。实践中的做法是把 n 取小一点(常见是 3 到 5 这类小整数,具体参数名和默认值以所用框架的官方文档为准),并且只在需要的任务上开启,必要时配合白名单放行专有名词。

对普通职场人来说,记住这层区分就够了:工具里那些“重复惩罚”滑块,管的是“别老用同一个词”;而 No-repeat N-gram 管的是“别整段照抄自己”。看到模型被逼着换表达,多半是后者在工作。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。