Indexing 相关内容
概念解释
Indexing(索引):在数据加载之后,我们有一系列的 Document
对象(或 Node
对象)。此时,我们需要在这些对象上构建索引(Index),以便能够开始查询这些数据。
Index(索引):在LlamaIndex中,索引是一种数据结构,由 Document
对象组成,旨在通过LLM(大型语言模型)进行查询。索引的设计与查询策略相辅相成。
常见的索引类型
LlamaIndex提供了几种不同的索引类型,其中最常见的有两种:
- Vector Store Index(向量存储索引)
- Summary Index(摘要索引)
Vector Store Index
Vector Store Index 是最常见的索引类型。它将 Document
对象分割成 Node
对象,并为每个节点的文本创建向量嵌入(vector embeddings),以便通过LLM进行查询。
什么是嵌入(Embedding)?
向量嵌入是LLM应用的核心。嵌入是文本语义或意义的数值表示。具有相似意义的两个文本片段将具有数学上相似的嵌入,即使实际文本差异很大。这种数学关系使得语义搜索成为可能,用户提供查询词,LlamaIndex可以找到与查询词意义相关的文本,而不仅仅是关键词匹配。
Vector Store Index 嵌入文档
Vector Store Index 使用LLM的API将所有文本转换为嵌入。如果有大量文本,生成嵌入可能需要很长时间,因为涉及许多往返API调用。
Top K 检索
当需要搜索嵌入时,查询本身也会被转换为向量嵌入,然后通过数学运算对所有嵌入进行排序,按与查询的语义相似度排序。排序完成后,Vector Store Index 返回最相似的嵌入对应的文本块。返回的嵌入数量称为 k
,控制返回嵌入数量的参数称为 top_k
。这种搜索通常被称为“top-k 语义检索”。
使用 Vector Store Index
要使用 Vector Store Index,可以将加载阶段创建的 Document
列表传递给它:
from llama_index.core import VectorStoreIndex
# 从文档创建索引
index = VectorStoreIndex.from_documents(documents)
提示:from_documents
方法还接受一个可选参数 show_progress
。设置为 True
可以在索引构建过程中显示进度条。
也可以选择直接在 Node
对象列表上构建索引:
from llama_index.core import VectorStoreIndex
# 从节点创建索引
index = VectorStoreIndex(nodes)
Summary Index
Summary Index 是一种更简单的索引形式,最适合于生成文档文本摘要的查询。它简单地存储所有 Document
对象,并在查询引擎请求时返回所有这些对象。
进一步阅读
如果数据是一组相互关联的概念(在计算机科学术语中,称为“图”),则可能对知识图谱索引感兴趣。
总结
通过本课程,我们详细讲解了Indexing的概念及其在LlamaIndex中的应用。我们介绍了Vector Store Index和Summary Index两种常见的索引类型,以及如何使用这些索引进行数据查询。