模型边界01:幻觉来源
从训练数据、上下文缺失、采样随机性到错误归纳,理解大模型为什么会产生幻觉,以及如何减少幻觉。
幻觉是大模型最常见的问题之一,它会编造看似合理但实际上不存在的事实。理解幻觉的来源,才能有效减少和识别幻觉。
什么是幻觉
幻觉是模型生成的内容与事实不符,但看起来很有说服力的现象。
幻觉的类型
| 类型 | 描述 | 示例 |
|---|---|---|
| 事实幻觉 | 编造不存在的事实 | ”中国首都是上海” |
| 引用幻觉 | 编造不存在的引用或来源 | ”根据《人民日报》2023年报道…” |
| 逻辑幻觉 | 产生逻辑错误 | ”2+2=5” |
| 代码幻觉 | 生成无法运行的代码 | 缺少括号、语法错误 |
| 名称幻觉 | 编造人名、地名 | ”张三说…”(实际不存在张三这个人) |
幻觉的特点
- 看似合理:幻觉内容通常符合上下文,让人难以察觉
- 自信满满:模型对幻觉内容表现出很高的自信
- 难以预测:同一输入可能产生不同的幻觉
- 依赖上下文:上下文的微小变化可能导致不同的幻觉
幻觉的来源
幻觉的产生不是单一原因,而是多种因素共同作用的结果。
训练数据问题
训练数据是幻觉的主要来源之一:
| 问题 | 描述 | 影响 |
|---|---|---|
| 数据噪声 | 训练数据中包含错误或不准确的信息 | 模型学习到错误知识 |
| 数据偏见 | 训练数据中存在偏见或刻板印象 | 模型产生偏见性内容 |
| 数据缺失 | 某些领域的数据不足 | 模型在这些领域更容易产生幻觉 |
| 数据过时 | 训练数据截止到某个时间点 | 模型不知道最新信息 |
| 数据矛盾 | 训练数据中存在相互矛盾的信息 | 模型可能选择错误的信息 |
上下文缺失
模型在生成内容时,如果上下文不足或不相关,就容易产生幻觉:
| 场景 | 描述 | 示例 |
|---|---|---|
| 上下文不足 | 用户提供的信息不够 | ”介绍一下 AI” → 模型可能编造细节 |
| 上下文无关 | 上下文与问题不匹配 | 提供无关文档作为上下文 |
| 上下文过长 | 上下文超出模型记忆范围 | 模型忘记前面的信息 |
| 上下文冲突 | 上下文中存在矛盾信息 | 模型选择错误的信息 |
采样随机性
采样参数决定了模型生成的随机性,是幻觉的重要来源:
| 参数 | 影响 | 说明 |
|---|---|---|
| Temperature | 温度越高,随机性越大 | 高 Temperature 更容易产生幻觉 |
| Top-p | Top-p 越大,候选范围越广 | 大 Top-p 可能引入不相关内容 |
| 重复惩罚 | 惩罚不够,可能重复或循环 | 导致内容重复或矛盾 |
错误归纳
模型的归纳能力是有限的,可能从有限的例子中得出错误结论:
| 问题 | 描述 | 示例 |
|---|---|---|
| 过度泛化 | 从少数例子推导出普遍规律 | 看到几个例子就认为所有情况都这样 |
| 模式匹配 | 匹配到相似但不正确的模式 | ”苹果是水果” → “香蕉也是水果”(正确),但可能推导出错误结论 |
| 类比错误 | 错误的类比推理 | ”地球是圆的” → “所有星球都是圆的”(错误) |
模型架构限制
模型本身的架构也会导致幻觉:
| 限制 | 描述 | 影响 |
|---|---|---|
| 上下文窗口 | 窗口有限,无法记住所有信息 | 长文本中信息丢失 |
| 注意力机制 | Attention 可能集中在错误的位置 | 关注了不相关的信息 |
| 生成方式 | 自回归生成,逐步构建答案 | 前面的错误会被后面继承 |
| 参数规模 | 模型太小,知识不够 | 小模型更容易产生幻觉 |
减少幻觉的方法
减少幻觉需要从多个方面入手,没有单一的解决方案。
提供充足上下文
规则:
- 提供相关信息:给模型提供与问题相关的文档、数据、代码
- 明确约束:告诉模型哪些信息是可靠的,哪些是不可靠的
- 设定边界:告诉模型不知道的问题不要编造答案
示例:
你是一个技术文档助手。请根据以下文档回答问题。如果文档中没有相关信息,请回答"我不知道",不要编造答案。
文档:
...
问题:如何优化 MySQL 查询性能?
调整采样参数
规则:
- 降低 Temperature:对于需要精确输出的任务,将 Temperature 设为 0-0.3
- 设置 Top-p:限制候选范围,避免引入不相关内容
- 设置最大长度:限制输出长度,避免模型”胡言乱语”
参数组合:
| 场景 | Temperature | Top-p | 说明 |
|---|---|---|---|
| 代码生成 | 0-0.2 | 0.95 | 精确、可执行 |
| 事实问答 | 0.3-0.5 | 0.9 | 稳定、可靠 |
| 创意写作 | 0.7-1.0 | 0.95 | 允许一定随机性 |
使用 RAG(检索增强生成)
RAG 是减少幻觉的有效方法:
用户查询 → Embedding → 向量检索 → 知识库文档 → 上下文 → LLM → 回答
优势:
- 答案基于真实文档,减少幻觉
- 可以追溯答案来源
- 支持更新知识库,获取最新信息
实施步骤:
- 构建知识库
- 将用户查询与知识库匹配
- 将匹配到的文档作为上下文输入模型
- 让模型基于上下文回答问题
要求模型自我验证
让模型对自己的答案进行验证:
请回答以下问题,并提供验证方法:
问题:地球有多大?
回答:地球的直径约为 12742 公里。
验证方法:可以通过测量地球的周长,然后用周长除以 π 得到直径。
使用多模型交叉验证
用多个模型回答同一个问题,对比结果:
| 方法 | 描述 | 适用场景 |
|---|---|---|
| 多数投票 | 选择多个模型中出现次数最多的答案 | 简单问题 |
| 加权投票 | 根据模型的可信度加权 | 复杂问题 |
| 仲裁机制 | 让第三个模型判断哪个答案正确 | 高风险场景 |
限制输出格式
通过限制输出格式,减少模型自由发挥的空间:
请按照以下格式回答:
答案:[你的答案]
来源:[答案的来源]
识别幻觉的方法
即使采取了上述措施,仍然可能产生幻觉,需要有识别幻觉的方法。
人工审核
最直接的方法是人工审核:
| 场景 | 是否需要人工审核 | 说明 |
|---|---|---|
| 低风险场景 | 不需要 | 如闲聊、创意写作 |
| 中风险场景 | 抽样审核 | 如普通问答 |
| 高风险场景 | 必须审核 | 如医疗、法律、金融 |
自动检测
使用专门的模型或工具检测幻觉:
| 方法 | 描述 | 适用场景 |
|---|---|---|
| 事实核查 | 用搜索引擎或知识库验证事实 | 事实性问题 |
| 一致性检测 | 检测答案内部是否自相矛盾 | 复杂答案 |
| 来源追踪 | 检查答案是否有可靠来源 | 需要引用的场景 |
| 可信度评分 | 让模型评估自己答案的可信度 | 通用场景 |
用户反馈
通过用户反馈发现和纠正幻觉:
| 方法 | 描述 | 适用场景 |
|---|---|---|
| 点赞/点踩 | 用户可以对答案进行评价 | 通用场景 |
| 报告错误 | 用户可以报告错误答案 | 需要准确性的场景 |
| 修正答案 | 用户可以修正错误答案 | 社区场景 |
项目判断清单
- 需要高精度输出(医疗、法律、金融)→ 使用 RAG + 人工审核
- 普通问答场景 → 使用 RAG + 低 Temperature
- 创意写作场景 → 允许一定程度的幻觉,提高 Temperature
- 模型经常产生幻觉 → 检查上下文是否充足、采样参数是否合理
- 需要追溯答案来源 → 使用 RAG 并要求模型引用来源
- 需要实时信息 → 结合搜索引擎或实时数据源
- 幻觉导致严重后果 → 增加人工审核环节