趋近智
在文档被加载、分割成易于处理的块、嵌入到向量中并在向量存储中建立索引之后,下一步是在用户提出查询时检索相关信息。这项活动构成了检索增强生成(RAG)中的“检索”部分,它根本上依赖于语义搜索的原理。
与匹配精确词语的关键词搜索不同,语义搜索寻找在上下文和语义上意义相似的文本,即使措辞不同。这是可能的,因为我们的文本嵌入模型已经将文档块的含义捕获为高维空间中的向量。含义相似的块在此向量空间中位置更接近。
当用户提交查询时(例如,“第三季度报告的主要发现是什么?”),检索过程的第一步是使用与嵌入文档块时相同的文本嵌入模型,将此查询转换为嵌入向量。这很重要;比较由不同模型生成的向量通常没有意义。
有了查询向量后,我们使用向量存储来查找嵌入空间中与查询向量“最接近”的文档块向量。接近度通常使用相似度指标衡量。
有几个指标可以量化两个向量之间的相似度。语义搜索中最常用的是余弦相似度。
余弦相似度: 衡量两个向量之间夹角的余弦值。它的范围从 -1(完全相反)到 1(完全相同),其中 0 表示正交(无相似度)。对于通常经过归一化的文本嵌入,余弦相似度有效衡量方向相似度,与向量大小无关。更高的余弦相似度分数表示向量指向更相似的方向,表明语义关联度更高。 公式为:
余弦相似度(A,B)=∥A∥∥B∥A⋅B其中 A 和 B 是向量,A⋅B 是点积,∥A∥ 和 ∥B∥ 是它们的模。
欧几里得距离 (L2 距离): 衡量两个向量端点之间的直线距离。距离越小表示相似度越高。
欧几里得距离(A,B)=i=1∑n(Ai−Bi)2点积: 有时直接使用,特别是在归一化向量中,此时它等同于余弦相似度。
大多数向量存储在语义搜索任务中默认使用余弦相似度,因为它通常在高维文本嵌入中表现良好。
向量存储提供了执行这些相似度搜索的高效方法,通常被称为 k 最近邻(k-NN)搜索。给定一个查询向量,向量存储会快速识别其索引中与查询向量相似度最高(或距离最小)的 k 个向量。
让我们用一个 Python 示例来说明。假设我们有一个 vector_store 对象(代表我们与 FAISS、ChromaDB、Pinecone 等的连接)和一个能够将文本转换为向量的 embedding_function:
# 假设 vector_store 和 embedding_function 已初始化
user_query = "上个月更新了哪些安全协议?"
# 1. 嵌入用户查询
query_embedding = embedding_function.embed_query(user_query)
# 2. 在向量存储中执行相似度搜索
# 我们通常要求获取最相似的前 'k' 个文档。这里我们获取 4 个。
k = 4
search_results = vector_store.similarity_search_with_score(
query=query_embedding,
k=k
)
# 3. 处理结果
retrieved_docs = []
for doc, score in search_results:
print(f"Score: {score:.4f}")
print(f"Content: {doc.page_content[:200]}...") # 显示片段
print("-" * 20)
retrieved_docs.append(doc) # 'doc' 通常包含文本块和元数据
# 'retrieved_docs' 现在保存着 k 个最相关块的文本
在此示例中:
user_query 以获得 query_embedding。vector_store 上调用 similarity_search_with_score 之类的方法。我们传入 query_embedding 并指定 k=4,这意味着我们希望获得 4 个最相似的文档块。向量存储库可能具有略微不同的方法名称(search、query、get_nearest_neighbors),但原理是相同的。二维空间中的嵌入可视化。搜索旨在查找最接近查询点(红色)的文档点(蓝色)。在此,如果 k=3,则文档 1、文档 2 和文档 4 可能会被检索到。
参数 k,即要检索的文档数量,是一个重要的设置。
k 的最佳值通常取决于具体的应用、文档块的长度以及预期查询的性质。这通常需要一些实验。通常从 3 或 5 这样的值开始,然后进行评估和调整。一些系统还实现了相关性分数阈值,只包含高于特定相似度分数的文档,而不是固定的数量 k。
在此检索步骤之后,我们有了一组根据语义相似度被认为与用户查询最相关的文档块。下一节将说明如何将此检索到的上下文与原始查询结合起来,形成用于 LLM 的新提示。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造