为什么「上下文检索」是提升 RAG 系统问答准确度的关键?

为什么明明答案就在知识库里,但 AI 却无法准确回答?原因之一是由于 RAG 系统处理文档的方式。"文档切块"步骤导致丢失语义缺失、语义歧义或全局结构缺失,AI可能只看到了"局部信息",却忽略了"全局意义"。这正印证了莫拉维克悖论------对人类而言是基于直觉的语义衔接,对AI却是一个需要复杂计算的挑战。 针对这一问题,庖丁研究团队推出"上下文检索技术 "------ 突破性地让 AI 通过结构解析和语义重组跨越文档碎片,让 AI 能够像人类一样理解内容间的逻辑关系。实验结果表明,采用上下文检索的 RAG 系统在问答任务中的准确率平均提升了13.9%,无论是企业知识库检索,还是个人文档管理,都能获得更精准的答案。

1. 引言

1.1 什么是RAG

近年来,大语言模型(LLM)取得了飞跃式发展,在各类任务上展现出卓越的能力。然而,当这些通用模型被应用于特定业务场景时,其内在知识往往难以满足实际需求。

这主要在于大语言模型存在知识局限性------其知识来源于训练数据,而训练数据通常来自公开网络,难以涵盖最新信息、专有内容或长尾知识。因此,面对特定领域的应用需求,研究人员通常采用检索增强生成(Retrieval-Augmented Generation,以下简称 RAG)技术,为大模型引入相关的外部知识。

RAG 通过结合检索模型与生成模型,从私有或专有数据源中检索与用户问题相关的信息,并将其作为额外的上下文输入到大模型的提示词(prompt)中。这种方法有效弥补了模型知识的不足,使其能够生成更准确、更丰富的回答,从而显著提升在特定任务中的表现。

1.2 RAG的流程

与直接依赖大模型生成回答相比,RAG 系统引入检索机制以增强生成结果的准确性和专业性。为确保检索过程的高效性,RAG 在处理用户提问前需要进行数据准备,即对各类原始数据进行预处理,使其适用于检索任务,并存储在数据库中。通常,该阶段包括以下三个关键步骤:

  1. 文档解析:将各类知识文档转换为可供下游模型处理的文本数据。例如,PDF 等非结构化文档无法直接输入大模型,因此需要通过解析技术提取其中的段落、表格等信息,并转换为文本格式。
  2. 文本切块:将解析后的文本进一步拆分为较小的文本单元(文本块),以提高检索的粒度和精准度。通常,一个文本块的长度在数百字左右。
  3. 向量化:通过embedding模型将文本块转换为语义向量,并存储在向量数据库中,以支持后续的高效检索。

完成数据准备后,用户即可向 RAG 系统提交查询。RAG 在接收到用户请求后,会首先将用户提问转化为语义向量,并在向量数据库中检索语义相关的文本块。随后,系统通过重排模型对检索到的文本块进行进一步排序,筛选出最相关的内容。最终,系统将这些高相关性的文本块与用户提问一同构造提示词(prompt),并输入至大模型,生成最终的回答。

1.3 RAG的瓶颈在哪

在数据准备阶段的三个核心步骤中,"向量化"尤为受到研究者的关注。由于该步骤直接决定了检索的准确性,因此长期以来,如何训练更优的embedding模型一直是 RAG 相关研究的重点。随着技术的发展,当前最先进的embedding模型相比过去已经取得了显著进步,能够适应不同语言和领域的多样化需求。

然而,一个完美的embedding模型是否足以解决 RAG 系统面临的所有问题?实践表明,答案是否定的。

尽管更强的检索器确实能够提升 RAG 生成的回答质量,但在大多数任务场景下,单纯升级embedding模型的收益有限,且随着embedding模型的优化,性能提升逐渐趋于饱和。这表明,除了语义向量化,RAG 系统仍然受其它因素的制约。

在 RAG 的应用与实践中,我们发现长期被忽视的 "文档解析" 和 "文本切块" 这两个前置步骤,正逐渐成为影响 RAG 效果的关键瓶颈。如何优化这两个环节,以确保检索过程获取更完整、精准的语义信息,将是提升 RAG 回答质量的关键方向。

在《通过增强PDF结构识别,革新检索增强生成技术(RAG)》一文中,我们已经探讨了"文档解析"对RAG系统的影响,并提出了相应的优化方案。本文将重点分析"文本切块"在 RAG 系统中的作用及其潜在影响,并介绍一种上下文检索的方法,以应对"文本分块"带来的语义破坏问题,从而进一步提升RAG系统回答质量。

2. 文本切块对RAG的影响

2.1 语义缺失问题

当前主流的文本切块方法通常采用固定长度切分,即按照预设的字数或标点符号进行分割。这种简单的规则虽然易于实现,但在实际应用中可能会导致语义完整性受损。例如,原本紧密关联的多个段落可能会被拆分到不同的文本块中,造成信息割裂,影响检索效果。

《中华人民共和国民法典》第26页中的一段关于知识产权的法规为例:

ini 复制代码
第一百二十三条 【知识产权的定义】民事主体依法享有知识产权。
知识产权是权利人依法就下列客体享有的专有的权利:
(一)作品;
(二)发明、实用新型、外观设计;
(三)商标;
(四)地理标志;
(五)商业秘密;
(六)集成电路布图设计;
(七)植物新品种;
(八)法律规定的其他客体。
第一百二十四条 【继承权】自然人依法享有继承权。
自然人合法的私有财产,可以依法继承。
第一百二十五条 【投资性权利】民事主体依法享有股权和其他投资性权利。

