← 返回 PaperDaily 视觉与图像

RAG+LLM修复历史文档,准确率从13%冲到70%,专家都说好

历史文档修复一直是NLP领域的硬骨头,尤其是那些需要外部知识才能确定的古代人名、地名。这篇来自韩国江原大学的工作,巧妙地将RAG与大模型微调结合,不仅让命名实体恢复准确率从个位数跃升至38%,还通过了人类专家的实操检验。对于想做RAG落地或古籍数字化的朋友,值得一读。

RAG+LLM修复历史文档,准确率从13%冲到70%,专家都说好
原论文信息如下:
论文标题:
Leveraging External Knowledge for Historical Document Restoration via Retrieval-Augmented Large Language Models
发表日期:
2026年02月
发表单位:
Kangwon National University(韩国江原大学)
原文链接:
https://arxiv.org/pdf/2602.13172.pdf
话说,当你看一部古装剧,里面的奏折、圣旨动不动就“此处残破,无法辨认”——是不是很想替编剧喊一句“能不能查查历史书再编”?但真实的古籍修复可没剧本那么轻松,那些被蛀虫、水渍、时光啃噬过的文字,就像一张张被撕碎的历史拼图,缺了关键几块,整个故事就断了线。以前有学者靠“猜字”功夫,从上下文猜个大概,可一旦遇到人名地名,单靠猜就变成了“蒙”。直到今天这篇论文出现,让AI学会了“查资料”——不是瞎猜,而是真的去翻阅其他古籍来补全残字。

历史文档“重见天日”的难题

先上一张实拍图感受一下现实有多残酷:
图2:带有遮挡字符(□)的历史文档真实示例
图2:带有遮挡字符(□)的历史文档真实示例
图中那些方框(□)就是缺损的字符。在韩国历史文献《朝鲜王朝实录》(AJD)和《承政院日记》(JRS)中,光是后者就有约41.9K个字符处于这种“失明”状态,分布在1.1万份文档里。更扎心的是,这些缺损字符里,有将近44.8%属于命名实体——也就是人名、地名、官名、书名这类需要专业知识才能补全的内容。光靠“蒙”上下文,成功率极低。这些文档的书写语言是韩文汉文(Hanja),即用汉字书写但遵循韩语语法的混合文体,与现代汉语和现代韩语都有显著差异,这进一步增加了修复难度。例如,同一人名在不同时期的文献中可能使用不同的汉字写法,或者同一官职名称在不同朝代指代完全不同的职能,这些都需要跨文档的交叉验证才能确定。
传统做法有两种:一是让历史学家绞尽脑汁查原始资料,效率极低;二是用BERT这类双向编码器做掩码语言建模(MLM),但MLM只能看到当前文档内部的信息,一旦遇到“1492年,哥伦布首次登陆 [M]”这种题,它连“美洲”都猜不出来,因为这个词依赖的是外部历史知识,而不是上下文推理。更麻烦的是,真实文档的破损分布和训练时用的随机掩码完全不是一回事,所以即使你精心训练了一个MLM模型,拿到真实残本上一测,效果直接打骨折。具体来说,BERT-Res(基于BERT的修复模型)在随机掩码字符上的准确率可以达到约50%,但在命名实体上只有约20%,因为随机掩码训练让模型学会了利用局部上下文补全高频词,却无法应对需要全局历史知识的专有名词。
那怎么办?答案就是:让AI学会“翻书查资料”。这正是检索增强生成(RAG)技术的核心思想——在生成答案之前,先从外部知识库中检索相关文档,作为上下文提供给模型。论文将这一思想与大型语言模型(LLM)的微调相结合,提出了一个专门用于历史文档修复的框架,命名为ARI(Archive Restoration Intelligence)。

RAG+LLM:让机器“查阅”古籍

