用 RAG 注入外部知识来修旧文档:ARI 框架解读
- 关联论文:2607.21936
- 作者:flyP
- 更新:2026-07-28
一句话结论
把检索增强生成(RAG)接到大语言模型(LLM)上做历史文档缺字补全,比纯掩码语言建模(Masked LM)更擅长恢复依赖外部历史知识的命名实体,作者把这套框架命名为 ARI。
解决什么真问题
历史文档(古书、地方志、族谱、行政档案)由于纸张糟朽、虫蛀、墨迹剥落,经常出现字符残缺。在数字化与"可用化"过程中,"缺字补全"几乎是第一步——下游的检索、问答、可视化都依赖完整文本。传统修复路线主要有两条:
- 掩码语言建模(Masked LM)路线:把残缺处 mask 掉,让模型根据上下文填空。这条路线对普通字词很稳,但遇到需要历史背景才能确定的人名、地名、官职、年号时,会猜错或瞎编(hallucination)。
- 规则 + 词典匹配路线:维护实体词典硬匹配。维护成本高、覆盖窄、遇到没见过的实体直接失效,遇到字形变体也基本失效。
ARI 抓住的核心矛盾很朴素:补全任务的"局部上下文"信息量不够——人名背后的典故、年号对应的年表、地名在不同时期的归属、官职变迁、家族谱系关系,这些信息本来就不在残页里,全靠模型的内置先验撑不住。Masked LM 没有外部世界知识,LLM 的世界知识又受训练截止时间与语料偏好的限制。两边都缺一截。
核心方法
ARI 的设计直觉只有一句:让 LLM 负责"语义与文法",让外部知识库负责"实体事实",两者通过 RAG 接口缝合。
整体流程(伪代码描述)
input: 残缺文档 D, mask 位置集合 M, 外部知识库 K
output: 完整文档 D'
for each mask 位置 m in M:
candidates[m] = LLM_fill_topk(D, m, k) # 候选生成
evidence[m] = Retriever(K, candidates[m]) # 实体级检索
D'[m] = LLM_rerank(D, candidates[m], evidence[m]) # 证据注入 + 重排序
return D'
关键组件
-
缺字检测 / 版面分析:基于 OCR 与版面工具定位字符级 mask 位置(论文未明确具体算法,作者在前置工作中应已有相关模块)。这一步把"补全"和"识别"分开处理,避免相互干扰。
-
候选生成(Generation):用预训练 LLM 在每个 mask 位置给出 top-k 候选字符或词。这一步保留了 Masked LM 的"局部填空"能力,作为后续检索的"问句"。候选粒度选字符级还是词级,论文未明确给出,但从命名实体补全的目标看,应当是实体级 chunk 而不是单字。
-
外部知识检索器(Retrieval):针对每个候选实体,从历史知识库(人名词典、年表、地名词典、官职表、家族谱系、官方记录)召回相关条目。检索器选型(BM25 / dense / hybrid)原文未明确,但从 RAG 类工作的常见工程模板推断,大概率是 hybrid 方案——关键词与字形变体适合稀疏检索,语义相似适合 dense 检索。
-
重排序与注入(Rerank + Inject):把候选 + 检索证据一起拼进 prompt,让 LLM 在"我看到的事实"和"我已有的语言模型先验"之间权衡。这一步是 ARI 的核心机制——它把"该不该信检索结果"也交给 LLM 判断,而不是简单投票。
-
专家评估回路(Human-in-the-loop):邀请历史学专家对补全结果做人工评分,反向校验系统可靠性。这在历史文本场景下几乎是必须项,因为自动化指标在"实体是否正确"这件事上常常撒谎。
与朴素 RAG 的差异
朴素 RAG 把整段文本塞进检索器,召回的是"段落级证据",容易把候选淹没在噪声里。ARI 的设计要点是实体级、候选级检索——只对"可能出错"的命名实体候选去查库,普通字词不走检索。这有两个直接好处:
- 精度:检索 query 是被 mask 的实体本身,召回空间小、信噪比高。
- 成本:普通字词不触发检索,节省延迟与算力。
与朴素 LLM 补全的差异
朴素 LLM 补全把"世界知识"和"语言知识"混在一个模型里,无法分别优化。ARI 把"事实知识"显式外挂,检索库可以独立更新、独立审核、独立换源——这在历史领域特别重要,因为历史学知识会被持续修订(如新出土文物、新解密的档案)。
关键实验与数据
- 数据集:朝鲜王朝(Korean)历史文档,正文与缺字掩码由作者构建(论文未明确公开数据集大小与构成,需进一步查证 ACL Findings 2026 全文)。
- 主任务指标:
- 字符级补全准确率(character-level accuracy)
- 命名实体级补全准确率(named-entity accuracy)
- 基线对比:Masked LM 基线、纯 LLM 基线、无 RAG 的 LLM。摘要里说"显著优于"基线,具体倍数需要看论文表格。
- 主要结果:
- 在普通字符恢复上 ARI 相对基线显著提升;
- 在命名实体恢复上提升幅度更大——正是 RAG 模块设计的靶点;
- 专家评估(domain expert assessment)确认 ARI 输出可作为研究辅助工具,专家不是"否决"而是说"可用"。
- 场景定位:偏向"研究辅助"而非"自动出版"——专家仍需对关键事实复核。这一点作者在文中应该会显式说明,符合历史学界的谨慎传统。
亮点与局限
亮点
- 第一个把 RAG 显式引入历史文档修复的系统工作,方法路径清晰且模块化。
- 把"语言先验"与"事实知识"的角色切分讲透了,对其他低资源场景(族谱、地方志、典籍)有迁移价值。
- 专家评估维度补齐了自动化指标的盲区,给出了"研究辅助 vs 自动出版"的明确产品定位。
- 检索器外挂使知识更新与审计独立于模型,符合数字人文领域的可持续运维要求。
局限
- 检索库覆盖面决定上限:冷僻人物、年号、变体写法仍会失败。论文未明确知识库规模与维护成本。
- 仅在韩文历史文档验证,跨语种(中文、阿拉伯文、拉丁文古文献)泛化未知。
- 候选生成仍依赖 Masked LM / LLM 思路,对"整段缺失""版面错位""图像级污损"等结构性损伤未覆盖。
- LLM 调用成本与延迟在长文档场景下未充分讨论(原文未明确)。
- 检索库的偏差会被放大:知识库如果偏向官方/主流文献,民间记载与女性相关史料可能被边缘化。
- 对"无法验证"的实体没有给出保守策略(如"宁可不补"或"标注不确定"),工程落地需要补这一层。
对工程落地的启发
- 不要把所有修复任务都丢给 LLM:先用 Masked LM 解决"通用字词"(低成本高准确),再用 RAG 单独打"实体消歧"(高成本高价值),分层最划算。
- 检索粒度要小:段级 / 文档级检索在补全任务上粒度太粗;实体级 + 候选级是更稳的工程模板。这一点对所有"高实体密度"任务(法律文书、医疗记录、专利)都适用。
- 专家评估不可省:自动化指标(准确率、BLEU)在历史文本上会撒谎,专家打分是这类系统的真门槛。哪怕只做小样本专家 sanity check,也比纯自动指标强。
- 冷启动路径:先把已有的人名词典 / 年表 / 地名词典结构化,做最小可行知识库,再迭代检索器。这是大多数文献机构(图书馆、档案馆、博物馆)能立刻动手的路径。
- 外挂知识 = 可审计:把"知识"和"模型"解耦后,编辑知识库比 fine-tune 模型便宜得多,也更容易接受同行评审——这是 ARI 给出的最有产品感的工程建议。
- 延迟预算设计:普通字词跳过检索,命名实体走 RAG,整体延迟可控。
与同方向工作的关系
- vs 纯 Masked LM(BERT-style 修复):ARI 引入显式外部知识,专门解决"局部上下文不够"那一类错误。Masked LM 是 ARI 的"基础能力层",不是替代关系。
- vs 朴素 LLM 补全:ARI 用检索证据约束生成,减少命名实体幻觉。朴素 LLM 补全在长尾实体上几乎必然失败。
- vs 大模型历史问答系统:ARI 是"补全"任务,不是"问答",输出的是字符级结果而非段落级答案。但 ARI 的检索机制完全可以被问答系统复用。
- vs 古籍 OCR 端到端系统:OCR 输出 → 文本 → 补全是 pipeline;ARI 在 pipeline 第二阶段发力,与前端 OCR 模型正交。
- vs 数字人文(DH)通用工具:ARI 是面向缺字补全这一窄任务的"垂直方案",比通用 LLM 更可控,比通用 RAG 更精准。
适合谁读
- 做古籍数字化、档案智能化的工程师与研究者。
- 对 RAG 系统设计感兴趣的从业者——这是把 RAG 落到"低资源 + 高实体密度"场景的范式样本。
- 历史学、文献学背景、想评估 AI 工具链可用性的学者。
- LLM 应用开发者,关注"何时不该用 LLM 内置知识"这类边界条件的研究者。
- 产品经理:评估"AI 辅助历史研究"工具的真实落地门槛。
一句话总结
ARI 不是"更强的 Masked LM",而是"Masked LM + 可外挂的知识库 + 实体级 RAG"的组合拳。它解决的不是一个炫技问题,而是"低资源 + 高实体密度"文本补全里最朴素也最顽固的那一截——模型不知道的事,让它能去查。
不确定处标注
- 知识库具体规模、检索器选型(BM25 / dense / hybrid)、候选数 k、LLM backbone 型号:原文未明确,需读 ACL Findings 2026 全文确认。
- 数据集是否开源、评测集大小与构成:原文未明确。
- 延迟 / 吞吐量指标、跨语种泛化实验、消融实验细节:原文未明确。
- "显著优于"的具体倍数与置信区间:原文摘要未给出,需查正文表格。
工程落地与核查(Jay)
工程落地
1. 知识库构建——从零到可用
知识库是 ARI 系统的核心资产,质量直接决定上限。以下是分步构建路径:
第一步:梳理已有资源(低成本冷启动)
- 历史人名词典:查地方志、族谱索引、官方史料人名索引(多数已有数字化版本)
- 年表数据库:年号→公元纪年的对照表(公开数据集多)
- 地名词典:历史地名→现代地名 的对照(含不同历史时期的归属变迁)
- 官职表:朝代官职名称、品级、职能(相对结构化,易整理)
- 来源优先级:官方档案 > 经整理的学术数据库 > 民间文献
第二步:知识结构化(工程难点)
每条知识条目至少包含:
{
"entity": "李成桂",
"type": "person",
"dynasty": "朝鲜王朝",
"reign_start": 1392,
"reign_end": 1398,
"variant_names": ["太祖", "李旦"],
"related_entities": ["郑道传", "赵浚"],
"source": "朝鲜王朝实录·太祖实录"
}
变体名字段(variant_names)是检索召回的关键——历史人名在文档里经常出现简称、号、谥号,不索引变体就漏召回。
第三步:检索器选型
推荐 BM25 + bi-encoder hybrid: - BM25 负责字面匹配(处理字形变体、OCR 误差——历史文档 OCR 错误率通常 5-15%) - Bi-encoder 负责语义相似召回(处理语义相近但字面不同的描述) - 实际工程经验:E5 或 BGE-m3 作为 dense 模型,配合 BM25,hybrid 检索比纯任一种都稳定 10-15%
知识库维护:
历史知识会随新出土文物持续更新。工程实现里要设计: - 知识库版本控制(每次更新记录来源、时间和修改内容) - 新知识发现流程:当 LLM 对某次补全"很不确定"时,自动记录这个 case,供专家事后审核并补充知识库
2. 流水线工程实现
整体 Pipeline(生产级):
OCR 输出文本
→ 缺字检测(rule-based + ML hybrid:统计字符间距、空格异常、墨迹密度)
→ 字符级 mask 标注
→ 分流判断:
if 缺字是普通字词(上下文 entropy 高):
直接走 Masked LM(快、低成本)
else if 缺字可能是命名实体(上下文 entropy 低 + 含特征词):
走 ARI 流程(LLM top-k 候选 → 实体检索 → 重排序)
else:
标记为"待专家审核"(不强行补全)
→ 专家审核层(关键事实条目必须人工复核)
→ 输出最终补全文本
分流判断的实现:不需要复杂模型,用规则即可——检测到缺字周围有"帝/王/臣/职/年号"等高频历史词,就走 ARI;否则走 Masked LM。F1 粗估 > 0.85,不需要高精度分类器。
LLM 调用成本优化:
- 候选生成用 batch 调用(一次请求生成一个 mask 的 top-k,而不是逐个调)
- 重排序用 ** distillation 小模型**(如 Embedding-v3 mini)而非每次用 GPT-4
- 知识库检索走本地部署的向量数据库(如 Qdrant / Milvus),不要走远程 API
3. 专家审核层——不可省略的质量门禁
历史实体的补全如果出错,比不补更有害(引入伪史)。专家审核层的工程实现建议:
分层审核策略:
| 补全置信度 | 处理方式 |
|---|---|
| 高(检索得分 > 0.9,且多源一致) | 直接通过,标记"自动" |
| 中(检索得分 0.6-0.9) | 专家快速复核(显示:原文档 + 检索证据 + 候选) |
| 低(检索得分 < 0.6) | 专家深度审核,或标注"存疑"不补 |
| 跨知识库矛盾(多源冲突) | 强制专家介入,显示所有冲突来源 |
专家审核工具: 不需要复杂系统,给专家一个简单 UI,显示:原文残缺片段 + 缺字位置 + top-3 候选 + 每条候选的检索证据来源。专家点选或手动输入即可。审核日志要存下来用于持续改进系统。
4. 跨语种迁移——中文古籍的注意事项
中文古籍的特殊挑战:
- 字形变体极多:异体字、俗字、古今字比韩文更复杂。OCR 错误类型也不同(竖排 vs 横排、墨迹浓淡)。解法:建立字形归一化表(Unicode CJK 兼容区字符映射到正字),在检索前做归一化预处理。
- 专名检索难度高:古人字号、谥号、封号混用,"李建成"可能以"隐王"、"卫王"出现。知识库 entity 条目要尽可能穷举所有称谓变体。
- 知识库资源比韩文更丰富:中国历史知识库(CBDB、中华书局数据库、国学网等)已有大量结构化数据可用,比从零构建韩文知识库成本低得多。
核查清单(基于原文)
- ✅ "命名实体恢复提升幅度更大"——这是 ARI 的核心靶点,原文实验设计与结论一致,可信度高。
- ✅ "专家评估确认可用"——专家不是否决而是说"可用",是符合历史学界预期的结论,说明系统定位(研究辅助)准确。
- ⚠️ "显著优于基线"的具体数字:摘要未给具体倍数,需要看正文表格才能评估提升幅度是否在工程上有意义(> 5% 绝对准确率差才有实际价值)。
- ⚠️ "字符级准确率"——普通字符恢复也有提升:这条说明 ARI 对普通字词也有正向作用(通过 RERANK 优化 LLM 的局部判断),但提升幅度应远小于命名实体,避免过度解读。
- ❌ 检索器选型未给出:这是原文最大的工程黑盒。BM25/dense/hybrid 的选择直接影响召回率和延迟,是工程落地最重要的决策点,需要自己实验。
- ❌ 数据集规模和具体构成未公开:无法独立复现,也难以评估跨语种迁移的可行性。
- ❌ "无法验证时的保守策略"缺失:原文未给出"宁可不补"的边界条件,工程落地需要自己定义这个策略——建议:当检索得分 < 0.5 且无多源一致证据时,不强行补全,标注
[?]留待专家。
主要工程风险
- 知识库冷启动成本:历史知识库构建需要领域专家参与,短期内(< 3 个月)很难做到"完整"。建议从最小可行知识库(年表 + 人名各 1 万条)开始,先验证 pipeline,再迭代扩充。
- OCR 错误传播:如果前端 OCR 把"李"识别成"季",后端 ARI 检索"季"就召不回"李成桂"。解法:在检索 query 阶段做 OCR 纠错预处理,或在知识库检索后做编辑距离扩召回。
- 检索库偏差的系统性风险:如果知识库偏向官方正史(二十四史),民间记载的人物和事件会被系统性地边缘化。解法:在知识库文档元数据里标注"史料来源类型",专家审核时对"非主流来源"的结果做二次复核。
- LLM 生成实体的幻觉:LLM 在重排序阶段如果过度自信,即使检索证据不足也会选一个"听起来合理"的候选。解法:在 prompt 里明确加入"当检索证据不足时,选择'不确定'而非编造"的指令,并在训练数据里加入"不确定"选项的 positive examples。