9.4 RAG检索优化:重排(这是重点)
什么是 RAG 重排?
重排 = 从“初步检索的一堆候选文档”里,再挑出最相关的那几个
重排在干嘛?
它会做一件更“聪明”的事:
让模型直接判断:这个文档能不能回答这个问题?
而不是只看向量距离。
—-say by gpt老师
这里讲一种最经典的重排方法吧
1 Cross-Encoder(最经典🔥)
1.1 首先安装库
1 | !pip install sentence-transformers |
1 | # 模拟数据 |
1.2 召回
当然重排是在召回的后面的,我们要先召回,对得到的list[documet]重排,召回的步骤就很熟悉了吧,这边省略的文本切割还是挺快的
ps;我这里vector_store.similarity_search_with_score用的是这种检索方法,所以呢就是我得到的不是list[documet],而是list[(document,score ) ]这种二维元组列表。
1 | # ===== 步骤1:向量检索(粗排)===== |
1.3 配对
这个我感觉有点弱智的地方,向量检索器接收的是一个str,但是词匹配用的检索器,接收的是一个元组(问题,chunk)或者这种元组列表,
所以呢我们需要准备一个配对好的列表给这个检索器排序
1 | #配对,像对比配偶一样,是个二维数组,这个我们需要继续用第一轮召回得到数据嘛 |
配对后就是排序了
1.4 排序
zip的作用是把两个列表变成一个
list_a = [a1, a2, a3]
list_b = [b1, b2, b3]
zip(list_a, list_b) # → [(a1,b1), (a2,b2), (a3,b3)]
1 | # 组合并排序 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 楠瓜的小窝!
评论