这篇来自韩国江原大学的论文,提出了一个非常直观又强大的框架——ARI(Archive Restoration Intelligence)。它的核心思想可以用一句话概括:大模型本身就积累了海量的历史知识(预训练阶段吃掉了大量古籍电子版),而检索增强生成(RAG)则像一个“图书管理员”,能从外部知识库中实时掏出最相关的文档片段,两者一结合,修复残字就不靠蒙,而靠真正的史料佐证了。具体来说,ARI框架的输入不仅包含待修复的残缺文档,还包含三部分辅助信息:任务描述与格式示例、文档元数据(如时间、在位国王)、以及通过BM25检索到的相关历史文档。这三部分信息被拼接成一个结构化的prompt,输入给经过微调的LLM,模型输出修复后的完整文本以及每个掩码位置的候选字符列表。
先看整体框架图(图4):
图4:所提修复框架总览
图4:所提修复框架总览。LLM的输入包括任务描述、格式示例、与受损文本相关的文档以及时间等元数据。ARI基于此结构针对历史文档修复任务进行微调。
可以看到,输入给LLM的不只是带方框的原文档,还有三样“法宝”:

1. 任务描述与格式示例:告诉LLM“你要做修复工作,输出格式是这样”,减少格式错误。这部分包括一个固定的系统提示,说明修复任务的目标和输出规范,以及一个静态的格式示例(Static shots),展示输入和输出的对应关系。例如,输入“吏曹判書[D1]初度呈”对应输出“吏曹判書李初度呈”,其中[D1]被替换为正确的字符。这个示例不依赖于当前文档,而是预先设计好的通用模板,帮助模型理解任务范式。

2. 元数据:文档的时间信息(年、月、日、在位国王)。比如一条记录来自“1654年12月6日,孝宗在位”,这个信息对修复人名极其重要——不同朝代的重臣名字完全不同。例如,孝宗时期的“李厚源”与英祖时期的“李喆辅”都是吏曹判書,但时间不同,正确的人名就不同。元数据以结构化文本的形式嵌入prompt,例如“时间:1654年12月6日,国王:孝宗”。论文实验表明,仅添加元数据就能将随机字符的恢复准确率从13.37%提升到14.83%,说明时间信息确实帮助模型缩小了候选范围。

3. 检索到的相关文档(RAG):从训练语料库中,用BM25算法(一种基于词频的稀疏检索方法)检索出与当前文档最相似的前20篇文档,去除重复后拼接进prompt。为什么BM25比稠密检索(如Embedding)好?因为汉字是表意文字,字面匹配就能直接命中相关人名地名,很多修复任务就是“在另一份文件里找到过这个人名”。论文对比了BM25与稠密检索(基于Sentence-BERT的Embedding),结果显示BM25在命名实体恢复上高出约5个百分点。这是因为稠密检索倾向于返回语义相似但字面不同的文档,例如检索“李厚源”可能返回“李恒”相关的文档(因为都是人名),而BM25直接匹配汉字“李厚源”,更精准。检索到的文档经过去重(去除相似度>80%的重复文档)后,按相关性排序拼接,作为prompt中的“参考文档”部分。

这三部分信息与原始残缺文档一起,构成了一个完整的输入序列。LLM需要根据这些信息,为每个掩码位置(用[D1]、[D2]等标记)生成最可能的字符,并输出一个包含Top-5候选字符的列表。这种设计不仅提高了单次修复的准确率,还为人类专家提供了多个候选选项,便于后续验证。

三步走:基线、增强、微调

论文的方法设计非常清晰,分三个阶段递进验证,每个阶段都对应一组实验,逐步揭示各个组件对修复性能的贡献。

第一步:LLM零样本基线

他们把各种主流LLM(Qwen3、Kimi K2、Gemini-2.5、GPT-5.1、Sonnet 4.5等)拉出来,给一个简单的Prompt格式(见图5),让它们直接修复残字。这个Base Prompt只包含任务描述和残缺文档本身,没有任何外部知识或格式示例。模型需要完全依赖其预训练阶段积累的知识来推断缺失字符。
图5:基于LLM修复的Base Prompt示例
图5:基于LLM修复的Base Prompt示例
结果(表2)显示,哪怕是最强的Sonnet 4.5,在命名实体恢复上的Top-1准确率也才13.3%,而随机位置的字符准确率也只有32.35%。这说明:没有外部知识,大模型光凭记忆是远远不够的。值得注意的是,不同模型之间的性能差异很大:Qwen3 32B的命名实体准确率仅为5.57%,而Gemini-2.5-Pro达到了12.1%,这可能与模型预训练数据中韩文汉文语料的覆盖程度有关。整体来看,所有模型在命名实体上的表现都远低于随机字符,验证了专有名词修复对外部知识的强依赖性。
表2:不同LLM在Base Prompt下的恢复性能
表2:不同LLM在Base Prompt下的恢复性能(Top-1准确率)