在固定长度切块策略下,该片段可能被拆分为以下两个文本块:

ini 复制代码
<文本块1>
第一百二十三条 【知识产权的定义】民事主体依法享有知识产权。
知识产权是权利人依法就下列客体享有的专有的权利:
(一)作品;
(二)发明、实用新型、外观设计;
(三)商标;
(四)地理标志;
scss 复制代码
<文本块2>
(五)商业秘密;
(六)集成电路布图设计;
(七)植物新品种;
(八)法律规定的其他客体。
第一百二十四条 【继承权】自然人依法享有继承权。
自然人合法的私有财产,可以依法继承。
第一百二十五条 【投资性权利】民事主体依法享有股权和其他投资性权利。

🙋🏻‍♀️当用户提问:"根据知识产权的定义,哪些对象可以享有专有权利?"

在检索过程中,文本块 1 由于包含完整的条款标题,较容易被模型召回。文本块 2 中由于与条款标题分离,模型无法准确捕捉到文本块2的语义,难以被准确检索到。这将导致 RAG 生成模型仅依据文本块 1 进行回答,错误地认为权利人只对列出的前四点对象享有知识产权,从而遗漏关键信息,影响回答的完整性和准确性。

"这一示例表明:简单的固定长度切块方法可能会破坏语义连续性,导致信息检索不完整,从而影响 RAG 生成的质量。

2.2 语义歧义问题

除了信息丢失之外,文本切块还会导致文本块脱离原始文档的上下文,从而削弱语义的完整性和连贯性。 这种脱节可能引发语义误解,使得 RAG 系统在生成回答时出现歧义。

《深圳市前海一方恒融商业保理有限公司2024年度第二期华发优生活四号资产支持票据募集说明书》中第191页和654页的片段为例:

erlang 复制代码
[摘自文档第191页]
...(华发集团相关介绍)
截至2024年3月末,公司在职员工25,970人,员工结构如下:
公司职工专业构成情况表
| 员工类别               | 人数(人) | 占职工总人数的比例 |
|------------------------|------------|--------------------|
| 管理、专业及支持类人员 | 15,505     | 59.70%             |
| 技能操作类人员         | 10,465     | 40.30%             |
| 合计                   | 25,970     | 100.00%            |
[摘自文档654页]
...(华能信托相关介绍)
截至2023年末,公司拥有正式员工347人,其中硕士以上占比59.37%,平均年龄35 岁,其中产业博士10人、注册会计师61人,特许公认会计师12人,内地持证律师 42 人,美国持证律师3人,国际注册商业地产投资分析师1人。在业务开展过程中,公司不断寻求人才资源的合理配置,优化和整合组织架构,及时敏锐地对市场需求和变化做出反应,更好地满足市场需求、创新产品设计、创造市场价值。

在文本切块过程中,系统可能会将两家公司的员工数据切分成如下两个文本块:

erlang 复制代码
<文本块1>
截至2024年3月末,公司在职员工 25,970 人,员工结构如下:
公司职工专业构成情况表
| 员工类别               | 人数(人) | 占职工总人数的比例 |
|------------------------|------------|--------------------|
| 管理、专业及支持类人员 | 15,505     | 59.70%             |
| 技能操作类人员         | 10,465     | 40.30%             |
| 合计                   | 25,970     | 100.00%            |
xml 复制代码
<文本块2>
截至2023年末,公司拥有正式员工347人,其中硕士以上占比59.37%,平均年龄35 岁,其中产业博士10人、注册会计师61人,特许公认会计师12人,内地持证律师 42 人,美国持证律师3人,国际注册商业地产投资分析师1人。在业务开展过程中,公司不断寻求人才资源的合理配置,优化和整合组织架构,及时敏锐地对市场需求和变化做出反应,更好地满足市场需求、创新产品设计、创造市场价值。

可以看出,这两个文本块均包含"公司"这一指代词,但在原文中,文本块 1的"公司"指华发集团,而文本块 2 的"公司"指华能信托。然而,文本切块后,这一指向信息丢失,使得两个文本块的文本信息无法准确表达原始语义。

🙋🏻‍♀️当用户提问:"华能信托有多少员工?"

两个文本块均缺失"华能信托"的相关信息难以被召回,即使召回了这两个文本块,而大模型在缺乏上下文的情况下,很难正确区分"公司"指代的对象,导致可能生成错误或含糊的回答。

"这一示例表明:文本切块不仅可能导致信息缺失,还可能因语境断裂引发语义歧义,从而影响检索和生成的准确性。

2.3 全局结构问题

在许多情况下,用户的查询不仅涉及具体内容,还需要依赖文档的结构信息。 然而,文本切块会破坏文档的原始层次关系,使得每个文本块仅包含局部信息,难以反映全局结构。这一问题可能导致检索模型无法正确召回相关内容,或者大模型难以准确理解文本块之间的关系。

以下是《互联网保险业务监管办法》第3至8页关于第二章的部分内容:

shell 复制代码
## 第二章 基本业务规则
### 第一节 业务条件
...

### 第二节 销售管理
第十一条:保险机构开展互联网保险业务,应加强销售管理,充分进行信息披露,规范营销宣传行为,优化销售流程,保护消费者合法权益。
第十二条:开展互联网保险业务的保险机构应建立官方网站...(十)银保监会规定的其他内容。
第十三条:保险机构应在开展互联网保险业务的...(七)银保监会规定的其他内容。
第十四条:互联网保险产品的销售...(七)其他直接影响消费者权益和购买决策的事项。
第十五条:本办法所称互联网保险营销宣传...(八)保险机构应对本机构及所属从业人员互联网保险营销宣传承担合规管理的主体责任。

