继续准备 LLM 面试知识,这次写文本检索技术。文本检索是 RAG(检索增强生成)系统的核心组件,也是面试中经常被问到的问题。本文将详细介绍稠密向量检索、稀疏向量检索、BM25算法以及混合检索策略,帮助理解现代文本检索系统的技术原理。
引言
在当今的信息检索领域,随着人工智能和自然语言处理技术的发展,文本检索技术已经从传统的基于关键词匹配的方法,发展到了基于深度学习的语义检索方法。文本检索是RAG(Retrieval-Augmented Generation)系统的核心组件,它负责从大规模文档集合中检索出与用户查询最相关的文档片段,为后续的生成模型提供上下文信息。
本文将详细介绍三种主要的文本检索方法:稠密向量检索(Dense Retrieval)、稀疏向量检索(Sparse Retrieval)和BM25算法,以及它们的混合使用策略。
稠密向量检索(Dense Retrieval)
稠密向量检索的基本原理
稠密向量检索是一种基于深度学习的检索方法,它通过将文本转换为高维空间中的连续向量表示,然后使用向量相似度(如余弦相似度、欧氏距离)来检索相关文档。
核心思想:
- 将查询和文档都映射到同一个高维向量空间
- 通过计算向量间的相似度来衡量相关性
- 能够捕捉文本的深层语义信息
技术实现
1. 文本编码
稠密向量检索通常使用预训练的语言模型(如BERT、T5、Sentence-BERT等)对文本进行编码:
其中:
- $\mathbf{q}$ 是查询的向量表示
- $\mathbf{d}$ 是文档的向量表示
- $\text{Encoder}$ 是预训练的语言模型
2. 相似度计算
常用的相似度计算方法包括:
余弦相似度:
点积相似度:
欧氏距离:
3. 索引和检索
向量索引:
- 使用FAISS、Annoy、HNSW等向量索引库
- 支持高效的近似最近邻搜索
- 能够处理百万级别的向量检索
检索流程:
- 将查询编码为向量
- 在向量索引中搜索最相似的文档向量
- 返回相似度最高的文档
稠密向量检索的优势和局限性
优势:
- 语义理解能力强:能够理解查询和文档的深层语义
- 处理同义词和近义词:即使词汇不完全匹配,也能找到相关文档
- 支持复杂查询:能够处理自然语言形式的查询
局限性:
- 计算成本高:需要深度学习模型进行编码
- 索引规模限制:在大规模数据集上可能遇到性能瓶颈
- 对训练数据敏感:检索效果依赖于编码模型的训练质量
应用场景
- 智能问答系统:从知识库中检索相关答案
- 推荐系统:基于内容相似性推荐相关文档
- 语义搜索:理解用户意图的搜索引擎
稀疏向量检索(Sparse Retrieval)
稀疏向量检索的基本原理
稀疏向量检索是基于传统信息检索模型的方法,它使用词袋模型(Bag of Words)将文本表示为稀疏向量,并通过计算词频-逆文档频率(TF-IDF)来评估文档与查询的相关性。
核心思想:
- 将文本表示为高维稀疏向量
- 每个维度对应词汇表中的一个词
- 通过统计方法计算词的重要性
技术实现
1. TF-IDF计算
词频(Term Frequency, TF):
逆文档频率(Inverse Document Frequency, IDF):
TF-IDF权重:
2. 向量构建
文档向量 $\mathbf{d}$ 的构建:
其中 $t_1, t_2, …, t_n$ 是词汇表中的所有词。
3. 相似度计算
余弦相似度:
点积相似度:
稀疏向量检索的优势和局限性
优势:
- 计算效率高:基于统计方法,计算速度快
- 可解释性强:能够明确知道哪些词贡献了相关性
- 处理大规模数据:能够高效处理大规模文档集合
局限性:
- 语义理解能力弱:无法处理同义词和近义词
- 词汇匹配限制:需要查询词在文档中实际出现
- 无法处理语义相似性:无法理解词汇的深层含义
应用场景
- 传统搜索引擎:基于关键词的网页搜索
- 文档检索系统:从文档库中检索相关文档
- 信息过滤:基于关键词的信息过滤
BM25算法
BM25算法的基本原理
BM25(Best Matching 25)是一种经典的信息检索算法,它是TF-IDF算法的改进版,通过引入词频(TF)和文档频率(DF)的函数来计算文档与查询的相关性得分。
核心思想:
- 在TF-IDF基础上引入文档长度归一化
- 使用词频饱和函数处理高频词
- 通过参数调整优化检索效果
数学公式
BM25算法的核心公式:
其中:
- $Q$ 是查询,包含词 $q_1, q_2, …, q_n$
- $D$ 是文档
- $f(q_i, D)$ 是词 $q_i$ 在文档 $D$ 中的词频
- $|D|$ 是文档 $D$ 的长度
- $\text{avgdl}$ 是文档集合的平均长度
- $k_1$ 和 $b$ 是调节参数
IDF计算:
其中:
- $N$ 是文档集合的总文档数
- $n(q_i)$ 是包含词 $q_i$ 的文档数
参数调节
$k_1$ 参数:
- 控制词频饱和程度
- 通常设置为 1.2-2.0
- 值越大,词频的影响越线性
$b$ 参数:
- 控制文档长度归一化程度
- 取值范围为 0-1
- $b=0$ 表示不进行长度归一化
- $b=1$ 表示完全归一化
BM25算法的优势
- 理论基础扎实:基于概率检索模型
- 参数可调节:能够适应不同的数据集和需求
- 计算效率高:基于统计方法,计算速度快
- 效果稳定:在许多基准测试中表现优异
应用场景
- 搜索引擎:Google、Bing等搜索引擎的核心算法
- 文档检索:企业文档管理系统
- 学术搜索:学术论文检索系统
混合检索策略
混合检索的基本原理
混合检索结合了稠密向量检索、稀疏向量检索和BM25算法的优势,通过多路召回和结果融合来提高检索系统的整体性能。
核心思想:
- 使用多种检索方法并行检索
- 通过融合算法合并检索结果
- 平衡准确性和召回率
混合检索的优势
- 互补性:不同方法各有优势,相互补充
- 提高准确性:通过多路召回提高检索准确性
- 提升召回率:增加检索结果的覆盖面
- 适应性:能够适应不同的查询类型和场景
实现方法
1. 多路召回
稠密向量检索:
- 使用语义相似性进行检索
- 适合处理语义相关的查询
稀疏向量检索:
- 使用关键词匹配进行检索
- 适合处理精确匹配的查询
BM25检索:
- 使用传统信息检索方法
- 适合处理结构化查询
2. 结果融合
RRF(Reciprocal Rank Fusion):
其中:
- $\text{rank}_i(d)$ 是文档 $d$ 在第 $i$ 个检索方法中的排名
- $k$ 是调节参数,通常设置为 60
加权融合:
其中:
- $w_i$ 是第 $i$ 个检索方法的权重
- $\text{score}_i(d)$ 是文档 $d$ 在第 $i$ 个检索方法中的得分
3. 动态权重调整
根据查询类型动态调整不同检索方法的权重:
- 语义查询:增加稠密向量检索的权重
- 关键词查询:增加稀疏向量检索和BM25的权重
- 混合查询:平衡各种方法的权重
系统架构
查询处理层:
- 查询解析和预处理
- 查询类型识别
- 参数选择
检索层:
- 多路并行检索
- 结果初步排序
- 去重和合并
融合层:
- 结果融合算法
- 最终排序
- 结果返回
性能评估指标
检索性能指标
准确率(Precision):
召回率(Recall):
F1分数:
平均精度(MAP):
其中 $\text{AP}(q)$ 是查询 $q$ 的平均精度。
效率指标
检索延迟:从查询到返回结果的时间
吞吐量:单位时间内处理的查询数
索引大小:索引占用的存储空间
实际应用中的优化策略
索引优化
倒排索引:
- 为每个词建立文档列表
- 支持快速的关键词查找
- 优化存储和查询效率
向量索引:
- 使用HNSW、IVF等算法
- 支持高效的近似最近邻搜索
- 平衡精度和速度
查询优化
查询扩展:
- 使用同义词扩展查询
- 基于用户反馈调整查询
- 利用查询日志优化
查询重写:
- 将自然语言查询转换为结构化查询
- 使用查询模板提高效率
- 基于历史查询进行优化
缓存策略
结果缓存:
- 缓存热门查询的结果
- 使用LRU等策略管理缓存
- 提高响应速度
索引缓存:
- 将常用索引加载到内存
- 使用分层缓存策略
- 优化内存使用