RAG--重排序

专题1:重排序的方法

方法1:利用bge-reranker模型的能力

在检索的时候一般用的是双塔模型,使用一个模型将query和document嵌入到一个空间中,然后使用ANN算法检索

在排序的时候使用cross-encoder模型将两句话拼接到一起计算出来一个值表示相似度

方法2:用prompt方式引导LLM进行重排序:

提示词:
The following are passages related to query {{query}}
[1]{{passage_1}}
[2]{{passage_2}}
(more passages)
Rank these passages based on their relevance to the query.

方法3:利用Colbert Reranker方式进行重排序

文章链接:万字长文梳理2024年的RAG - 知乎

专题2:重排序模块评价指标

2.1 NDCG

主要是两个思想:1.高相似性的结果一定比一般关联性的结果更影响最终的指标得分;2.高关联度的结果出现在更靠前的位置时,NDCG指标会更高

首先说明计算公式:

 

2.2 MRR

专题3:重排序模型的部署

利用xinference部署,文章链接:Xinference部署reranker模型_xinference部署bge-reranker-v2-m3-优快云博客

专题4:其他小问题

4.1 下载reranker模型的时候要下载完整,如果下载不完整的话会导致没办法加载初始权重

### RAG中的混合检索与重排序 #### 混合检索的作用 在RAG框架内,混合检索指的是结合多个数据源或不同类型的检索策略来获取最相关的信息片段。这种方法不仅提高了信息覆盖范围,还增强了最终生成内容的多样性和准确性[^1]。 #### 重排序的重要性 当初步检索得到一系列候选文档后,这些文档并非总是按照最优顺序排列。因此,引入重排序机制变得至关重要。它通过对初始检索结果重新评估并调整其优先级,使得那些真正有助于提高回答质量的文档能够被置于前列[^2]。 #### 实现方法概述 为了有效实施这一过程,通常会采用两步走的方式: - **多源融合**:利用多种搜索引擎API或是内部构建的知识库作为输入端口;同时考虑加入文本相似度计算、主题建模等技术手段辅助筛选有用资源。 - **评分优化**:针对每一个检索出来的条目赋予一个综合得分,该分数由多项因素共同决定——比如匹配程度、权威性评价指标等等。随后依据此分值对所有候选项执行降序整理操作。 具体来说,在编码层面可参照如下Python伪代码展示如何集成上述概念: ```python from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration def hybrid_retrieval_and_reranking(query): tokenizer = RagTokenizer.from_pretrained('facebook/rag-token-nq') retriever = RagRetriever.from_pretrained('facebook/rag-token-nq', index_name="exact", use_dummy_dataset=True) # 执行初次检索获得前N个文档片段 retrieved_docs = retriever.retrieve(query=query) # 对每个文档片段打分,并记录额外元数据(如来源可靠性) scored_documents = [] for doc in retrieved_docs: score = calculate_score(doc) # 自定义函数用于计算单篇文档的价值 metadata = get_metadata(doc) # 获取关于这篇文档的一些背景信息 scored_documents.append((doc, score, metadata)) # 根据得分高低再次排序 sorted_results = sorted(scored_documents, key=lambda item:item[1], reverse=True) model = RagSequenceForGeneration.from_pretrained('facebook/rag-token-nq').eval() inputs = tokenizer([query]*len(sorted_results), truncation=True, padding='longest', return_tensors="pt") generated_answers = [] for idx, (_, _, meta) in enumerate(sorted_results[:top_k]): # 只取排名靠前的结果参与后续处理 input_ids = torch.tensor([[sorted_results[idx][0].input_ids]]).to(model.device) outputs = model.generate(input_ids=input_ids) answer = tokenizer.decode(outputs[0], skip_special_tokens=True) generated_answers.append({"answer": answer, "metadata": meta}) return generated_answers ``` 这段代码展示了怎样在一个实际应用环境中部署带有混合检索和重排序特性的RAG系统。这里假设`calculate_score()` 和 `get_metadata()` 是预先定义好的功能模块,用来分别完成对各个文档片段价值评定及其附加属性提取的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值