14.3 检索系统实现

单纯的向量检索(Dense Retrieval)往往无法应对精确匹配的需求(如人名、产品型号)。本节我们将实现混合检索系统。

14.3.1 混合检索

稀疏检索

利用关键词匹配能力,弥补语义检索在专有名词上的劣势。

  • 使用 ElasticsearchRank_BM25 库。

  • 对查询词进行分词处理(中文使用 Jieba 或 HanLP)。

稠密检索

利用 Embedding 捕捉语义相似度。

  • 使用余弦相似度(Cosine Similarity)度量距离。

再加权融合

将两路检索的结果进行融合:

$Score = \frac{1}{k + rank_{vec}} + \frac{1}{k + rank_{bm25}}$

通常 k 取 60。此方法无需归一化分数,鲁棒性较强。

14.3.2 重排序

Retrieve 阶段追求召回率(Recall),Rerank 阶段追求准确率(Precision)。

我们引入 Cross-Encoder 类重排序模型对 Top-K(如 50 个)结果进行精细打分(具体模型与 K 值需通过评测与延迟预算确定)。

spinner

注意:Reranker 计算量大,延迟高,只应对少量的初筛结果进行重排。

14.3.3 查询预处理

用户的提问往往是不完整的,直接检索效果不佳。

  • 指代消解:将“它主要讲了什么?”改写为“员工手册主要讲了什么?”

  • 问题扩展:生成相似问题,多路检索以提高覆盖面。

通过这些优化,我们可以构建一个高查准率、高查全率的检索系统。

最后更新于