文本切块后,第二章第二节的内容可能被划分为以下多个文本块:

shell 复制代码
<文本块1>

### 第二节 销售管理
第十一条:保险机构开展互联网保险业务,应加强销售管理,充分进行信息披露,规范营销宣传行为,优化销售流程,保护消费者合法权益。
第十二条:开展互联网保险业务的保险机构应建立官方网站...(十)银保监会规定的其他内容。
xml 复制代码
<文本块2>

第十三条:保险机构应在开展互联网保险业务的...(七)银保监会规定的其他内容。
xml 复制代码
<文本块3>

第十四条:互联网保险产品的销售...(七)其他直接影响消费者权益和购买决策的事项。
xml 复制代码
<文本块4>

第十五条:本办法所称互联网保险营销宣传...(八)保险机构应对本机构及所属从业人员互联网保险营销宣传承担合规管理的主体责任。

🙋🏻‍♀️当用户提问:"请总结本规定的第二章第二节。"

由于文本块缺少"第二章"的层级标识,检索模型很难将所有相关文本块召回。即便部分文本块被检索到,大模型也无法明确这些内容属于"第二章第二节",从而可能生成错误或不完整的回答。

"这一示例表明:文本切块可能导致文档的层次信息丢失,使得 RAG 系统难以理解和组织内容。

3. 已有的方案

目前,一些研究已经关注到文本切块带来的问题,并提出了相应的解决方案。本章将介绍其中几种典型的方法。

3.1 文本块聚类总结

在论文《RAPTOR:Recursive Abstract Processing for Tree-Organized Retrieval》中,作者提出了一种基于文本块聚类的解决方案,以应对单一文本块缺乏全局信息的问题。

该方法首先使用聚类算法对切分后的文本块进行语义聚类,然后通过大模型对每个聚类的多个文本块生成总结。最终,这些文本块和生成的总结被组织成树状结构,其中树的高层节点代表多个文本块的内容总结,底层节点则是具体的文本块。当用户提出问题时,检索器将从树的高层节点开始,按自顶向下的方式查找相关文本块。

这种方法在一些测试数据上取得了较好的效果,能够有效聚合相关内容并提升查询的准确性。然而,实际应用中,该方法受限于树状结构带来的效率问题,构建树状结构需要对多个文本块进行聚类和总结,过程复杂且计算量大,导致运行效率较低,难以运用在大规模文档场景下。此外,针对实际业务场景中复杂文档的文本块聚类效果仍需进一步评估。

3.2 文本块语义补充

鉴于文本块聚类总结方法在实际应用中存在效率瓶颈,当前的实践更倾向于采用文本块语义补充的策略。

Anthropic 团队在其blog中提出了一种基于长上下文大模型的语义补充方法(www.anthropic.com/news/contex...),以增强文本块的完整性和可理解性。具体而言,该方法首先将每个文本块与全文一同输入到长上下文大模型中,利用模型对全文信息的理解,补充当前文本块的上下文,从而使其语义更加完整,避免歧义。

举例来说,在前文提到的《中华人民共和国民法典》中,经过文本切块后,文本块2中的知识产权相关条款信息与条款标题分离,导致语义不完整。

我们使用Anthropic提供的代码,并通过Claude 3.5模型对文本块2进行语义补充,补充后的文本块2内容如下:

scss 复制代码
<文本块2>

*本部分是《民法典》第一编《总则》第一章《基本规定》的一部分,特别是在讨论民事权利的部分。详细阐述了知识产权的种类,明确了民事主体的继承权和投资权。*

(五)商业秘密;
(六)集成电路布图设计;
(七)植物新品种;
(八)法律规定的其他客体。
第一百二十四条 【继承权】自然人依法享有继承权。
自然人合法的私有财产,可以依法继承。
第一百二十五条 【投资性权利】民事主体依法享有股权和其他投资性权利。

可以发现:大模型能够根据全文信息推理出文本块2的条款属于知识产权的内容,并将这一补充信息加入文本块的前方,从而完善了文本块的语义。

🙋🏻‍♀️当用户提问:"根据知识产权的定义,哪些对象可以享有专有权利?"

由于补全后的文本块2中提及了"知识产权种类"这一信息,RAG系统能够召回该内容并正确返回答案。 然而,如果我们仔细检查大模型所添加的上下文信息,就会发现上例中模型添加的上下文信息并不完全正确。文本块2的内容实际上属于《民法典》的第一编第五章《民事权利》,而非第一章《基本规定》。

这一现象表明,大模型在进行语义补充时,可能会出现一定的事实错误。

同样,在《互联网保险业务监管办法》的例子中,使用该方法对文本块2进行上下文补充后,结果如下:

markdown 复制代码
<文本块2>

*第二章 基本业务规则 - 第一节 业务条件 - 信息披露要求:本条规定了保险机构在互联网保险业务自营网络平台上应当显著位置列明的信息内容,是规范互联网保险业务信息透明度和消费者权益保护的具体要求。*

第十三条:保险机构应在开展互联网保险业务的...(七)银保监会规定的其他内容。

实际上,这部分内容属于"第二章 基本业务规则 - 第二节 销售管理"。大模型的补充内容引入了错误,反而降低了RAG系统回答"请总结本规定的第二章第二节"这类问题的准确性。