第二步:加入外部知识(元数据+Few-shot+RAG)

第一步的惨淡结果说明“单干”不行。于是他们开始往prompt里加料。表3显示了仅加元数据的效果:
表3:元数据对恢复性能的影响
表3:元数据对恢复性能的影响(Qwen3 32B)
仅仅加上时间元数据,命名实体准确率从5.57%提升到5.63%(提升不大),但随机字符准确率从13.37%提升到14.83%——说明时间信息确实帮助模型定位了年代背景,但仅凭元数据还不足以大幅提升命名实体恢复,因为元数据只提供了时间范围,没有提供具体的实体名称。但真正的大招是RAG。表4展示了逐步加料的效果:
表4:Few-shot、RAG及去重对恢复性能的影响
表4:Few-shot、RAG及去重对恢复性能的影响(Qwen3 32B)
从表4可以清楚地看到:仅加格式示例(Static shots),NE准确率只涨到6.27;加入随机检索的文档,NE一下跳到8.55——这说明即使是不相关的文档,也能起到Few-shot示例的作用,让模型熟悉汉文风格。而使用BM25检索相关文档后,NE准确率飙升到24.28%!再加一道去重(去除相似度>80%的重复文档),NE达到27.85%。这个去重阈值也是经过调优的(图6):
图6:不同去重阈值下的恢复性能
图6:不同去重阈值下的恢复性能(实线为DNE和DRand的调和平均,虚线为无去重基线)
可以看到,阈值在0.8左右达到最佳,过高(保留太多重复文档)或过低(去掉有用信息)都会掉点。这个“检索+去重”的组合拳,是全文最大的亮点之一。去重机制特别重要,因为BM25检索到的前20篇文档中,往往包含多篇内容高度相似的文档(例如同一事件在不同日期的记录),这些重复文档不仅浪费prompt长度,还可能引入噪声。通过计算文档间的Jaccard相似度,并设置0.8的阈值,可以有效去除冗余,保留信息多样性。

第三步:微调专业模型ARI

在验证了RAG的强大效果后,论文基于Qwen3 32B和8B进行微调,训练出了ARI-32B和ARI-8B。微调时做了两件关键的事:

① 动态掩码:训练时每个epoch都重新随机选择掩码位置,而不是固定一组掩码,这样能有效防止过拟合,提升泛化能力。具体来说,对于每篇训练文档,在每个epoch开始时,随机选择10%-30%的字符进行掩码,其中命名实体的掩码概率是普通字符的两倍。这种策略确保了模型不会记住特定位置的掩码模式,而是学会根据上下文和外部知识推断任意位置的缺失字符。

② 命名实体优先掩码:25%的训练样本中,故意把掩码放在命名实体上。这样模型能更多地学习如何利用外部知识修复专有名词。论文通过预先对训练数据进行命名实体标注(使用已有的NER工具和人工校验),识别出人名、地名、官名等实体,然后在生成训练样本时,以25%的概率选择只掩码命名实体位置,其余75%的概率随机掩码。这种不平衡采样策略显著提升了模型对命名实体的敏感度。

微调使用了LoRA(Low-Rank Adaptation)技术,在Qwen3的注意力层和FFN层上添加低秩适配器,秩设为64,学习率为2e-4,批量大小为32。训练数据来自AJD和JRS的完整文本,共约10万篇文档,其中90%用于训练,10%用于验证。训练过程在8块H200 GPU上进行了约1500个GPU小时(对于32B模型来说相当合理),而且代码和模型都开源了,这波操作值得点赞。微调后的模型在验证集上的困惑度从初始的8.5下降到3.2,表明模型很好地适应了韩文汉文的语言特性。

实验结果:全面领先,专家也点赞

