4. 重排序和过滤
重排序在RAG过程中起着至关重要的作用。在简单的RAG方法中,可能会检索到大量上下文,但并非所有上下文都与问题相关。重新排序可以对文档进行重新排序和过滤,将相关文档放在最前面,从而提高RAG的效率。
(1)RRF多检索融合
RRF(Ranked Retrieval Fusion)是一种将多个检索系统的排名结果进行融合的方法,它能够综合不同检索方法的优点。将关键词检索(BM25等)和向量检索(基于嵌入的检索)结合在一起,可以提升检索的效果。RRF通常按照检索结果的排名进行分数计算,最终得出一个融合后的排名。
下面通过一个具体的检索结果例子展示关键词检索(BM25)和向量检索的结果如何结合RRF排序来得到最终的排序结果。
假设我们有以下五个文档D1~D5,并且进行两个不同的检索:
文档ID
| 关键词检索(BM25)排名
| 向量检索(基于嵌入的语义相似度)排名
|
D1
| 3
| 1
|
D2
| 1
| 4
|
D3
| 5
| 2
|
D4
| 2
| 3
|
D5
| 4
| 5
|
根据RRF公式分别计算D1~D5文档得分,
其中,k为常数,通常选择k = 60,rank_i(d)表示第 i种检索方法中文档d的排名。
•文档D1:0.03226
•文档D2:0.03202
•文档D4:0.03200
•文档D3:0.03151
•文档D5:0.03101
根据RRF分数排序,最终的文档排名为:
1.D1(分数:0.03226)
2.D2(分数:0.03202)
3.D4(分数:0.03200)
4.D3(分数:0.03151)
5.D5(分数:0.03101)
(2)语义检索:相似≠相关
- Embedding(Bi-Encoder)双编码器
•结构:Bi-Encoder使用两个独立的编码器来处理查询(query)和文档(document),分别生成它们的嵌入表示(embeddings)。
Embedding模型根据查询(query)和文档(document)给出相似度得分,但是这个得分描述的更多的是相似性。Embedding本质上是一个双编码器,两个文本在模型内部没有任何信息交互。只在最后计算两个向量的余弦相似度时才进行唯一一次交互。
- Rerank(Cross-Encoder)交叉编码器
•结构:Cross-Encoder将查询和文档拼接在一起,作为一个整体输入到一个单一的编码器中。
Rerank本质是一个Cross-Encoder的模型。Cross-Encoder能让两个文本片段一开始就在BERT模型各层中通过self-attention进行交互。
采用两阶段检索结合可以兼顾效果和效率:
•第一个阶段的目标是尽可能多的召回相似的文本片段,这个阶段的文本得分排序不是特别靠谱,所以候选的 topK可以设置大一些,比如topK=10;
•第二个阶段的目标是对 10个粗排的候选文本片段进行重新排序,用cross-encoder计算10个候选文本和query的相关度得分。