此外,当我们尝试使用该方法对《深圳市前海一方恒融商业保理有限公司2024年度第二期华发优生活四号资产支持票据募集说明书》进行文本切块和上下文补充时,我们发现该文档的长度已达到500k tokens,远远超出了Claude 3.5模型最大输入长度200k tokens的限制。这表明,该方法在处理超长文档时面临困难,而这类长文档在金融领域尤为常见。

除了上述可能存在的问题之外,许多时候,文本块中丢失的语义也很难通过几句简短的语句来补充。 为进一步测试语义补全的效果,我们在《小学生满分作文集》文档上进行了实验。该作文集包含了大量学生的作文,每篇作文通常包括标题、作者姓名、文章主题和老师的点评。以下为该作文集第90页到91页的一段节选:

markdown 复制代码
2. 过渡巧妙:文章在描写故事发展情节的时候,使用的承上启下的过渡语句自然得当,巧妙承接了"我"各个时段的活动内容。
自信胶囊
钱 枫
坐在回国的超级飞行器上,我感觉好极了。因为这次我带回了新发明的产品---"自信胶囊"。
 ...(此处省略文章中间部分)
一、销售地:中国。使用人群:高三学生。使用情况:某重点学校300人临近高考,心理压力太大,失去了自信。他们各买"自信胶囊"一瓶(30粒),高考前一个月,每天服用一粒,变得信心十足,成绩突飞猛进,高考获得了好成绩,100%考进了一本。
二、销售地:中国。使用人群:足球运动员。使用情况:中国国家足球队队员普遍失去了自信,士气低沉,经服用"自信胶囊",队员精神面貌发生了巨大变化,球队实力大幅提高,在世界杯的比赛中,已进入决赛,夺冠呼声最高。
多方面的反馈证明,我们发明的"自信胶囊"效果显著,对身体没有任何副作用,获得使用者一致好评。大家一致认为:"自信胶囊"的发明,给全世界带来了福音。
带着人们赠送的鲜花,我登上了回总部的飞行器。可飞行器飞着飞着,突然剧烈地抖动起来......就在它往大海栽去的时候,我突然醒了过来。原来,这一切都是一个梦啊!
名师点评
1. 主题突出:小作者紧紧围绕"自信胶囊"展开描写,重点介绍发明它的原因及其作用,主题鲜明。
2. 想象精彩:小作者在现实生活的基础上进行合理想象,令人惊叹"自信胶囊"的巨大作用,也惊叹小作者丰富的想象力。

在文本切块阶段,钱枫的作文被切分在以下两个文本块中:

markdown 复制代码
<文本块1>

 2. 过渡巧妙:文章在描写故事发展情节的时候,使用的承上启下的过渡语句自然得当,巧妙承接了"我"各个时段的活动内容。
自信胶囊
钱 枫
坐在回国的超级飞行器上,我感觉好极了。因为这次我带回了新发明的产品---"自信胶囊"。
 ...(此处省略文章中间部分)
飞行器着陆后,我顾不上休息,立即召开新闻发布会,开始试销。才一天时间,带回来的一千盒"自信胶囊"就销售一空。一个月后,产品使用情况汇总到了我们总部:
markdown 复制代码
<文本块2>

一、销售地:中国。使用人群:高三学生。使用情况:某重点学校300人临近高考,心理压力太大,失去了自信。他们各买"自信胶囊"一瓶(30粒),高考前一个月,每天服用一粒,变得信心十足,成绩突飞猛进,高考获得了好成绩,100%考进了一本。
二、销售地:中国。使用人群:足球运动员。使用情况:中国国家足球队队员普遍失去了自信,士气低沉,经服用"自信胶囊",队员精神面貌发生了巨大变化,球队实力大幅提高,在世界杯的比赛中,已进入决赛,夺冠呼声最高。
多方面的反馈证明,我们发明的"自信胶囊"效果显著,对身体没有任何副作用,获得使用者一致好评。大家一致认为:"自信胶囊"的发明,给全世界带来了福音。
带着人们赠送的鲜花,我登上了回总部的飞行器。可飞行器飞着飞着,突然剧烈地抖动起来......就在它往大海栽去的时候,我突然醒了过来。原来,这一切都是一个梦啊!
名师点评
1. 主题突出:小作者紧紧围绕"自信胶囊"展开描写,重点介绍发明它的原因及其作用,主题鲜明。
2. 想象精彩:小作者在现实生活的基础上进行合理想象,令人惊叹"自信胶囊"的巨大作用,也惊叹小作者丰富的想象力。

使用该方法对文本块进行补全,Claude 3.5分别为这两个文本块进行了生成了如下补全内容:

markdown 复制代码
<文本块1>

*这是《小学生满分作文》一书中"想象篇"章节的一篇科幻类作文,属于学生优秀作文范例,展现了小学生丰富的想象力和对未来科技的创意思考。*

 2. 过渡巧妙:文章在描写故事发展情节的时候,使用的承上启下的过渡语句自然得当,巧妙承接了"我"各个时段的活动内容。
自信胶囊
钱 枫
坐在回国的超级飞行器上,我感觉好极了。因为这次我带回了新发明的产品---"自信胶囊"。
 ...(此处省略文章中间部分)
 飞行器着陆后,我顾不上休息,立即召开新闻发布会,开始试销。才一天时间,带回来的一千盒"自信胶囊"就销售一空。一个月后,产品使用情况汇总到了我们总部:
markdown 复制代码
<文本块2>

*这一段摘自《小学生满分作文》一书中"想象篇"章节,描述了一种虚构的"自信胶囊"在高考学生和足球运动员中的使用效果,最后以梦醒收尾,体现了作者丰富的想象力和对自信的思考。* 

