在做RAG应用时,经常会遇到召回内容多、相似性高、区分度不够的问题。特别是在一些规范建模标准化特别强的文档中,如数据中台建模是命名规范下,往往在相同的表名中,相差的一个字符就是完全不同的数据。如,1d、1m分别代码天粒度的数据和月粒度的数据。但在RAG场景就会导致召回无法区分。
一、改进检索策略
- 调整检索算法参数
- 向量数据库相关参数:如果使用向量数据库进行检索,如 Milvus、Faiss 等,可以调整向量相似度度量的参数。例如,在使用余弦相似度作为度量标准时,可以适当提高相似度阈值。假设原本的阈值为 0.7,将其提高到 0.85 可能会减少召回的文档数量,并且使得召回的内容在语义上更接近查询需求。
- 倒排索引相关参数:对于基于倒排索引的检索系统,如 Elasticsearch,可以调整词项频率 - 逆文档频率(TF - IDF)等参数。通过增加最小词频(minimum_term_frequency)或降低最大词频(maximum_term_frequency),能够过滤掉一些在文档中过于常见或过于罕见的词,从而减少相似文档的召回。
- 优化查询语句和关键词提取
- 语义查询扩展:在查询语句方面,可以使用语义查询扩展技术。例如,利用词向量模型(如 Word2Vec、Bert 等)来找到与原始查询词在语义上相近的其他词汇,将这些词汇添加到查询语句中,使检索更加精准。比如,原始查询是 “人工智能在医疗领域的应用”,可以通过词向量模型找到 “机器学习”“深度学习” 等相关词汇,将查询扩展为 “人工智能、机器学习、深度学习在医疗领域的应用”。
- 关键词提取优化:采用更先进的关键词提取算法,如 TextRank 或基于 Transformer 的关键词提取模型。这些算法能够更好地识别文本中的关键概念,避免提取过多的次要或相似的关键词。例如,在一篇关于多