LLMxMapReduce,通过模拟mapreduce的流程,对长上下文进行处理,论文效果超gpt4 、kimi等,通过模拟示例清晰地展示了整体的处理流程,这种处理方式可以用于rag问答,当召回内容较多时,可以更全面、更准确地利用召回内容,并给出答案。
1.背景
该方法的核心在于解决分割长文本时带来的两大挑战:跨区块依赖 (inter-chunk dependency) 和 跨区块冲突 (inter-chunk conflict) [cite: 5, 6, 65]。前者指相关证据分散在不同文本区块中,后者指不同区块包含相互矛盾的信息 [cite: 22, 23]。
LLM×MapReduce 框架通过两个关键创新机制来应对这些挑战:
-
结构化信息协议 (Structured Information Protocol) [cite: 7, 35]
为了解决“跨区块依赖”问题,该协议定义了在处理流程的各个阶段之间传递信息的标准格式 [cite: 35, 67]。当模型处理每个文本块时,它会生成一个包含四个部分的结构化输出 [cite: 72]:- 提取的信息 (Extracted Information):从当前区块中提取的与用户查询相关的关键事实 [cite: 72]。
- 基本原理 (Rationale):模型如何从提取的信息中推导出答案的分析过程,以减少后续阶段产生幻觉的风险 [cite: 73]。
- 答案 (Answer):针对该区块的中间答案 [cite: 74]。如果区块不包含相关信息,则输出“无信息”并被忽略 [cite: 75]。
- 置信度分数 (Confidence Score):一个1到5分的分数,反映模型对答案的信心以及信息的完整性 [cite: 76]。
-
上下文置信度校准 (In-Context Confidence Calibration) [cite: 7, 36]
为了解决“跨区块冲突”问题,该机制旨在统一不同文本块输出的置信度分数标准 [cite: 83]。它通过在提示(prompt)中向模型提供一套评分准则和典型示例,引导模型在处理不同区块时使用一致的标准来评估置信度 [cite: 87, 88, 89]。例如,文本明确支持的结论会被赋予高分,而模型自行推断的结论则获得中等分数 [cite: 92]。这使得最终聚合答案时,模型能够有效地权衡和解决来自不同区块的矛盾信息 [cite: 36, 86]。
2.LLM×MapReduce 的工作流程
该框架的工作流程包含三个主要阶段 [cite: 43]:
- 映射 (Map) 阶段:将长文档分割成多个小区块,然后使用一个LLM并行处理每个区块,按照“结构化信息协议”提取信息 [cite: 4, 44, 47]。
- 折叠 (Collapse) 阶段:这是一个可选步骤。如果从“映射”阶段生成的所有结果的总长度仍然超过LLM的上下文窗口,此阶段会将这些结果分组,并利用LLM进行压缩,直到其长度符合要求 [cite: 54, 55, 56]。
- 规约 (Reduce) 阶段:最后,另一个LLM会聚合来自前序阶段的所有结构化输出,利用校准后的置信度分数来解决冲突,并生成最终的综合性答案 [cite: 51, 59]。
通过这种方式,LLM×MapReduce 不仅使短上下文窗口的LLM能够有效处理极长的文本序列,而且实验证明,其在性能和效率上均优于现有的商业长文本模型和其他“分而治之”的框架 [cite: 8, 122, 155]。
个人认为,折叠阶段可以优化,可以判断每一个块的相似性,将相似的块融为一体
3.例子
假设有一个非常长的医疗文档(远超模型的上下文长度限制),用户提出的问题是:“患者 Jerry 的诊断结果和未来治疗建议是什么?” [cite: 41]。
3.1. 映射 (Map) 阶段
在此阶段,系统首先将长文档分割成多个小区块,然后利用 LLM 并行处理每个区块 [cite: 4, 17, 46]。
- 实例:
- 区块 5 的文本是:“…Jerry 对游泳充满热情,他渴望成为一名运动员 (wants to be an athlete)…” [cite: 97]。
- 区块 28 的文本是:“…诊断显示 Jerry 的韧带严重撕裂,这可能会阻碍他未来的运动生涯…”
- 区块 74 的文本是:“…尽管 Jerry 渴望成为运动员,但他从未学过下棋 (play chess)…” [cite: 100]。
LLM 会为每个区块生成一个结构化的“映射结果” [cite: 44, 47, 52]。
-
区块 5 的映射结果:
- 提取的信息: Jerry 想成为一名运动员 [cite: 72]。
- 基本原理: 文本明确指出 Jerry ‘渴望成为一名运动员’ [cite: 73]。
- 答案: Jerry 有志成为运动员 [cite: 74]。
- 置信度分数: 3.5分 (这是一个基于意愿的推断,而非既定事实) [cite: 76, 98]。
-
区块 28 的映射结果:
- 提取的信息: Jerry 韧带撕裂,可能影响运动生涯 [cite: 72]。
- 基本原理: 诊断结果直接指出了伤情及其潜在后果 [cite: 73]。
- 答案: Jerry 因韧带撕裂,其运动生涯可能受阻 [cite: 74]。
- 置信度分数: 5分 (这是基于文本的直接事实)。
-
区块 74 的映射结果:
- 提取的信息: Jerry 不会下棋 [cite: 72, 100]。
- 基本原理: 文本提到了下棋,但与患者诊断和治疗的核心问题无关 [cite: 73, 75]。
- 答案: 无信息 (NO INFORMATION) [cite: 75]。
- 置信度分数: 0分 [cite: 100]。
在此阶段,像区块74这样不包含问题相关信息的结果会被直接丢弃 [cite: 75]。
3.2. 折叠 (Collapse) 阶段
如果所有“映射结果”的汇总长度仍然太长,无法放入 LLM 的上下文窗口,系统就会启动此阶段 [cite: 54, 55]。
- 实例:
- 假设我们从100个区块中得到了100个映射结果,它们的总长度还是太长了 [cite: 54]。
- 系统会将这100个结果分成10组,每组包含10个结果 [cite: 56]。
- LLM 会再次处理每一组,将其压缩成一个单一的、结构相同的“折叠结果” [cite: 48, 56]。例如,包含区块5和区块28信息的一组,可能会被折叠成一个综合性的结果,指出“Jerry 想成为运动员,但因韧带撕裂面临挑战”,并给出一个综合性的高置信度分数。
- 迭代执行 (Iteration): 如果第一轮折叠后,所有“折叠结果”的总长度依然超过模型的上下文窗口 L,系统会重复执行折叠功能,直到其总长度缩减到 L 以内为止 [cite: 58]。
3.3. 规约 (Reduce) 阶段
这是最后一步,LLM 接收所有经过处理的(映射或折叠后的)结果,并生成最终答案 [cite: 59]。
- 实例:
-
“规约模型”接收了所有关键信息,包括:1) Jerry 想成为运动员(中等置信度)和 2) Jerry 韧带撕裂,影响运动生涯(高置信度) [cite: 51]。
-
模型会注意到这两个信息之间存在潜在的冲突或依赖(即愿望与现实的矛盾),这正是“跨区块冲突”和“跨区块依赖”的体现 [cite: 22, 23, 65]。 跨区块冲突指,假设另一个信息块中提到“十年前,Jerry的身体非常健康”,这与区块28发生了冲突,大模型能够解决这个冲突,忽略十年前的Jerry的“身体非常健康”,转而关注最近的“韧带撕裂”。跨区块依赖可以理解为,区块5和区块28,Jerry“韧带撕裂”和“想成为运动员”,二者具有依赖关系,可能对诊疗方案有影响(想成为运动员,诊疗方案一定要有所修改)
-
通过对比校准后的置信度分数,模型会更加依赖于“韧带撕裂”这个事实性信息来做出判断 [cite: 51, 86]。
-
最终,模型生成的答案可能是:“患者 Jerry 的诊断结果为韧带严重撕裂。尽管他有成为运动员的愿望,但基于其伤情,未来的治疗建议应侧重于康复治疗,并审慎评估其从事高强度运动的可行性。” [cite: 51, 59]。
-