一、销售地:中国。使用人群:高三学生。使用情况:某重点学校300人临近高考,心理压力太大,失去了自信。他们各买"自信胶囊"一瓶(30粒),高考前一个月,每天服用一粒,变得信心十足,成绩突飞猛进,高考获得了好成绩,100%考进了一本。
二、销售地:中国。使用人群:足球运动员。使用情况:中国国家足球队队员普遍失去了自信,士气低沉,经服用"自信胶囊",队员精神面貌发生了巨大变化,球队实力大幅提高,在世界杯的比赛中,已进入决赛,夺冠呼声最高。
多方面的反馈证明,我们发明的"自信胶囊"效果显著,对身体没有任何副作用,获得使用者一致好评。大家一致认为:"自信胶囊"的发明,给全世界带来了福音。
带着人们赠送的鲜花,我登上了回总部的飞行器。可飞行器飞着飞着,突然剧烈地抖动起来......就在它往大海栽去的时候,我突然醒了过来。原来,这一切都是一个梦啊!
名师点评
1. 主题突出:小作者紧紧围绕"自信胶囊"展开描写,重点介绍发明它的原因及其作用,主题鲜明。
2. 想象精彩:小作者在现实生活的基础上进行合理想象,令人惊叹"自信胶囊"的巨大作用,也惊叹小作者丰富的想象力。

尽管大模型为文本块提供了上下文补充,但补全的内容相对空泛,缺乏更为详细的细节。

🙋🏻‍♀️当用户提问:"老师对钱枫的作文点评是怎样的?"

包含答案的文本块2经过补全后,仍然没有指出"该点评是对钱枫作文的点评",因此难以被embedding模型召回,导致RAG系统依然无法正确回答。

这个案例说明:尽管上下文补充能在某些情况下帮助恢复部分信息,但仍存在无法覆盖文本块之间语义连接的情况,在更为复杂的应用场景中,这一问题尤为突出。

综上所述,尽管该方法在某些场景下能够有效提升文本块的语义完整度,但它存在显著的局限性:

  • 计算成本高: 该方法需要将每个文本块与其全文一同输入大模型进行处理,这对于大规模文档来说计算开销极高,难以在实际应用中大规模推广。
  • 适用范围有限: 该方法主要针对简单的语义缺失问题,但对于更复杂的语义破碎、文章层级等问题(如段落之间的逻辑关联、细粒度的语义信息),大模型的补全能力仍然有限,难以保证文本块语义的完整性和正确性。

4. 上下文检索

为解决文本切分带来的信息丢失、语义歧义问题,当前已有的方法主要采用大模型补全、扩展文本块内容,而忽略了运行的效率、使用的成本以及大模型在语义补全任务上表现不佳等问题。

为此,我们提出了一种新型的上下文检索方法:该方法通过长上下文重排模型同时对大量文本块进行重排,让文本块在重排阶段获取上下文信息;并通过目录结构模型识别文档的章节目录树,在切分的文本块前加入对应的章节目录,确保文本块的全局信息。 有了这两个模块,我们在保证运行效率的同时,极大地提升了RAG系统的效果。

4.1 破镜重圆:长上下文重排

通常,当前主流的重排模型是逐一将每个文本块和用户提问输入模型,通过评估每个文本块与提问的语义相似度进行排序。正如下图左侧所示,假设embedding模型召回了n个文本块,传统的重排模型会将每个文本块与用户提问独立输入重排模型,通过n次独立评分,计算得到每个文本块与用户提问的相似度分数。

在这种模式下,由于n次输入相互独立,模型每次评分时只能"看到"一个文本块。加之文本切块带来的语义缺失和歧义等问题,这种重排方式往往无法准确捕捉文本块之间的关系。

为此,我们设计了一种长上下文重排模型,旨在同时输入多个检索到的文本块,让重排模型能够"看到"多个文本块的内容。 如下图右侧所示,长上下文重排模型首先将检索到的n个文本块按照其在原文中的顺序进行拼接,形成一段语义连贯的长文本,再将这段长文本与用户提问一起输入模型。

传统的重排方式 vs 长上下文重排方式

这样,模型仅需一次输入便能计算出n个文本块与用户提问的相似度分数。在这种重排模式下,多个文本块作为一个整体输入到模型,它们可以相互补充在文本切块过程中丢失的语义,使模型能够基于更完整的上下文进行重排决策。当输入的文本块数量足够大时,输入重排模型的内容能够基本还原出原文档的语境,就像在文档切块阶段被打碎的一面镜子,在重排阶段又被重新拼凑回来。

为了让这面镜子拼凑得更好,我们希望在embedding检索阶段尽可能将连续的文本块一同召回,为此,在文本切分阶段,我们选择了一种"Overlap Chunk"的方法,具体来说,我们按照每800个tokens的长度对文本进行切分,并让相邻的两个文本块重叠400个tokens。

我们发现:在这种切分方式下,由于相邻文本块存在一段重叠的文本,进而使得检索模型对相邻文本块计算得到的相似分数更为接近,更容易将连续文本块一起召回。在召回大量连续文本块后,我们根据文本块在原文中的顺序进行排序,并将其输入长上下文重排模型,从而确保重排阶段能够为文本块提供更加完整的语义信息。

下面以之前提到的 "根据知识产权的定义,哪些对象可以享有专有权利?" 这个问题为例,来说明长上下文重排如何有效解决文本切块带来的语义缺失问题。

ini 复制代码
<文本块A>

