今天分享一篇来自 Algoverse 人工智能研究中心的论文。
ChunkRAG: Novel LLM-Chunk Filtering Method for RAG Systems
ChunkRAG:用于 RAG 系统的新型大语言模型分块过滤方法
论文地址: https://arxiv.org/abs/2410.19572
一、论文概述
论文中提出了一种 ChunkRAG
的新的检索方法,旨在解决 RAG 获取文档时会检索到不相关或关联较弱的信息,而 ChunkRAG
通过细粒度的文档片段过滤来提升检索增强生成(RAG)系统的准确性和事实性。该方法首先将文档分割成语义连贯的小段落(即“chunk”),然后利用大型语言模型(LLM)评估每个片段与用户查询的相关性,从而在生成阶段前过滤掉不相关或弱相关的片段。
二、论文中的精彩之处
2.1 语义分块(Semantic Chunking)
语义分块是基础步骤,将输入文档转化为有语义意义的单元,以利于有效检索和评估。此阶段包含三个子流程:
- 输入准备:先运用 NLTK 的 sent_tokenize 函数把文档切分成句子。接着,给每个句子赋予一个通过预训练嵌入模型(比如 text-embedding-3-small)生成的嵌入向量。
- 分块形成:依据句子间的语义相似度(通过余弦相似度衡量)把连续的句子组合成分块。如果连续句子间的相似度低于阈值(),就创建一个新分块。限制每个分块在 500 个字符以内,以保障后续阶段的效率。
- 分块的嵌入生成:每个分块都用上述相同的预训练嵌入模型来表示。生成的分块嵌入存储在向量数据库中,方便在查询阶段高效检索。
2.2 混合检索与高级过滤
在检索和过滤阶段,将传统的 RAG 组件与先进的微调技术加以融合,以保障高质量的检索效果。混合检索和过滤阶段详情如下:
- 检索器初始化与查询重写:初始化一个能够将用户查询与块嵌入作对比的检索器。为提升查询效能,运用 GPT-4omini 进行查询重写步骤,保证查询与所存储的嵌入高度匹配。这能让检索过程的召回率和精度更出色。
- 初始过滤:检索到的块首先通过 TF-IDF 评分与余弦相似度的组合方式进行过滤。冗余度高(相似度>0.9)的块被剔除。其余的块依据它们与重写查询的相似度来排序。
- 相关性评分与阈值设定:为进一步优化相关性,大型语言模型(LLM)为每个块赋予初始相关性分数。这些分数经自我反思和批评模型加以细化,该模型依照特定领域的启发式规则调整分数。通过分析分数分布设定最终的动态阈值,并且只有超过此阈值的块得以保留。
- 混合检索策略:为最大程度提升检索成效,采用了融合 BM25 和基于 LLM 的检索方法的双重检索策略。集成方法采用均等权重(各 0.5)来平衡关键字和语义检索。此外,利用 Cohere 的重新排名模型(rerank-englishv3.0)对检索到的块进行排名,解决“Lost in the middle”的问题,增强可能被降低优先级的中心上下文的相关性。
三、总结
ChunkRAG 通过引入细粒度的块级过滤机制,显著提高了 RAG 系统的准确性和事实性。这种方法不仅减少了生成过程中无关信息的混入,还通过多级过滤和自反射评分机制进一步提升了生成内容的质量。