作者:老余捞鱼
原创不易,转载请标明出处及原作者。

写在前面的话:尽管 LLMs 基于存储、检索和生成(RAG)的方法在某些情况下能够提供准确的回答,但在面对名词短语碰撞时,RAG方法可能会因为语义相似性而失效。为了解决这个问题,本文提出了命名实体过滤(NEF)作为一种解决LLM幻觉的方法。NEF的核心在于在查询时过滤掉与目标实体语义相似但实际上指向不同实体的信息,从而避免LLM产生混淆,接下来我们将详细讲解NEF的实施方法和原理。
一、NEF( Named Entity Filtering )介绍
当多个名字语义相似时,ChatGPT 4 和其他 LLM 经常会产生幻觉。比如下面这个经典的例子:“Alfonso” and “Afonso.”
阿方索灾难(The Alfonso Debacle):如果你问的是关于 “Alfonso “的问题,但发送的是关于 “Afonso “的信息,那么法律硕士很可能会将 “Afonso”的信息应用到 “Alfonso “上–尽管它们是两个不同的名字。
本文接下来的内容如下:
- 解释需要解决的问题 。
- “阿方索灾难”演示。
- “阿方索灾难”如何导致部署到生产中的基于 RAG 的真实聊天机器人产生幻觉?
- 命名实体过滤法(NEF)–一种消除“阿方索灾难”所产生的幻觉的方法。
- 最后,我们将对本文进行总结。
本系列的目的是为您提供完整的步骤集,以便您应用NEF模式来完全消除幻觉。欢迎来到第一步!
二、问题
我曾向 ChatGPT 4 询问有关 Cruise LLC 所面临挑战的信息(Cruise 是一家开发自动驾驶汽车的公司)。(然而,ChatGPT 4 的回复却将 Cruise LLC 面临的挑战与游轮业(如旅游船艇)面临的挑战穿插在一起。)
这里有一个很少被讨论的问题。请注意,ChatGPT 并没有穿插墨西哥卷饼行业或任何其他行业所面临的挑战。相反,这种混淆是系统性的。法律硕士混淆特定主题和词语是有系统原因的。
我们稍后将探讨为什么 RAG 本身并不能防止这种混淆。我们还将探讨命名实体过滤如何完全解决这一问题。现在,让我们先关注阿方索大溃败,了解 ChatGPT 4 和其他 LLM 产生幻觉的原因,从而理解命名实体过滤是如何完全消除这一问题的。
三、阿方索灾难
一家名为 Vellum 的公司发布了一个 ChatGPT-4 幻觉查询:”葡萄牙第三任国王阿方索二世的母亲是谁?”ChatGPT 4 最初给出了错误答案-卡斯蒂利亚的乌拉卡。(您可以使用 gpt-4-0125-preview 进行验证)。OpenAI 后来对 ChatGPT 4 进行了微调,以提供正确答案–阿拉贡的杜尔斯。然而,微调不仅会增加其他地方的幻觉,而且只会逐字 “修正 “原始查询。例如,以下是我近期(2024 年 9 月 2 日)向 ChatGPT 4 提交的查询:

请注意,GPT 4 在多个层面上出现了幻觉:
- “阿方索 “是葡萄牙的第三任国王。而不是 “阿方索”。葡萄牙国王中没有 “阿方索二世”。
- “阿丰索二世 “的母亲是阿拉贡的杜尔斯,而不是卡斯蒂利亚的乌拉卡。
将原始查询中的 “阿丰索二世 “改为 “阿方索二世 “引发了今天的幻觉。这表明,OpenAI 的微调并未解决最初的问题。换句话说,ChatGPT 4 仍然将 “Alfonso “和 “Afonso “视为相同的两个词(除非它被微调为另一种行为)。
正如上面中演示的那样,ChatGPT 将 “Chuck “和 “Bartholomew “视为对不同人的引用,但却将 “Alfonso “和 “Afonso “视为对同一个人的引用。(请看下面的截图)。

ChatGPT 4 将 “Chuck “和 “Bartholomew “视为两个不同的人。