第一百二十三条 【知识产权的定义】民事主体依法享有知识产权。
知识产权是权利人依法就下列客体享有的专有的权利:
(一)作品;
(二)发明、实用新型、外观设计;
(三)商标;
(四)地理标志;
scss 复制代码
<文本块B>

(五)商业秘密;
(六)集成电路布图设计;
(七)植物新品种;
(八)法律规定的其他客体。
第一百二十四条 【继承权】自然人依法享有继承权。
自然人合法的私有财产,可以依法继承。
第一百二十五条 【投资性权利】民事主体依法享有股权和其他投资性权利。

对于文本块A和文本块B,传统的重排模型分别对文本块A和文本块B与问题 "根据知识产权的定义,哪些对象可以享有专有权利?" 进行相似度计算时,由于文本块B不直接包含与知识产权相关的内容,文本块B会获得较低的相关性分数,从而被舍弃。

而长上下文重排模型能够同时获取文本块A和文本块B的内容,并结合语义,知道文本块B的前三条内容是文本块A内容的延续,能够同时让文本块A和文本块B获取较高的相似度分数,从而弥补了之前文本切块带来的问题。

同样,对于之前提到的《小学生满分作文集》这一例子,长上下文重排模型也能够很好地解决。

markdown 复制代码
<文本块1>

 2. 过渡巧妙:文章在描写故事发展情节的时候,使用的承上启下的过渡语句自然得当,巧妙承接了"我"各个时段的活动内容。
自信胶囊
钱 枫
坐在回国的超级飞行器上,我感觉好极了。因为这次我带回了新发明的产品---"自信胶囊"。
 ...(此处省略文章中间部分)
markdown 复制代码
<文本块2>

一、销售地:中国。使用人群:高三学生。使用情况:某重点学校300人临近高考,心理压力太大,失去了自信。他们各买"自信胶囊"一瓶(30粒),高考前一个月,每天服用一粒,变得信心十足,成绩突飞猛进,高考获得了好成绩,100%考进了一本。
二、销售地:中国。使用人群:足球运动员。使用情况:中国国家足球队队员普遍失去了自信,士气低沉,经服用"自信胶囊",队员精神面貌发生了巨大变化,球队实力大幅提高,在世界杯的比赛中,已进入决赛,夺冠呼声最高。
多方面的反馈证明,我们发明的"自信胶囊"效果显著,对身体没有任何副作用,获得使用者一致好评。大家一致认为:"自信胶囊"的发明,给全世界带来了福音。
带着人们赠送的鲜花,我登上了回总部的飞行器。可飞行器飞着飞着,突然剧烈地抖动起来......就在它往大海栽去的时候,我突然醒了过来。原来,这一切都是一个梦啊!
名师点评
1. 主题突出:小作者紧紧围绕"自信胶囊"展开描写,重点介绍发明它的原因及其作用,主题鲜明。
2. 想象精彩:小作者在现实生活的基础上进行合理想象,令人惊叹"自信胶囊"的巨大作用,也惊叹小作者丰富的想象力。

传统的重排模型分别对文本块1和文本块2与问题 "老师对钱枫的作文点评是怎样的?" 进行相似度分数计算,由于文本块2与前文分离,模型无法确定文本块2中的点评对象是钱枫,因此文本块2会获得较低的相似度分数。

相比之下,长上下文重排模型能够将文本块1和文本块2的信息结合起来,从而识别出文本块2的点评对象是钱枫,并为其分配更高的相似度分数。

"由此可见:长上下文重排的方式确保了模型能够更准确地理解上下文,提升了答案的准确性和完整性。

4.2 全文视角:融合目录结构

针对第二节提到的"语义缺失"和"语义歧义"问题,长上下文重排方法可以较为有效地进行处理。然而,对于第三类问题,即文档结构信息的丧失,长上下文重排依然难以达到理想效果。

由于文本切块破坏了文档的全局结构,当用户提问类似"请总结本文的第三章第二节"这样需要依赖文档结构的查询时,embedding模型往往难以完整召回与"第三章第二节"相关的文本块,导致后续的上下文重排无法提供良好的结果。

为了解决这一问题,我们训练了目录结构模型。该模型能够在文档解析阶段,根据文档中的文字和图像信息识别出文档的章节目录树。

章节目录树是一种层次化结构,展示了文档各章节及其子章节的组织方式,帮助明确文档框架并便于定位和引用特定内容。它通常以树形结构呈现,其中根节点表示文档的整体内容,每个分支节点代表一个章节或小节,从而形成清晰的层次结构。

以前文提到的《互联网保险业务监管办法》,模型识别的目录树如下:

markdown 复制代码
根节点:互联网保险业务监管办法
│
├── 第一章 总则
│
├── 第二章 基本业务规则
│   ├── 第一节 业务条件
│   └── 第二节 销售管理
│   └── 第三节 服务管理
│   └── 第四节 运营管理
│
└── 第三章 特别业务规则
    ├── 第一节 互联网保险公司
    └── 第二节 保险公司
    └── 第三节 保险中介机构
    ...

利用章节目录树清晰显示文档的层级结构这一优势,在文本切块阶段,我们结合章节目录树进一步优化切块策略------仅对同一目录结构下的文本进行切块。

这种方式保证了不同章节或小节的文本不会被切分到同一个文本块中,从而提升了文本块的主题一致性,并有助于提高文本块语义向量的质量。在文本切块完成后,我们会对每个文本块进行后处理,将其对应的目录链信息加入到文本块的前面,从而保留文本块的全局结构信息。