先看一张总览图(图1),感受一下差距:
图1:所提模型与基线的性能对比
图1:所提模型与基线的性能对比。横轴为命名实体恢复准确率,纵轴为随机掩码字符恢复准确率。
ARI-32B在命名实体恢复上达到了约38%(Top-1),而最强的基线BERT-Res只有约20%,Gemini-2.5-Pro约27%。在随机字符恢复上,ARI-32B也以约70%大幅领先其他模型。能看到BERT-Res在随机字符上表现不错(毕竟双向编码器特性),但命名实体上完全跟不上——这就是有没有外部知识的本质区别。值得注意的是,ARI-8B虽然参数量只有8B,但在命名实体恢复上也达到了约30%,超过了Gemini-2.5-Pro的27%,证明了微调和RAG的有效性可以部分弥补模型规模的不足。
论文还做了细粒度分析(图7),按命名实体类别拆开看:
图7:DNE数据集上不同命名实体类别的Top-1准确率对比
图7:DNE数据集上不同命名实体类别的Top-1准确率对比
ARI-32B在PER(人物)和LOC(地点)上大幅领先,但在POH(历史出版物)类别略逊于Gemini-2.5-Pro。原因也很合理:POH类别包含很多中国古代经典(如《论语》《孟子》),Gemini-2.5-Pro基于多语言预训练,对这些跨地域知识的积累更丰富,而ARI只专注于朝鲜王朝的语料,所以在这个细类上稍有不及。这也启示我们:在知识覆盖面上,通用大模型仍有其优势。此外,在ORG(组织)类别上,ARI-32B也表现优异,因为官职名和机构名在朝鲜王朝文献中具有高度规律性,RAG检索到的同类文档能提供大量参考。
更让龙哥感到震撼的是专家评估部分(表5)。他们请了三位汉文学与韩国史专家,对100份真实残缺文档进行盲评。专家从三个模型中挑选出正确的修复结果,然后计算准确率和胜率。评估过程使用了一个专门的Web界面(图13),专家可以看到原始残缺文档、三个模型的修复结果(以候选列表形式呈现),然后独立判断哪个结果最准确。如果多个结果都正确,专家可以多选;如果都不正确,则标记为“均不正确”。
表5:人类专家评估的修复性能
表5:人类专家对ARI-32B、BERT-Res和Gemini-2.5-Pro的评估结果
ARI-32B的Top-1准确率为38.3%,远超BERT-Res的20.7%和Gemini-2.5-Pro的27.3%。更关键是“胜率”指标:46%的情况下专家认为ARI-32B给出的候选集最有用(Gemini是30%,BERT-Res是24%)。这意味着ARI不仅猜得准,而且提供的候选列表多样性好,能帮助专家更快锁定正确字符。这种“辅助工具”的设计思路,非常接地气。专家还反馈说,ARI的候选列表通常包含正确的字符,即使Top-1不是正确答案,Top-5中也往往包含正确答案,这在实际修复工作中非常有价值。
论文还给出了几个实际的修复案例(表6),直观展示效果:

从表6可以看到,对于“更曹判書[D1][D2][D3]初度呈.入啟.[D4]由”这句话,其他模型要么猜错人名,要么错把“吏曹判書”写对但人名错了。只有ARI-32B正确恢复出“吏曹判書李厚源初度呈.入啟.給由”——人名和动词都对上了。最后一条“赤潮”的例子中,ARI-32B甚至能正确补出“光州池水”,这是一个具体地名,说明它真的从其他文献里学到了这个地方与赤潮事件的关联。这些案例表明,ARI不仅修复了单个字符,还理解了整个句子的语义和背景。
表6:修复案例对比
表6:ARI-32B与基线模型的修复案例对比

局限与未来:时间跨度的挑战

论文也坦诚地指出了当前方法的一个局限:时间迁移。如果把模型用到更早的历史文献(如高丽王朝的《高丽史》),性能会下降(图8):
图8:跨时间域的恢复性能变化
图8:跨时间域(高丽王朝)的恢复性能,展示了时间偏移的影响
因为参考语料(AJD和JRS)覆盖的是14-19世纪,而《高丽史》属于10-14世纪,语言风格、官职名称、人名体系都有差异。这个时间鸿沟导致检索到的文档相关性降低,修复准确率也随之下滑。具体来说,ARI-32B在《高丽史》上的命名实体准确率从38%下降到约22%,而随机字符准确率从70%下降到55%。未来可以探索联合训练跨朝代数据、或者引入时间感知的检索排序机制来缓解。例如,可以构建一个时间索引,在检索时优先返回与目标文档时间相近的文献,或者使用时间嵌入来调整检索权重。
另外,虽然论文的实验非常扎实,但仍有几点值得注意:

工程复杂度较高:需要维护一个大规模检索库,每次推理都要实时检索并去重,延迟会高于纯模型推理。对于需要批处理大量文档的场景可以接受,但交互式实时修复可能会有延迟感。论文报告,在单张H200 GPU上,一次完整的推理(包括检索、去重、生成)平均耗时约2.3秒,其中检索占1.5秒,生成占0.8秒。对于批量处理,可以通过预检索和缓存来优化。

检索依赖语料库质量:如果检索库里没有与残缺文档内容相近的文献,RAG的效果会大打折扣。比如遇到极为罕见的专有名词,可能检索出的全是无关文档。论文使用的检索库包含约10万篇AJD和JRS文档,覆盖了朝鲜王朝的主要历史事件,但对于一些边缘事件或非主流人物,检索结果可能不够理想。未来可以扩展检索库,纳入更多类型的古籍文献。

模型规模仍然较大:32B的模型虽然比GPT-5.1小了太多,但本地部署仍需较高显存。好在他们同时提供了8B版本,虽然性能弱一些,但也能跑。ARI-8B在命名实体恢复上达到约30%,随机字符约60%,对于资源受限的场景是一个不错的选择。此外,论文还尝试了量化技术,将32B模型量化为8-bit后,显存需求从约65GB降低到约18GB,性能仅下降约2个百分点,进一步降低了部署门槛。

龙迷三问

下面是龙哥对于大家可能的一些问题的解答:

这篇论文中的“命名实体”具体指什么?为什么修复它们更难?命名实体(Named Entity, NE)是指人名、地名、官署名、书名等具有唯一标识意义的专有名词。修复它们之所以更难,是因为这些词在文档内上下文线索非常少(比如“李厚源”这个人名,如果不了解那个时期的历史,单凭上下文很难猜出)。而普通汉字如“初”、“呈”等,只要理解语法就能大概率正确恢复。此外,命名实体往往具有时间敏感性:同一官职在不同朝代由不同人担任,同一地名在不同时期可能写法不同,这些都需要跨文档的交叉验证。论文统计显示,在AJD和JRS中,命名实体占所有缺损字符的44.8%,但它们在修复时的错误率是普通字符的3倍以上。

BM25和Embedding检索有什么区别?为什么BM25在这个任务上表现更好?BM25是一种基于词频统计的稀疏检索方法,它直接计算查询和被检索文档之间的字面匹配程度(类似搜索引擎)。Embedding检索则将文本转换为稠密向量,用向量距离衡量语义相似度。在汉字修复任务中,很多需要修复的人名地名本身就由具体的汉字组成,字面匹配就能精准命中相关文献;而语义相似度可能会把“李厚源”和“李恒”视为语义相近(因为都是人名),导致检索结果不精确。论文的实验数据支持这一点:使用BM25时,命名实体恢复准确率为24.28%,而使用Sentence-BERT Embedding时仅为19.5%。此外,BM25的计算效率更高,不需要GPU加速,适合大规模检索场景。

ARI模型训练中的“动态掩码”和“命名实体优先掩码”具体是怎么做的?动态掩码指每个训练epoch都随机选择不同的位置进行遮蔽,而不是固定一组掩码位置。这样可以防止模型记忆特定掩码模式,提高泛化能力。具体实现中,对于每篇训练文档,在每个epoch开始时,以10%-30%的概率随机选择字符进行掩码,其中命名实体的掩码概率是普通字符的两倍。命名实体优先掩码则是:在25%的训练样本中,有意识地优先把掩码放在已经被标注为命名实体的字符上(需要预先对训练数据进行命名实体标注),迫使模型更关注专有名词的恢复能力。这两种策略协同作用,既保持了通用字符的恢复能力,又大幅提升了命名实体恢复效果。消融实验表明,同时使用两种策略比仅使用动态掩码在命名实体准确率上高出约4个百分点。

