解决RAG召回内容多、相似性高、区分度不够的问题

在做RAG应用时,经常会遇到召回内容多、相似性高、区分度不够的问题。特别是在一些规范建模标准化特别强的文档中,如数据中台建模是命名规范下,往往在相同的表名中,相差的一个字符就是完全不同的数据。如,1d、1m分别代码天粒度的数据和月粒度的数据。但在RAG场景就会导致召回无法区分。

一、改进检索策略

  1. 调整检索算法参数
    • 向量数据库相关参数:如果使用向量数据库进行检索,如 Milvus、Faiss 等,可以调整向量相似度度量的参数。例如,在使用余弦相似度作为度量标准时,可以适当提高相似度阈值。假设原本的阈值为 0.7,将其提高到 0.85 可能会减少召回的文档数量,并且使得召回的内容在语义上更接近查询需求。
    • 倒排索引相关参数:对于基于倒排索引的检索系统,如 Elasticsearch,可以调整词项频率 - 逆文档频率(TF - IDF)等参数。通过增加最小词频(minimum_term_frequency)或降低最大词频(maximum_term_frequency),能够过滤掉一些在文档中过于常见或过于罕见的词,从而减少相似文档的召回。
  2. 优化查询语句和关键词提取
    • 语义查询扩展:在查询语句方面,可以使用语义查询扩展技术。例如,利用词向量模型(如 Word2Vec、Bert 等)来找到与原始查询词在语义上相近的其他词汇,将这些词汇添加到查询语句中,使检索更加精准。比如,原始查询是 “人工智能在医疗领域的应用”,可以通过词向量模型找到 “机器学习”“深度学习” 等相关词汇,将查询扩展为 “人工智能、机器学习、深度学习在医疗领域的应用”。
    • 关键词提取优化:采用更先进的关键词提取算法,如 TextRank 或基于 Transformer 的关键词提取模型。这些算法能够更好地识别文本中的关键概念,避免提取过多的次要或相似的关键词。例如,在一篇关于多
### RAG 召回重排的技术解释 RAG(Retrieval-Augmented Generation)是一种结合检索和生成模型的方法,旨在通过从外部知识库中检索相关信息来增强生成模型的表现。其核心思想是利用检索模块获取上下文中最相关的文档片段,并将其作为额外输入提供给生成器。 #### RAG 的基本架构 RAG 架构由两个主要部分组成:检索器(Retriever)和生成器(Generator)。 - **检索器**负责从大规模语料库中提取与查询相关的文档或段落[^1]。这些文档通常被表示为嵌入向量并存储在一个索引结构中以便快速查找。 - **生成器**则基于检索到的内容以及原始输入生成最终响应。它能够学习如何有效地融合检索到的信息以提输出质量。 #### 召回混排 (Recall-Reranking) 实现细节 召回混排是指在初步检索阶段获得个候选项之后,再对其进行重新排序的过程。以下是具体实现方法: ##### 1. 初步检索阶段 在这个阶段,检索器会返回一组潜在匹配的文档列表 \(D_1, D_2,...,D_k\) 。每篇文档都附带有一个相似度分数,该分数衡量了文档与当前请求之间的关联程度。此过程可以采用密集型检索技术(如 Dense Passage Retrieval, DPR),也可以依赖稀疏型检索工具(如 BM25 或 TF-IDF)。 ##### 2. 特征工程 为了更好地评估各个候选项的质量,在进入下一环节之前可能还需要构建一些辅助特征。常见的做法包括但不限于计算以下指标: - 查询词频统计; - 候选文档长度调整后的权重分布; - 结合领域先验知识定义特定规则加权等。 ##### 3. 深度神经网络用于精调排名顺序 引入一个专门训练过的二分类或者回归模型来进行最终决策。这个模型接收来自上一步的所有信息作为输入变量,并预测每一个候选对象成为理想答案的概率值 p_i ∈ [0,1]. 接着按照概率大小降序排列得到新的序列 {d'_j}. 下面给出一段伪代码展示整个流程逻辑: ```python def rag_recall_rerank(query, retriever_model, generator_model): # Step 1: Retrieve top-k documents using Retriever model retrieved_docs = retriever_model.retrieve_topk_documents(query) # Step 2: Compute additional features for each document enriched_features = compute_enriched_features(retrieved_docs) # Step 3: Use a ranking model to re-rank the results based on computed scores ranked_scores = rank_documents(enriched_features, query) # Step 4: Generate final response by feeding highest-ranked doc into Generator best_doc_index = np.argmax(ranked_scores) generated_response = generator_model.generate(query, retrieved_docs[best_doc_index]) return generated_response ``` 上述函数展示了完整的 Rag Recall Re-ranking 过程,其中涉及到了三个重要组件——`retriever_model`, `compute_enriched_features()` 和 `rank_documents()`. 它们共同协作完成质量回复生成的任务。 #### 总结 通过对初始检索结果集应用复杂的机器学习算法再次优化排序策略,使得即使是在面对海量数据源的情况下也能有效筛选出真正有用的知识条目供后续处理使用。这种方法不仅提了系统的鲁棒性和泛化能力,同时也极大改善了用户体验满意度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值