我们以2.3节提到的《互联网保险业务监管办法》切块为例,展示采用该策略后的切块效果。

在使用了上述切分策略后,第二章第二节切分的文本块内容将如下所示:

shell 复制代码
<文本块1>

## 第二章 基本业务规则
### 第二节 销售管理

第十一条 保险机构开展互联网保险业务,应加强销售管理,充分进行信息披露,规范营销宣传行为,优化销售流程,保护消费者合法权益。
第十二条 开展互联网保险业务的保险机构应建立官方网站,...(十)银保监会规定的其他内容。
shell 复制代码
<文本块1>

## 第二章 基本业务规则
### 第二节 销售管理

第十一条 保险机构开展互联网保险业务,应加强销售管理,充分进行信息披露,规范营销宣传行为,优化销售流程,保护消费者合法权益。
第十二条 开展互联网保险业务的保险机构应建立官方网站,...(十)银保监会规定的其他内容。
shell 复制代码
<文本块3>

## 第二章 基本业务规则
### 第二节 销售管理

第十四条:互联网保险产品的销售...(七)其他直接影响消费者权益和购买决策的事项。
shell 复制代码
<文本块4>

## 第二章 基本业务规则
### 第二节 销售管理
第十五条:本办法所称互联网保险营销宣传...(八)保险机构应对本机构及所属从业人员互联网保险营销宣传承担合规管理的主体责任。

🙋🏻‍♀️当用户提问:"请总结本文规定的第二章第二节。"

由于每个文本块都包含了"第二章第二节"的目录信息,相关的文本块可以被检索器准确召回,大模型也能理解每个文本块在原文中的层次结构。

因此,结合目录结构的切块策略,为每个文本块保留了文档的全局信息,从而为生成更精确的回答提供了有力支持。

5. 实验测试

我们将上下文检索方法应用于RAG系统,并在DocBench、FinanceBench以及我们从真实业务场景中收集并标注的ContextualBench上进行评估。评估涵盖了来自金融、学术、政务、法律等领域的342个文档和1495个问题。

我们使用GPT-4对RAG系统的回答与人工标注的标准答案进行比较,并为RAG系统的回答准确性与完整度评分。为确保评分的公正性与准确性,我们在评测的提示词中详细说明了评估流程:

  1. 对于每个问题,模型首先根据标准答案的长度将问题分为"短答案问题"和"长答案问题"
  2. 对于简短回答问题,要求模型判断关键细节(如数字、特定名词/动词、日期等)是否与标准答案一致。如果答案完全正确,评分为3分;如果答案错误,则评分为0分。
  3. 对于详细回答问题,模型的回答可能使用不同的措辞,但必须传达相同的意思,并包含与标准答案相同的关键信息: A.如果答案完整且准确,涵盖所有关键信息,评分为3分; B.如果答案准确,但缺少少量关键信息(覆盖至少70%的关键信息),评分为2分; C.如果答案基本正确,但缺少较多关键信息(覆盖至少30%的关键信息),评分为1分; D.如果答案不准确,缺少过多关键信息(覆盖不到30%的关键信息),评分为0分。

我们要求每个模型对每个问题输出0、1、2、3四种分数。最终的准确率是通过将所有问题的评分总和除以总评分的最大值(即3乘以问题总数)来计算的。完整的评测提示词如下:

vbnet 复制代码
### Task Overview:
You are tasked with evaluating user answers based on a given question and reference answer. Your goal is to assess the correctness of the user answer using a specific scoring metric.

### Evaluation Criteria:
1. The scoring system consists of four levels: 3 points, 2 points, 1 point, and 0 points.
2. Questions are divided into two categories: Short Answers and Long Answers.
3. If there is a factual error in the user's answer, it should automatically receive 0 points.
4. **Short Answers/Directives**: Ensure that key details such as numbers, specific nouns/verbs, and dates match those in the reference answer. If the answer is correct, give 3 points; if incorrect, give 0 points.
5. **Long Answers/Abstractive**: The user's answer may use different wording but must convey the same meaning and include the same key information as the reference answer to be considered correct. 
   - If the content is correct and all key points are present, give 3 points.
   - If the content is correct but missing a few key points (covering at least 70% of the key points), give 2 points.
   - If the content is correct but missing several key points (covering at least 30% of the key points), give 1 point.
   - If the content is incorrect or missing too many key points (covering less than 30% of the key points), give 0 points.

### Evaluation Process:
1. Identify the type of question.
2. Apply the appropriate evaluation criteria.
3. Compare the user's answer with the reference answer.
4. Assign a score of 0, 1, 2, or 3. You should output only the score, without any additional words.

**Note**: If the user answer is "0" or an empty string, it should automatically receive a score of 0.

---

**Question**: {{question}}  
**User Answer**: {{sys_ans}}  
**Reference Answer**: {{ref_ans}}

### Evaluation Form (score ONLY):
- **Correctness**:

在模型完成评分后,我们抽取了100个问题,由两位标注人员进行人工评估,并将模型评分与人工评分进行对比。

我们认为,若人工评分与模型评分之间的差距在1分以内,则视为一致。评估结果表明,模型与人工评分的一致性分别为97%和94%,这进一步验证了GPT-4模型在评测任务中的表现,达到与人类评分相同的水平,能够准确反映人类的评分偏好。

基于上述评测方法,我们对标准RAG、融合目录结构的RAG以及同时采用目录结构和上下文重排模型的RAG进行了系统性评估与对比分析。

