跳至内容
LumberChunker解读

LumberChunker解读

摘要

现代 NLP任务依赖稠密检索方法来获取上下文信息。动机:通过大小变化的chunk让内容语义独立性得以实现从而提高检索。LumberChunker,一个利用LLM动态分割文档的方法,说白了用prompt让LLM发现一组有序passages的分割点 当内容转移话题时。为了评估我们的方法,我们提出GutenQA,一个benchmark,大海捞针型记叙文问题。实验证明,LumberChnuker不仅比 强大基线们 在DCG@20上 多7.37%,而且把它结合到RAGpipeline里时,能强于其他分块方法和强大LLMs。

介绍

LLMs 为解决大量任务提供思路,翻译、总结摘要和Q&A等。然而当缺少关键信息时会导致幻觉。会带来危害。

Q&A领域,信息准确至关重要。RAG是个解决方案于抑制幻觉,通过让模型生成依赖于给定文本。

一个在RAG流程中容易忽略的点是文本内容如何分割成文本块,它能严重影响检索质量。现实应用趋于简化这步,设置分割粒度为句子、段落或原子命题。

我们提出LumberChunker,一个基于 “文本块越独立检索效果越好”的原则 的新的文本分块方法。独立性通过动态大小得以最好地实现。假定语言模型能够胜任文本分析工作,我们利用他们的能力来识别分割点(segementation points)。具体地,我们反复指导一个语言模型接收一系列连续的段落并确定出现主题转变的段落。该方法保障块内上下文上连贯但与相邻的块相互独立,从而提高检索。

我们提出一个新基准 GutenQA,包含100 个公开领域记叙文书籍(从Project Gutenberg提取的)。我们创造了3000个高质量问答对。最终我们融入RAG进行下游QA任务测试准确率。

背景

检索细粒度在文本分块又关键作用,因为差分块策略导致内容不完整或过多不相干信息降低检索模型表现。

除了经典细粒度 句子或段落,还有其他高级方法。recursive character splitting基于层级分割符如段落分隔符、新行、空格和单个字符。缺少上下文理解。为解决这个问题,基于语义的分块方法(semantic-based splitting)使用embedding 来聚合语义相似的文本片段。通过识别文本间embedding距离的重大变化。

最近的研究提出新的检索粒度术语 命题(propositions),最小化语义单元,每个命题以清晰、self-sufficient 自然语言方式 传达 独立事实。虽然该理念再 基于事实的 信息上很合理,但在记叙文不大行,因为上下文持续性有重要作用。

检索粒度常常取文档级,但也可引入问题本身来调整。学者提出HyDE,通过LLM把问题转为一个可能的答案文档(或许利用它的长度来选择细粒度?)

方法

LumberChunker

我们提出LumberChunker,它利用LLM动态分块。我们的方法基于 “动态分块更好地捕捉语义独立性 从而提高检索” 的原则。动态细粒度保证 文本块 有完整独立idea,增强…。

一个基于 “文本块越独立检索效果越好”的原则 的新的文本分块方法。独立性通过动态大小得以最好地实现。假定语言模型能够胜任文本分析工作,我们利用他们的能力来识别分割点(segementation points)。通过向LLM输入一组序列段落,自主确定最合适的分段点。

GitHub Logo

图1展示了LumberChunker的整体流程。首先将原docs按 段 分割,每个段通过 递增编号 唯一标识。 每个 段 依次被拼接成 一个名为Gi的 段组,直到其总token数超过预设阈值θ。该阈值是基于实证研究经验(详见5.1节)设定的。我们的目标是 1 将θ值设置足够大,以防分割掉相关的内容;2 设置足够小,以免过多上下文压垮模型,影响推理准确性。这些Gi 段组 输给LLM(Gemini 1.0-Pro),通过prompt提示模型识别出Gi中与前序上下文存在显著偏离的具体段落,从而分块。文档会以循环方式持续被分割成新块,每个新Gi片段组的起始点均取自前次迭代中确定的段落位置(也就是前一个Gi-1分割点后半段文本和Gi拼接形成真正的新Gi)。 使用的提示见附录B。

GutenQA

跳过

实验

最后更新于