一、什么是“幻觉”?

在讨论大语言模型(LLM)时,“幻觉”是一个核心且棘手的问题。它并非指模型产生了某种超自然现象,而是指模型生成了与输入信息、客观事实或用户意图不符的、看似合理但实际错误的内容。简单来说,就是模型在“一本正经地胡说八道”。这种幻觉可以是无中生有地编造事实(例如,声称“鲁迅写过《时间简史》”),也可以是对给定上下文进行错误的推理或篡改(例如,在摘要任务中加入原文不存在的信息)。

理解幻觉的关键在于认识到,当前主流的大模型本质上是一个概率性的、基于模式匹配的文本生成器。它通过学习海量的文本数据来掌握词汇和概念之间的统计关联,而非构建一个精确的世界知识图谱。因此,当模型遇到它训练数据中覆盖不足或存在模糊性的领域时,为了完成“生成连贯文本”的首要目标,它可能会“创造性地”填补空白,从而导致幻觉的产生。

二、幻觉从何而来?产生的根源

幻觉的产生是多种因素共同作用的结果,主要源于模型本身及其训练过程的特性。首先是训练数据的局限性。尽管训练数据庞大,但互联网上的文本本身就包含错误、偏见、过时信息和矛盾的内容。模型在学习过程中,可能会将这些不准确的模式也内化下来。

其次是模型架构与目标的根本矛盾。大模型的训练目标通常是最大似然估计,即让生成的文本序列概率最大化。这个目标鼓励模型学习数据中反复出现的模式,但并不能保证内容的绝对真实性。模型更擅长学习“说什么听起来像真话”,而不是“这句话是否为真话”。此外,注意力机制的局部性也可能导致模型过度关注文本表面的语法连贯性,而忽略了深层的事实一致性。

最后,解码过程中的随机性也是诱因之一。在生成文本时,我们通常会引入一定的随机性(如设置temperature参数大于0),以避免输出过于死板。这种随机性在提升创造性的同时,也增加了偏离事实、踏入“幻觉区域”的风险。

三、如何评估“幻觉”?

评估幻觉是一个复杂的问题,目前还没有一个公认的、完美的自动化指标。通常,我们依赖人工评估基于基准测试的自动评估相结合的方式。

人工评估虽然可靠但成本高昂。评估者会从多个维度打分,例如:

自动化评估方法则试图量化幻觉。常见思路包括:

提示:在实际应用中,应结合具体任务设计评估流程。例如,对于客服机器人,可以预设一套标准问答库,通过匹配率和人工抽样来评估幻觉率。

四、缓解策略一:强化模型基础能力

从模型层面缓解幻觉,核心思想是让模型更好地理解事实和上下文

  1. 更高质量、更严谨的数据清洗与筛选:在预训练和微调阶段,对数据进行去重、事实核查、去除低质量来源,可以减少模型学习到错误模式的概率。
  2. 基于人类反馈的强化学习:这是目前非常有效的方法。通过让人类标注员对模型的多个输出进行偏好排序(例如,哪个回答更真实、更有帮助),然后使用PPO等算法优化模型,使其生成更符合人类期望(包括真实性)的文本。这个过程教会了模型什么是“好的回答”,而不仅仅是“语法正确的回答”。
  3. 引入外部知识检索:构建 RAG(检索增强生成) 架构。模型在回答问题前,先从一个可信的外部知识库(如企业文档、维基百科)中检索相关段落,然后将这些段落作为上下文提供给模型。这相当于为模型配备了“开卷考试”的资料,能极大减少其对内部记忆的依赖,从而降低编造信息的可能。

五、缓解策略二:优化推理与生成过程

在模型使用阶段,通过调整生成策略和增加约束,可以在一定程度上抑制幻觉。

首先,精心设计提示是成本最低的方法。通过提供清晰的指令、要求模型“只根据提供的上下文回答”、或给出“如果不确定,请回答‘我不知道’”等约束,可以有效引导模型行为。其次,调整解码参数,如降低temperature或使用束搜索,可以减少生成的随机性,使输出更确定、更保守。最后,采用后处理验证,例如在生成后调用事实核查API或使用简单的逻辑规则进行检查,可以拦截一部分明显的幻觉。

下面是一个简单的Python示例,展示如何通过提示工程设置较低的温度来尝试减少幻觉。注意,这只是基础策略,实际应用中需要更复杂的组合。

import openai

def get_factual_answer(question, context, model="gpt-3.5-turbo"):
    """基于给定上下文,用较低温度生成答案以减少幻觉"""
    prompt = f"""你是一个严谨的助手。请严格根据以下提供的上下文来回答问题,不要添加任何外部知识。如果上下文中没有相关信息,请回答“根据提供的资料,无法回答该问题”。

上下文:{context}

问题:{question}
答案:"""
    
    response = openai.ChatCompletion.create(
        model=model,
        messages=[
            {"role": "system", "content": "你是一个严格遵循上下文的问答助手。"},
            {"role": "user", "content": prompt}
        ],
        temperature=0.2,  # 设置较低的温度,减少随机性
        max_tokens=256
    )
    return response.choices[0].message['content']

# 使用示例
context = "牛顿第一运动定律(惯性定律)表明,任何物体在不受外力作用时,总保持静止状态或匀速直线运动状态。"
question = "牛顿第一定律的名称是什么?"
answer = get_factual_answer(question, context)
print(answer)  # 预期输出应严格基于上下文,如“牛顿第一运动定律(惯性定律)”

六、系统性应对与总结

缓解幻觉没有“银弹”,必须采取系统性的工程化思维。一个实用的架构通常是 RAG + 强大的基础模型 + 严谨的提示工程 + 必要的后处理验证 的组合。例如,先检索相关文档,再将文档和精心设计的提示一起送入一个经过RLHF微调的模型,最后对输出进行关键信息点检查。

作为开发者,我们需要正视幻觉是当前LLM的固有局限。在设计应用时,必须根据场景的容错率来权衡。对于医疗、法律、金融等高风险领域,应优先保证准确性,甚至可以考虑“人机协同”,将模型作为辅助工具而非决策主体。而对于创意写作、头脑风暴等场景,适度的“幻觉”(即创造性)有时反而可能是有价值的。

最终,理解幻觉的产生机制,有助于我们更明智地使用和改进大模型,使其在释放强大能力的同时,尽可能地成为可靠的信息处理伙伴。