知识图谱和LLMs:多跳问题回答

检索跨多个文档的信息

这是Neo4j NaLLM项目的第三篇博客文章。我们启动这个项目是为了探索、开发和展示LLMs与Neo4j联合实际应用的实用性。作为这个项目的一部分,我们将构建并公开展示演示内容在GitHub存储库中,为我们的社区提供一个开放的空间观察、学习并贡献。此外,我们还在博客文章中写下我们的发现。您可以在此处查看前两篇博客文章:

  • 利用Neo4j控制LLMs
  • 微调 vs 检索增强生成
ChatGPT中文站
Midjourney’s idea of an investigative board.

在上一篇博客文章中,我们学习了检索增强方法来克服大型语言模型(LLMs)的局限性,例如幻觉和有限知识。检索增强方法背后的思想是在提问时引用外部数据并将其馈送到LLM中,以增强其生成准确和相关答案的能力。

ChatGPT中文站
Retrieval-augmented approach to LLM applications. Image by author.

当用户提出问题时,智能搜索工具会在提供的知识库中寻找相关信息。例如,你可能曾经在 PDF 或公司文档中搜索相关信息。大多数这样的情况都使用向量相似度搜索来识别哪些文本块可能包含相关数据,以准确回答用户的问题。该实现相对简单。

ChatGPT中文站
RAG applications using vector similarity search. Image by author.

PDF或文档首先会被分割成多个文本块。一些不同的策略包括文本块的大小以及它们之间是否需要重叠。在下一步中,可以使用任何可用的文本嵌入模型生成文本块的向量表示。这是执行向量相似性搜索所需的所有预处理。唯一剩下的步骤是在查询时将用户输入编码为向量,并使用余弦或任何其他相似性来比较用户输入和嵌入文本块之间的距离。最常见的情况是,返回前三个最相似的文档,以提供上下文来增强LLM生成准确答案的能力。当向量搜索能够产生相关的文本块时,这种方法运作良好。

然而,当LLM需要从多个文档或甚至仅多个块中获取信息来生成答案时,简单的向量相似度搜索可能不足够。

例如,考虑以下问题:

有没有任何以前的OpenAI员工开始了自己的公司?

如果你想一想,这个问题可以分解成两个问题。

  • 谁是 OpenAI 的前员工?
  • 他们中有没有人创办自己的公司?
ChatGPT中文站
Information spanning across multiple documents. Image by author.

回答这些类型的问题是一个多跳问题回答任务,一个单一的问题可以被分解成多个子问题,并且可能需要大量的文档提供给LLM以生成准确的答案。

上述的工作流程,即将文件切成块,并在数据库中嵌入它们,然后使用简单的向量相似性搜索可能会在多跳问题上遇到困难,原因是:

  • 在前N篇文件中重复的信息:提供的文件不能保证包含回答问题所需的互补和完整信息。例如,前三篇相似的文件可能都提到Shariq曾在OpenAI工作,并可能创立了一家公司,而完全忽略了其他成为创始人的前任员工。
  • 缺少引用信息:根据块大小,您可能会失去文档中实体的引用。这可以通过块重叠部分解决。然而,也有一些例子是引用指向另一个文档,因此需要进行某种共参考解析或其他预处理。
  • 难以定义理想的检索文献数量N:有些问题需要提供更多文件才能准确回答问题,而在其他情况下,提供大量的文献只会增加噪音(和成本)。
ChatGPT中文站
An example where the similarity search might return some duplicated information, while other relevant information could be ignored due to a low K number of retrieved information or embedding distance. Image by the author.

因此,普通向量相似性搜索可能难以应对多跳问题。然而,我们可以采用多种策略来尝试回答需要来自不同文档的信息的多跳问题。

知识图谱作为简化的信息存储方式。

如果您密切关注LLM领域,您可能会了解到使用各种技术来压缩信息以便在查询时更容易访问的想法。例如,您可以使用LLM提供文档摘要,然后嵌入和存储摘要而不是实际文档。使用这种方法,您可以消除很多噪声,获得更好的结果,并且更少担心提示令牌空间。

有趣的是,你可以在摄取时进行上下文摘要或在查询时执行。在查询时进行上下文压缩很有趣,因为会选择与所提供问题相关的上下文,所以它会更加指导性。然而,查询时间的工作量越重,期望用户延迟就越糟。因此,建议尽可能多地将工作量移至摄取时间,以改善延迟并避免其他运行时问题。

相同的方法可以被应用于汇总对话历史,以避免遇到标记限制问题。

我还没有看到关于将多个文档合并并汇总成单个记录的文章。问题可能是因为我们可以合并和汇总的文档组合太多。因此,在摄入时间处理所有文档组合可能是过于昂贵的。但是,知识图谱也可以在这里帮助。

从非结构化文本中提取实体和关系形式的结构化信息的过程已经存在一段时间了,更为人所知的是信息提取管道。将信息提取管道与知识图谱相结合的美妙之处在于,您可以单独处理每个文档,当知识图构建或丰富时,不同记录的信息得到连接。

ChatGPT中文站
Extracting entities and relationships from text to construct a knowledge graph. Image by author.

知识图谱使用节点和关系来表示数据。在这个例子中,第一个文档提供了Dario和Daniela曾经在OpenAI工作的信息,而第二个文档提供了关于他们的Anthropic创业公司的信息。每个记录都是单独处理的,但知识图谱的表示连接了数据,使跨多个文档的问题容易回答。

大多数最新的使用LLMs来回答多跳问题的方法都集中在查询时间解决任务上。然而,我们认为许多多跳问答问题可以通过预处理数据并将其连接在知识图中来解决。信息提取流水线可以使用LLMs或自定义文本域模型来执行。

