在做RAG应用时,经常会遇到召回内容多、相似性高、区分度不够的问题。特别是在一些规范建模标准化特别强的文档中,如数据中台建模是命名规范下,往往在相同的表名中,相差的一个字符就是完全不同的数据。如,1d、1m分别代码天粒度的数据和月粒度的数据。但在RAG场景就会导致召回无法区分。
一、改进检索策略
- 调整检索算法参数
- 向量数据库相关参数:如果使用向量数据库进行检索,如 Milvus、Faiss 等,可以调整向量相似度度量的参数。例如,在使用余弦相似度作为度量标准时,可以适当提高相似度阈值。假设原本的阈值为 0.7,将其提高到 0.85 可能会减少召回的文档数量,并且使得召回的内容在语义上更接近查询需求。
- 倒排索引相关参数:对于基于倒排索引的检索系统,如 Elasticsearch,可以调整词项频率 - 逆文档频率(TF - IDF)等参数。通过增加最小词频(minimum_term_frequency)或降低最大词频(maximum_term_frequency),能够过滤掉一些在文档中过于常见或过于罕见的词,从而减少相似文档的召回。
- 优化查询语句和关键词提取
- 语义查询扩展:在查询语句方面,可以使用语义查询扩展技术。例如,利用词向量模型(如 Word2Vec、Bert 等)来找到与原始查询词在语义上相近的其他词汇,将这些词汇添加到查询语句中,使检索更加精准。比如,原始查询是 “人工智能在医疗领域的应用”,可以通过词向量模型找到 “机器学习”“深度学习” 等相关词汇,将查询扩展为 “人工智能、机器学习、深度学习在医疗领域的应用”。
- 关键词提取优化:采用更先进的关键词提取算法,如 TextRank 或基于 Transformer 的关键词提取模型。这些算法能够更好地识别文本中的关键概念,避免提取过多的次要或相似的关键词。例如,在一篇关于多个医疗技术的文档中,精准地提取出 “基因治疗”“免疫疗法” 等关键技术相关的关键词,而不是提取大量的通用医疗词汇。
- 采用多模态检索(如果适用)
- 结合图像、音频等模态信息:如果数据包含多种模态,如文档同时关联有相关的图像、音频等,可以将这些模态的信息也纳入检索范围。例如,在一个医学教育 RAG 系统中,除了文本内容,还可以利用医学图像(如 X 光片、病理切片图)的特征进行检索。通过将文本检索和图像检索相结合,利用不同模态之间的互补性,提高检索的区分度。
- 融合多模态特征向量:对于支持多模态的向量数据库,可以将文本、图像、音频等不同模态的特征向量进行融合。例如,使用深度神经网络将文本向量和图像向量融合为一个统一的多模态向量,在检索时使用这个融合后的向量来计算相似度,从而更全面地衡量内容与查询之间的相关性。
二、对召回内容进行后处理
- 内容聚类和排序
- 聚类算法应用:使用聚类算法(如 K - Means、DBSCAN 等)对召回的内容进行聚类。根据内容的语义相似度将它们分成不同的组,然后在每个组中选择最具代表性的内容。例如,在召回了大量关于不同疾病治疗方法的文档后,通过聚类将其分为心脏病治疗、癌症治疗等不同的类别,然后从每个类别中挑选出最典型的文档。
- 排序策略优化:除了按照传统的相关性得分进行排序外,还可以考虑其他因素。例如,加入内容的新颖性、权威性等维度的考量。对于一些新闻资讯类的 RAG 应用,可以优先展示最新发布的内容;对于学术文献检索,可以优先考虑来自高影响力期刊的文献。
- 内容摘要和关键信息提取
- 自动摘要生成:采用自动摘要技术,如抽取式摘要(通过提取文本中的关键句子)或生成式摘要(利用生成模型生成摘要)来生成召回内容的摘要。这有助于快速展示每个召回文档的核心内容,方便用户判断其与自己需求的匹配度。例如,使用 BertSum 等模型为每篇召回的医学研究论文生成摘要,用户可以通过摘要快速了解论文的主要发现。
- 关键信息提取和展示:提取召回内容中的关键信息,如人物、事件、方法、结论等,并以结构化的方式展示。在一个科技文献 RAG 系统中,提取文献中的实验方法、研究结论等关键信息,以表格或列表的形式呈现给用户,这样可以更直观地比较不同召回内容之间的差异。
三、数据预处理和索引构建阶段的优化
- 数据清洗和去重
- 文本预处理:在构建索引之前,对原始数据进行清洗,去除噪声信息,如多余的空格、特殊符号、停用词等。同时,识别并合并重复的内容。例如,在一个新闻数据库中,可能会存在多篇内容几乎相同的新闻报道(可能是转载等情况),可以通过文本相似度计算来识别并删除重复的部分。
- 数据分块和划分:将长文本数据进行合理的分块和划分。例如,对于长篇的学术著作,可以按照章节或主题将其划分为较小的块。这样在检索时,可以更精准地召回与查询相关的部分,而不是召回整个长篇内容,从而减少相似内容的整体召回量。
- 构建层次化索引和分类体系
- 层次化索引:建立层次化的索引结构,例如,在一个企业知识管理 RAG 系统中,按照部门、项目、主题等层次构建索引。当进行检索时,可以先在高层级的索引中筛选出相关的类别,然后再在低层级的索引中查找具体的内容,这样可以提高检索的效率和区分度。
- 分类体系建设:构建一个完善的分类体系,将数据按照不同的领域、主题、用途等进行分类。在检索时,根据查询所属的类别,优先在相应的分类中进行检索。例如,在一个图书馆文献 RAG 系统中,将图书文献分为自然科学、社会科学、人文艺术等大类,每个大类下再细分多个小类,通过这种分类体系来引导检索,减少无关或相似内容的召回。