大语言模型(LLM)在文本生成过程中存在两个典型问题:重复性输出(俗称"车轱辘话")和事实性错误(俗称"幻觉")。这两个问题的根源都在于模型的采样机制——模型本质上是在进行概率分布的抽样,而非真正的"思考"。
我在实际项目中发现,即使是GPT-4这类顶尖模型,当temperature参数设置不当时,仍然会出现明显的重复或虚构内容。这就像让一个记忆力超群但缺乏判断力的助手来写作,它可能会不断重复相似的句式,或者为了完成句子而编造看似合理实则错误的信息。
大语言模型的生成过程可以理解为在词汇表上的概率分布中进行采样。假设当前已生成文本为x1:t-1,模型会计算下一个词的概率分布P(xt|x1:t-1),然后根据设定的采样策略选择xt。这个过程中有几个关键参数:
我在调试Llama 2-70B模型时做过一个实验:当temperature=1.0时,生成文本的多样性最高但连贯性下降;当temperature=0.3时,文本更加连贯但容易出现重复。
| 采样方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 贪心搜索 | 保证局部最优 | 容易陷入重复 | 需要确定性的场景 |
| Beam Search | 考虑多个候选 | 计算成本高 | 机器翻译等任务 |
| Top-k采样 | 平衡多样性与质量 | k值难确定 | 创意写作 |
| Top-p采样 | 动态调整候选集 | 需要调参 | 开放域对话 |
在实际应用中,我发现top-p采样(通常设p=0.9)配合适中的temperature(0.7左右)能在大多数场景取得不错的效果。
经过数百次实验验证,我总结出不同任务的temperature建议值:
重要提示:temperature不是越高越好。超过1.0后,生成文本的质量会急剧下降,变得支离破碎。
除了调整temperature外,这些方法也能有效减少重复:
我在开发客服机器人时,通过设置repetition_penalty=1.3,将重复率降低了约40%。
幻觉主要源于两个因素:
一个典型的例子是当模型被问到"2025年的美国总统是谁"时,即使不知道正确答案,它仍会基于语言模式生成一个看似合理的名字。
在医疗问答系统中,我们采用"生成-检索-验证"的三步流程,将事实错误率从15%降到了3%以下。
基于多个项目的经验,我整理出这份调参清单:
可能原因:
解决方案:
可能原因:
解决方案:
最新的研究显示,这些方向可能带来突破:
我在测试MEMIT方法时发现,它可以在不重新训练的情况下修正模型的知识错误,这对生产系统特别有价值。