ChatGPT 4 将 “Afonso “和 “Alfonso “视为同一个人。
作为人类,我们知道两个不同的名字指的是两个不同的人。作为人类,我们知道公司 “Cruise “不同于普通名词 “cruise”。
但LLM 的下一个标记选择是基于名词短语路径(Noun-Phrase Routes),而这主要是由语义相似性驱动的。这很自然,因为向量嵌入是 LLM 唯一的操作依据。
四、RAG 与此有关吗?
想象一下,你正在为苹果公司创建一个聊天机器人。LLM 会把 “iPhone 8 “和 “iPhone 11 “混为一谈吗?很有可能会。因此,如果您的知识库中包含多个 iPhone 型号的信息,您就会产生幻觉。
事实上,这是为拥有多种型号和版本的公司构建聊天机器人时普遍存在的问题。
希望这能让您明白为什么 RAG 有时像魔法一样有效,有时却惨遭失败。如果您的知识库只包含邮轮有限责任公司的信息,那么就不能将该公司与邮轮业混为一谈。RAG 就像魔术一样神奇。
然而,一旦加入名词短语碰撞(语义相似但指向不同实体的名词短语),RAG 就会立即崩溃。
请看 Reddit 用户报告的这个太常见的经历:
I’ve been experimenting with an [ChatGPT] Assistant designed to act as a technical support assistant for a business. I loaded it up with a tremendous amount of technical and product information, and have been getting really mixed results. Some questions answered wonderfully, others completely wrong. So I decided to break it down to the basics. I uploaded a product brochure, and then I simply ask “how many widgets come in a box for SKU #X.”
我一直在试用一个 [ChatGPT] 助手,它被设计为企业的技术支持助手。我给它加载了大量的技术和产品信息,结果喜忧参半。有些问题回答得很好,有些则完全错误。因此,我决定把它分解成最基本的内容。我上传了一份产品手册,然后简单地问 “SKU #X 一盒有多少小部件”。
It correctly answered this question repeatedly. Great. However, whenever I add various other content, results start going haywire. (Source:
它多次正确回答了这个问题。好极了。但是,每当我添加其他各种内容时,结果就会出现混乱。(来源:
(https://www.reddit.com/r/ChatGPTPro/comments/17xsch4/ unexpected_behavior_of_gpt_assistant_with/,最后访问日期为 2024 年 3 月 4 日,括号为后加)。
但 RAG 的语义相似性搜索难道不能解决矢量数据库检索中的这个问题吗?绝对不能。请允许我解释一下。事实上,下面的部分不仅是第 1 课的关键,而且是全部内容的关键。
五、”阿方索灾难“背后的秘密
请认真学习本节内容。一旦您完全掌握,它将引导您开发出 100% 准确的聊天机器人。
重要的见解来自于提出重要的问题。关于阿方索大灾难的重要问题是:为什么 ChatGPT 4 始终选择阿方索七世的母亲而不是阿方索二世的母亲,即使查询中提到了阿方索二世?
在 OpenAI 对答案进行微调之前,ChatGPT 4 通常会给出阿方索七世的母亲,而不是阿方索二世。为什么会这样?
花点时间想想这个问题。事实上,”名词短语优势模型 “就是在数百次查询中提出同样问题的结果。通过搜索每个查询的答案,我们发现了一种模式。事实上,每次都会出现相同的模式。
让我给你一个提示。请看网页上关于阿方索七世的这段话:”阿方索的母亲是乌拉卡(1079-1126 年),被称为鲁莽者,是卡斯蒂利亚的女王……”
现在,请带着最初的疑问来思考这句话:”葡萄牙第三任国王阿丰索二世的母亲是谁?”为什么上述陈述会是一条如此吸引人的路线?记住,重点是名词短语。毕竟,它们决定了路线。
希望您花时间研究了疑问句中的名词短语和陈述句中的名词短语。您总能在这里找到答案。
你注意到查询和阿方索网页声明中都有 “母亲 “这个词吗?你注意到 “母亲 “紧挨着 “阿方索 “了吗?从 LLM 的角度来看,”Alfonso “与 “Afonso “基本相同,而 “mother “则直接匹配。因此,如果 “阿方索 “旁边没有 “母亲”,那么 LLM 就会选择 “阿方索”/”母亲 “组合。(这正是 ChatGPT 4 所做的事情,直到它被专门微调为不这样做为止)。
花点时间比较一下阿方索七世的 “母亲 “一词与阿方索二世的 “母亲 “一词的位置。请注意,在后一个链接中,”母亲 “一词与 “阿丰索 “的关联度极低。这就是为什么在这个查询中,阿方索路线比阿丰索路线更胜一筹。这也是所有问题的关键所在。
六、如何解决复杂的问题?
那么,这与我们的苹果 iPhone 例子有什么关系呢?考虑到有人询问有关 iPhone 11 的特定功能。如果该功能与 iPhone 8 的结合更为突出,那么即使指定的是 iPhone 11,也有可能给出 iPhone 8 的功能描述(就像即使指定的是阿方索二世,也会给出阿方索七世的信息一样)。
请注意,这个问题可以一直追溯到分块检索。信息块检索通常包括语义相似性搜索(如向量数据库中的余弦相似性搜索)。在上面的例子中,iPhone 8 块的语义相似性要高于 iPhone 11 块。这就给检索和重新排序带来了问题。
因此,RAG 不仅不能解决问题,甚至是问题的一部分。
七、NEF:简单而有效的解决方案
NEF模式的最大亮点就在这里。一旦你知道了问题所在,解决问题就变得轻而易举。消除幻觉似乎是不可能的,唯一的原因就是人们找错了地方。请允许我演示一下。
考虑一下 Alfonso 和 Afonso。如果查询是关于阿方索的,那么就需要过滤掉对语义相似的任何其他名字的引用。通过删除 Alfonso VII 块,LLM 就无法将两者混为一谈。换句话说,它不会产生幻觉。
以 iPhone 8 和 iPhone 11 为例。如果查询的是 iPhone 11,那么就需要删除所有与 iPhone 8 有关的块。现在,LLM 无法将两者混为一谈。换句话说,它不能产生幻觉。
考虑 Cruise LLC 和邮轮业。如果查询与 Cruise LLC 有关,则必须过滤掉所有其他语义相似的名词短语(包括匹配度为 100% 的普通名词 “cruise”)。
八、实施 NEF
首先,您需要一个良好的命名实体识别(NER)库。Python 的 Spacy 就很不错。在以后的文章中,我将介绍如何将 Python 的 Spacy 与 LLM 结合起来,实现接近 100% 的命名实体识别率。现在,您可以从 Spacy 开始。
其次,您需要识别检索到的语块中的所有名词短语(以考虑到 Cruise 和 cruise 等冲突)。同样,Spacy 也能做到这一点。
为简单起见,我将命名实体提取和名词短语提取都称为 “名词短语识别(NPI)”。
您可以在查询时执行 NPI,也可以在存储时执行 NPI。在查询时进行 NPI 的成本较低,但会大大降低获得响应的速度。但是,如果在存储过程中将 NPI 信息作为元数据存储,那么在查询时进行过滤既简单又高效。因此,强烈建议采用后者。
九、解决基于 RAG 的幻觉
从表面上看,产生幻觉的原因似乎各不相同。例如,对时间的引用经常会引起幻觉,引文也是如此。然而,正如本课将要介绍的那样,《名词短语路径碰撞》不仅解释了每个问题,而且幸运的是还提供了解决这些问题的简单答案。
因此,每节课都应遵循一个共同的口诀(现在我明白为什么人们说我写得像聊天机器人了):
- 找出导致幻觉的常见问题
- 证明原因是名词短语路线碰撞
- 根据名词短语路线演示,讨论如何解决这个问题
十、观点总结
尽管基于存储、检索和生成(RAG)的方法在某些情况下能够提供准确的回答,但在面对名词短语碰撞时,RAG方法可能会因为语义相似性而失效。为了解决这个问题,本文提出了命名实体过滤(NEF)作为一种解决LLM幻觉的方法。NEF的核心在于在查询时过滤掉与目标实体语义相似但实际上指向不同实体的信息,从而避免LLM产生混淆。
本文还提供了实施NEF的具体步骤,包括使用Python的Spacy库进行命名实体识别和名词短语提取,并在查询时或存储时进行过滤。
- 通过NEF,可以构建出无幻觉的、可用于生产环境的聊天机器人,这为提高人工智能系统的准确性和可靠性提供了一种途径。
- ChatGPT 4和其他LLM在处理语义相似的名称时容易产生幻觉,这是因为它们在生成回答时依赖于名词短语路径,这些路径可能导致不同实体信息的混淆。
- RAG方法在面对名词短语碰撞时可能会失效,因为它依赖于语义相似性的搜索,这可能导致错误的信息检索。
- 命名实体过滤(NEF)是消除LLM幻觉的关键,它通过过滤掉与查询实体语义相似但实际上指向不同实体的信息来提高回答的准确性。
- 实施NEF需要有效的命名实体识别和名词短语提取工具,如Python的Spacy库,并且可以在查询时或存储时进行。
- NEF不仅解决了单一命名实体的幻觉问题,还为即将到来的第二课中处理多个语义相似的命名实体问题奠定了基础。
本文内容仅仅是技术探讨和学习,并不构成任何投资建议。
转发请注明原作者和出处。
Be First to Comment