图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index( 二 )


Llama Index
Llama Index 是一个开源工具包,它能帮助我们以最佳实践去做 in- :
文档分割和嵌入的问题
嵌入和向量搜索在许多情况下效果良好,但在某些情况下仍存在挑战,比如:丢失全局上下文/跨节点上下文 。
想象一下,当查询"请告诉我关于作者和 foo 的事情",在这本书中,假设编号为 1、3、6、19-25、30-44 和 96-99 的分段都涉及到 foo 这个主题 。那么,在这种情况下,简单地搜索与书籍片段相关的前 k 个嵌入可能效果不尽人意,因为这时候只考虑与之最相关的几个片段(比如 k = 3),会丢失了许多上下文信息 。
┌────┬────┬────┬────┐│ 1│ 2│ 3│ 4│├────┴────┴────┴────┤│Docs/Knowledge││...│├────┬────┬────┬────┤│ 95 │ 96 │││└────┴────┴────┴────┘
而解决、缓解这个问题的方法,在 Llama Index 工具的语境下,可以创建组合索引和综合索引 。
【图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index】其中,向量存储()只是其中的一部分 。除此之外,我们可以定义一个摘要索引、树形索引等,以将不同类型的问题路由到不同的索引,从而避免在需要全局上下文时错失它 。
然而,借助知识图谱,我们可以采取更有意思的方法:
知识图谱
知识图谱这个术语最初由谷歌在 2012 年 5 月提出,作为其增强搜索结果,向用户提供更多上下文信息的一部分实践 。知识图谱旨在理解实体之间的关系,并直接提供查询的答案,而不仅仅返回相关网页的列表 。

图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index

文章插图
知识图谱是一种以图结构形式组织和连接信息的方式,其中节点表示实体,边表示实体之间的关系 。图结构允许用户高效地存储、检索和分析数据 。
它的结构如下图所示:
现在问题就来了,上面说过知识图谱能帮忙搞定文档分割和嵌入的问题 。那么,知识图谱到底能怎么帮到我们呢?
嵌入和知识图谱的结合
这里的基本实现思想是,作为信息的精炼格式,知识图谱可切割的数据颗粒度比我们人工的分割的更细、更小 。将知识图谱的小颗粒数据与原先人工处理的大块数据相结合,我们可以更好地搜索需要全局/跨节点上下文的查询 。
下面来做个题:请看下面的图示,假设提问同 x 有关,所有数据片段中有 20 个与 x 高度相关 。现在,除了获取主要上下文的前 3 个文档片段(比如编号为 1、2 和 96 的文档片段),我们还从知识图谱中对 x 进行两次跳转查询,那么完整的上下文将包括:
┌──────────────────┬──────────────────┬──────────────────┬──────────────────┐│ .─..─.│.─..─.│.─.│.─..─.││( x )─────? y )│ ( x )─────? a )│( j )│ ( m )?────( x )││ `▲'`─'│`─'`─'│`─'│`─'`─'│││1│2│3││4││ .─.││.▼.│││( z )?────────────┼──────────────────┼───────────( i )─┐│││ `?────┐││`─'│││├───────┼──────────┴──────────────────┴─────────────────┼┴──────────────────┤││Docs/Knowledge││││...││││││├───────┼──────────┬──────────────────┬─────────────────┼┬──────────────────┤│.─.└──────.│.─.│││.─.││ ( x ?─────( b )│ ( x )│└┼?( n )││`─'`─'│`─'││`─'││95│││96│││98││.▼.│.▼.││▼││( c )│ ( d )││.─.││`─'│`─'││ ( x )│└──────────────────┴──────────────────┴──────────────────┴──`─'─────────────┘