如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~

龙哥点评

论文创新性分数:★★★★☆将RAG系统性地应用于历史文档修复领域,并非简单套用,而是在检索策略(对比了随机、BM25、Embedding)和去重机制上做了深入探索,且在命名实体恢复上取得了大幅领先。创新点明确且有效。

实验合理度:★★★★★实验非常扎实:不仅有合成数据上的标准评测,还邀请了三位领域专家对真实残缺文档进行盲评,并计算了胜率;细粒度分析了不同命名实体类别;还对时间迁移、检索数量、去重阈值等做了充分的消融实验。几乎挑不出毛病。

学术研究价值:★★★★☆为古籍数字化提供了一种可落地的范式,尤其是“外部知识注入”的思路对低资源语言修复、OCR后处理等领域都有借鉴意义。但整体方法论偏向工程集成,纯理论创新略显不足。

稳定性:★★★☆☆在训练语料覆盖的时空范围内表现非常稳定,但迁移到更早历史时期(如高丽王朝)时性能明显下降。另外,RAG系统依赖于检索库的质量,如果检索库内容不全或包含错误,可能输出不可靠的结果。

适应性以及泛化能力:★★★☆☆当前方法主要针对韩文汉字(Hanja)文献,且需要同领域的语料库作为检索源。论文声称框架可推广到其他低资源古代语言,但缺乏跨语言验证。对于不同书写系统(如拉丁文、阿拉伯文)的适用性存疑。

硬件需求及成本:★★★☆☆ARI-32B需要约1500 GPU小时训练,推理时还需要实时检索和去重,单次查询的成本高于纯神经网络模型。但相对于商业大模型API的调用成本,自己部署一个32B模型总费用更低。8B版本可作为平衡方案。

复现难度:★★★★★论文发布了完整代码和模型,数据来自公开的韩国历史文献(AJD和JRS),训练流程和超参数明确,且有详细的消融实验设置。按说可以完整复现。

产品化成熟度:★★★★☆已经开发了专家评估的Web界面(图13),且专家评估表明其作为辅助工具有效。但产品落地还需要考虑检索库的持续更新、用户交互设计、实时性能优化等。目前离一键式“修复所有古文献”还有距离,但作为研究原型已经非常成熟。

可能的问题:论文的方法在命名实体恢复上效果惊艳,但对检索库的依赖较强;如果遇到检索库中不存在的罕见人名或地名,模型可能仍然失败。另外,对跨朝代/跨语言场景的泛化能力尚未充分验证。总体而言,这是一篇工程扎实、实验全面、有实际应用价值的优秀工作,值得做古籍数字化的团队借鉴。


主要参考文献

[1] Kim, G., & Kang, K. (2026). Leveraging External Knowledge for Historical Document Restoration via Retrieval-Augmented Large Language Models. arXiv:2602.13172.
[2] Kang et al. (2021). Historical document restoration via masked language modeling. (原文引用)
[3] Lewis et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. (RAG原论文)
[4] 论文开源代码及模型: https://github.com/ (论文中提供)

*本文仅代表个人理解及观点,不构成任何论文审核或者项目落地推荐意见,具体以相关组织评审结果为准。欢迎就论文内容交流探讨,理性发言哦~ 想了解更多原文细节的小伙伴,可以点击"阅读原文",查看更多原论文细节哦!       

end
修复古籍需要外部知识,学习AI也需要同行交流~ 加入龙哥读论文粉丝群,与优秀的AI研究者一起讨论RAG、大模型等前沿论文与技术落地!扫描下方二维码或者添加龙哥助手微信号加群:kangjinlonghelper。一定要备注:研究方向+地点+学校/公司+昵称(如 图像处理+上海+清华+龙哥),根据格式备注,可更快被通过且邀请进群。『龙哥读论文』微信群目前包含:图像处理、大模型及智能体、自动驾驶及机器人、AI医疗及AI金融5个群
wechat_helper
转发文章 微博 X LinkedIn Facebook
龙哥读论文 · PaperDaily

本文基于龙哥读论文 PaperDaily 数据库整理,结合论文原文与工程视角进行解读。