实验结果表明:相较于传统的固定长度分块策略,引入文档目录结构的文本分块策略在所有评测集上均展现出显著的性能提升,问答准确率平均提升4.8个百分点。进一步研究发现,在目录结构分块的基础上引入上下文重排机制能够充分发挥RAG的潜力,与标准RAG相比,同时采用目录结构和上下文重排模型的RAG在问答准确率上实现了13.9个百分点的显著提升。

值得注意的是,上下文重排机制在应对复杂提问时表现出更强的性能优势:在问题相对简单的DocBench数据集上,改进效果稳定;而在包含大量金融领域专业提问的FinanceBench数据集上,由于问题复杂度较高,上下文重排机制带来的提升尤为显著,达到了16.3个百分点,这一发现充分验证了上下文重排机制在处理复杂领域问题时的有效性。

6. 结论

通过大量RAG实践,我们发现数据向量化的前置步骤------"文本切块"会破坏原始文档的语义连贯性,导致文本块存在语义缺失、歧义以及缺乏全局信息等问题,这些问题成为影响RAG系统准确生成的关键因素。

为了解决这类问题,我们提出了一种新型的上下文检索策略。通过引入长上下文重排模型,确保模型在重排阶段能够获得足够的上下文信息,从而有效恢复文档的语义完整性。同时,采用目录结构模型为文本块提供全局信息。我们在多个数据集上的实验验证了结合上下文检索的RAG系统的有效性。实验结果表明,结合上下文检索的RAG系统问答准确率平均提高了13.9%。

未来,我们将继续优化上下文检索策略,并探索其在更多实际场景中的应用潜力。

参考文献

1\] 北京庖丁科技有限公司. 通过增强PDF结构识别,革新检索增强生成技术(RAG).[mp.weixin.qq.com/s/JJHlJsWEq...](https://link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FJJHlJsWEqFG77LdzhvzDNw%2C2024 "https://mp.weixin.qq.com/s/JJHlJsWEqFG77LdzhvzDNw,2024"). \[2\] Sarthi P, Abdullah S, Tuli A, et al. Raptor: Recursive abstractive processing for tree-organized retrieval\[C\]//The Twelfth International Conference on Learning Representations. 2024. \[3\] Anthropic. Introducing Contextual Retrieval.[www.anthropic.com/news/contex...](https://link.juejin.cn?target=https%3A%2F%2Fwww.anthropic.com%2Fnews%2Fcontextual-retrieval%2C2024 "https://www.anthropic.com/news/contextual-retrieval,2024"). \*本文提到的所有PDF文件均可在此链接中查看或下载:[docs.qq.com/doc/DVHpNSm...](https://link.juejin.cn?target=https%3A%2F%2Fdocs.qq.com%2Fdoc%2FDVHpNSmNNVVFnc3Jx "https://docs.qq.com/doc/DVHpNSmNNVVFnc3Jx") 也欢迎联系庖丁咨询顾问,了解 ChatDOC 企业级知识库解决方案。 ### 往期推荐 如果你想要了解更多关于庖丁科技的文档智能解决方案,欢迎阅读: [用 ChatDOC 读 PDF 有什么不一样?](https://link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg4ODA2NDMzMw%3D%3D%26mid%3D2247502188%26idx%3D1%26sn%3Df0f82964ce41bd5bd824bcb7043bad91%26scene%3D21%23wechat_redirect "https://mp.weixin.qq.com/s?__biz=Mzg4ODA2NDMzMw==&mid=2247502188&idx=1&sn=f0f82964ce41bd5bd824bcb7043bad91&scene=21#wechat_redirect") [ChatDOC接入DeepSeekR1,让模型思考与答案来源都变得有迹可循](https://link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg4ODA2NDMzMw%3D%3D%26mid%3D2247502467%26idx%3D1%26sn%3D5a49681accc722707bf6f59985039556%26scene%3D21%23wechat_redirect "https://mp.weixin.qq.com/s?__biz=Mzg4ODA2NDMzMw==&mid=2247502467&idx=1&sn=5a49681accc722707bf6f59985039556&scene=21#wechat_redirect") [通过增强PDF结构识别,革新检索增强生成技术(RAG)](https://link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg4ODA2NDMzMw%3D%3D%26mid%3D2247499360%26idx%3D1%26sn%3D7f578d217699fabba9d56e29354ce065%26scene%3D21%23wechat_redirect "https://mp.weixin.qq.com/s?__biz=Mzg4ODA2NDMzMw==&mid=2247499360&idx=1&sn=7f578d217699fabba9d56e29354ce065&scene=21#wechat_redirect")

相关推荐
一 乐2 小时前
民宿|基于java的民宿推荐系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·源码
weixin_985432112 小时前
Spring Boot 中的 @ConditionalOnBean 注解详解
java·spring boot·后端
猎人everest2 小时前
快速搭建运行Django第一个应用—投票
后端·python·django
美林数据Tempodata3 小时前
大模型驱动数据分析革新:美林数据智能问数解决方案破局传统 BI 痛点
数据库·人工智能·数据分析·大模型·智能问数
野槐3 小时前
node.js连接mysql写接口(一)
数据库·mysql
Zzzone6834 小时前
PostgreSQL日常维护
数据库·postgresql
chxii4 小时前
1.13使用 Node.js 操作 SQLite
数据库·sqlite·node.js
冰刀画的圈4 小时前
修改Oracle编码
数据库·oracle
这个胖子不太裤4 小时前
Django(自用)
数据库·django·sqlite
麻辣清汤4 小时前
MySQL 索引类型及其必要性与优点
数据库·mysql