为了在查询时从知识图谱中检索信息,我们必须构建适当的Cypher语句。幸运的是,LLMs非常擅长将自然语言翻译成Cypher图形查询语言。

ChatGPT中文站
Using knowledge graphs as part of retrieval-augmented LLM applications. Image by author.

在这个例子中,智能搜索使用 LLM 生成适当的 Cypher 语句,从知识图谱中检索相关信息。然后将相关信息传递给另一个 LLM 调用,该调用使用原始问题和提供的信息生成答案。在实践中,您可以使用不同的 LLM 生成 Cypher 语句和答案,或使用单个 LLM 上的各种提示。

结合图形和文本数据

有时候,你可能想要将文本和图表数据结合起来以找到相关信息。例如,考虑下面这个问题:

什么是Prosper Robotics创始人的最新消息?

在此示例中,您可能希望使用知识图谱结构识别Prosper Robotics的创始人,并检索提及他们的最新文章。

ChatGPT中文站
Knowledge graph with explicit links between structured information and unstructured text. Image by author.

为了回答有关繁荣机器人创始人的最新消息的问题,您需要从繁荣机器人节点开始,遍历到它的创始人,然后检索最新的提到他们的文章。

知识图谱可以用于表示实体及其关系的结构化信息,以及用节点属性表示的非结构化文本。此外,您可以使用命名实体识别等自然语言技术将非结构化信息连接到知识图谱中的相关实体,如所示的“提到”关系。

我们认为,检索增强型生成应用程序的未来是利用结构化和非结构化信息来生成准确的答案。因此,知识图谱是一个完美的解决方案,因为你可以存储结构化和非结构化数据,并通过明确的关系将它们连接起来,使信息更容易访问和查找。

ChatGPT中文站
Using Cypher and vector similarity search to retrieve relevant information from a knowledge graph. Image by author.

当知识图谱包含结构化和非结构化数据时,智能搜索工具可以利用Cypher查询或向量相似度搜索来检索相关信息。在某些情况下,您还可以使用两者的结合。例如,您可以从Cypher查询开始,以识别相关文档,然后使用向量相似度搜索在这些文档中找到特定信息。

在思维流程中使用知识图谱

另一个非常令人兴奋的 LLMs 发展是所谓的思维链问题回答,特别是与 LLM 代理一起。LLM 代理背后的想法是,它们可以将问题分解成多个步骤,定义计划,并使用提供的任何工具。在大多数情况下,代理工具是代理可以访问以检索其他信息的 API 或知识库。让我们再次考虑以下问题:

最新关于 Prosper Robotics 创始人的消息是什么?

ChatGPT中文站
No explicit links between knowledge graph entities and unstructured text. Image by author.

假设您没有文章和它们提到的实体之间的明确连接。这些文章和实体甚至可以在不同的数据库中。在这种情况下,使用思维链的LLM机器人将非常有帮助。首先,机器人会将问题分解成子问题。

  • 谁是Prosper Robotics的创始人?
  • 他们的最新消息是什么?

现在,代理人可以决定使用哪种工具。假设我们为其提供可用于检索结构化信息的知识图谱访问权限。因此,代理人可以选择从知识图谱中检索有关Prosper Robotics创始人的信息。由于我们已经知道Prosper Robotics的创始人是Shariq Hashme。现在第一个问题已经得到回答,代理人可以将第二个子问题重写为:

  • 有关Shariq Hashme的最新消息是什么?

代理人可以使用任何可用的工具来回答后续的问题。这些工具可以包括知识图谱、文档或向量数据库、各种API等。访问结构化信息使得LLM应用程序可以执行各种分析工作流程,其中需要聚合、过滤或排序。考虑以下问题:

  • 哪家只有一个创始人的公司估值最高?
  • 谁成立了最多的公司?

纯向量相似性搜索可能难以处理这些类型的分析问题,因为它搜索未经结构化的文本数据,使数据难以排序或聚合。因此,结构化和非结构化数据的结合可能是检索增强型LLM应用程序的未来。此外,正如我们所看到的,知识图谱也非常适合表示连接信息,因此也适用于多跳查询。

虽然思维链是围绕 LLM 的一项迷人的发展,它展示了 LLM 如何思考,但由于需要多次调用 LLM,它并不是最用户友好的,响应时延可能会很高。然而,我们仍然非常兴奋地了解如何将知识图谱纳入各种用例的思维链流程中。

总结

检索增强型生成应用通常需要从多个来源检索信息以生成准确的答案。虽然文本摘要可能具有挑战性,但以图形格式表示信息可以提供几个优点。

通过逐个处理每个文档并将它们连接到知识图中,我们可以构建信息的结构化表示。这种方法可以更轻松地遍历和浏览相互连接的文档,使得能够以多跳推理来回答复杂的查询问题。此外,在摄取阶段构建知识图能够减少查询时间的工作量,从而提高响应速度。

使用知识图谱的另一个优点是其存储结构化和非结构化信息的能力。这种灵活性使其适用于各种语言模型(LLM)应用,因为它可以处理不同的数据类型和实体之间的关系。图形结构提供了知识的可视化表示,为开发人员和用户提供透明度和可解释性。

总体而言,在检索增强生成应用中利用知识图谱具有诸如提高查询效率、多跳推理能力以及支持结构化和非结构化信息等好处。

请密切关注我们团队的更新,我们将在GitHub代码库上公开记录所有开发进展。

在Neo4j的NaLLM项目核心团队:Jon Harris、Noah Mayerhofer、Oskar Hane、Tomaz Bratanic。

2023-10-20 16:56:03 AI中文站翻译自原文