knowledge-vault/sources/references/开发笔记/RAG/如何提升RAG知识库文档的召回准确率.md

45 lines
3.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

在RAG系统中提升知识库文档的 召回准确率对于提高整个系统的用户体验至关重要。
今天我就从文档 切割粒度、检索后排序、混合检索、RAG-Fusion 这几个方面详细介绍如何提升知识库文档的召回准确率希望对你有所帮助。
### 文档切割粒度
在RAG系统中文档切割是将 大文档 分割成更小的 文本块以便更高效地进行向量表示 和检索。而 切割粒度 的大小直接影响检索的效率和召回率。
文档如果切割粒度 太细,可能导致上下文信息 丢失,使得检索到的文本块无法准确反映原文的含义,从而降低召回率。
但如果切割粒度 太粗,虽然保留了上下文信息,但可能使得检索范围过大,增加 噪声,同样影响召回率。
因此,选择适中的切割粒度很重要。但具体如何切割,也 没有标准答案,需要具体情况具体分析。
例如,对于 技术文档 或 法律文件,可以按段落或 章节进行切割;对于新闻报道或博客文章,可以按 句子 或 段落 进行切割。
目前,行业内还有一种做法,就是 重叠式切割,主要也是为了使上下文更完整,感兴趣可以详细了解下。
### 检索后排序
通常情况下,初始检索结果可能包含大量与查询相关,但实际相关性不高的文档,通过 重排序技术,可以将相 关性更高 的文档排在 前面,提高召回准确率。
比如,可以 **基于统计打分的重排序**,通过汇总多个来源的候选结果列表,使用多路召回的加权得分或倒数排名融合算法,来为所有结果重新算分。这种方法计算简单,成本低效率高,广泛用于对延迟较敏感的场景。
另外,可以 **基于深度学习的重排序**利用 BAAI/bge-reranker-v2-m3 这类的模型更好地分析问题和文档之间的相关性。这种方法检索准确度更高但成本也更高适合对检索精度要求高的场景。
### 混合检索
单一 的检索方式可能无法全面捕捉用户查询的意图,混合检索通过结合多种检索方式,可以显著提高召回率。
关键词匹配 召回简单直接,能快速找到包含特定关键词的文档;向量匹配 召回能更好地处理语义层面的匹配,提高召回的全面性。而将 两者结合,可以兼顾召回的速度和准确性。
另外,全文检索 能够捕捉文档中的 完整信息,但计算成本较高;向量检索计算效率高,但可能丢失上下文信息。通过结合两种检索方式,也可以充分利用各自的优势,提高召回率。
### RAG-Fusion
RAG-Fusion可能大家了解的不多它是一种将 多查询召回  结果融合策略结合使用的优化方法通过多次查询和结果融合提高召回率和准确性。
首先使用多个不同的查询来获取更全面的内容这些查询可以是基于原始查询的变体、同义词、近义词或语义相关的词汇生成当然我们可以利用 LLM 给我们生成即可也就是把用户原始的问题再用不同的几句话表达出来分别做查询。
根据各次查询结果的重要性进行 加权排序,确保最终展示给用户的结果是高度相关且全面的。
### 课代表总结
提升RAG系统中知识库文档的召回准确率需要从 多个方面入手。通过合理的文档切割粒度、检索后排序、混合检索和RAG-Fusion等策略可以显著提高召回率为用户提供更准确、更有价值的回答。在实际应用中还是得 根据具体场景和需求选择适合的策略进行优化哈。