从1.4万张老报纸里,抠出163亿个高质量文字token

发布时间:2026/9/24 3:13:25
从1.4万张老报纸里,抠出163亿个高质量文字token 2026年波士顿公共图书馆的档案库里躺着一百多万张老报纸扫描件最早的一张可以追溯到1795年。这些纸页记录了两百多年美国社会的日常选举、船期、寻人启事、市场行情还有大量密密麻麻的商业广告。问题是这些内容基本上没法被计算机真正读懂。你可能觉得这不算什么大问题毕竟OCR技术都发展这么多年了扫一扫不就行了。但老报纸和你手机里拍的文档完全是两回事。它们版式密集、栏目交错、字体年代久远还经常被虫蛀水渍破坏传统OCR引擎面对这种页面常常连基本的分栏都识别不出来更别提准确转录内容了。这篇技术报告讲的就是哈佛法学院图书馆的“机构数据倡议”团队和波士顿公共图书馆联手打造的一套处理流水线专门用来把这堆看似不可读的老报纸变成机器能理解、能检索、能训练AI的结构化数据。最终的产出相当惊人从147万多张扫描件里提炼出了163亿个o200k_base标准下的文本token覆盖8310万个独立的内容碎片。老报纸为什么这么难啃想象你要在一张写满了字的传单上用尺子把每一段广告、每一条新闻标题都精确框出来而这张传单的排版设计师似乎从来没听说过整齐这个词。这基本就是历史报纸给计算机出的难题。OCR*光学字符识别简单说就是让计算机把图片里的文字变成可编辑、可搜索的文本。在这篇报告成文之前业内已经有不少人尝试过用卷积神经网络处理老报纸比如美国国会图书馆支持的Newspaper Navigator项目还有另一个叫American Stories的数据集两者都用CNN来做版面分割和分类。这些工作证明了CNN在这个场景下确实管用但研究团队没有直接照搬而是选择了一条不太一样的路。他们把分割和分类这两件事彻底拆开做。分割负责回答这张报纸上有哪些独立的内容块分类负责回答这个内容块到底是什么。如果把这两步捏合成一个模型同时训练会出现一个隐藏的坑报纸上广告和正文内容占了绝大多数罕见的漫画、插图占比极小这种类别失衡会拖累整个模型在两个任务上的表现。这就好比让一个学生同时准备语文和数学考试如果两科的题目混在同一张卷子里打分某一科分数占比压倒性地高最终这个学生大概率会为了保证总分而放弃另一科的深入训练。分开考试、分开评分才能让两边都学得扎实。Crop*论文里定义的一个术语指报纸扫描件上被框出来的一个矩形区域可以是一段文字、一则广告、一张图片也就是本文反复提到的内容碎片。第一步把整张报纸切成一个个碎片研究团队选用了YOLO26x作为切分模型的底座这是YOLO26系列里参数量最大的版本5570万参数但相对于动辄几十亿参数的大模型来说依然算得上轻量级选手可以在普通工作站级别的硬件上跑起来。YOLO*You Only Look Once一类广泛用于目标检测的神经网络架构特点是速度快、能在一次前向计算里同时完成定位和识别。为了训练这个模型团队从波士顿公共图书馆的馆藏里随机抽取了1020张扫描件做标注一共标出47485个独立的边界框。这里有个挺聪明的做法210张完全靠人工从零标注剩下810张先用中间版本的模型自动预标注再让人工去审核修正。这种人机接力的标注方式省了不少功夫最终9028个框是纯手工画的剩下38457个是模型预标再人工订正的。如果全靠人工标注1020张报纸上的四万多个框工作量会大到让人望而生畏。但如果完全依赖模型自动生成而不做任何人工审核又会把模型早期的错误一路带到最终数据集里越滚越大。折中的办法是让模型先干粗活人来把最后一道关这跟老师傅带徒弟很像,徒弟先画个草图师傅在草图上改效率比师傅从头画一遍高得多质量也比徒弟自己瞎画强得多。最终模型在153张测试集上的表现是精确率0.927召回率0.910F1值0.918mAP50达到0.955。简单说这个模型基本能准确框出报纸上的绝大多数内容块。研究团队还用了一种叫Eigen-CAM的可视化技术把模型内部关注的区域画成热力图结果发现模型的注意力集中在报头和标题横幅上并且能顺着版面的栏目结构游走这说明模型确实学到了报纸版面本身的结构规律,而不是靠一些偶然的图像特征蒙对的。跑完全部147万张扫描件后模型一共识别出8314万7041个碎片平均每张扫描件切出56.4个碎片。有意思的是19世纪中期的报纸碎片密度明显更高,平均每页超过百个碎片这背后的历史原因报告没有给出定论留给了未来的数字人文研究者去挖掘。第二步给每个碎片做OCR用两套工具双保险这是整个流水线里最烧钱也最烧脑的一环。研究团队最早尝试直接把整张报纸扔给能做OCR的视觉语言模型VLM去识别效果一开始看着挺唬人但复杂或密集的页面上准确率会明显跳水。VLM*Vision-Language Model视觉语言模型一种既能看图又能理解和生成文字的AI模型。这背后是有理论支撑的。已有研究发现版面复杂度和文本行数是预测VLM转录错误率最强的两个因素尤其是对参数量较小的模型影响更大。还有研究指出把大段文字区域整体丢给VLM而不切成小块会诱发退化循环,模型开始不停重复同一个词或字符把错误率彻底推高。退化循环*也叫token loop指语言模型在生成文本时陷入死循环反复输出相同的字符或词语是VLM类模型的一个已知缺陷。成本也是个绕不开的问题。如果用顶级商业模型来处理163亿token量级的文本团队估算成本会落在25万到80万美元之间,这还只是按每百万输出token15到50美元计算的粗略估计。这就像你想给全市的图书馆装修找顶级设计事务所一间间做定制方案当然效果好但预算根本撑不住,你必须找到一套可复制、可控制成本的施工标准哪怕牺牲一点点单间的精致度。于是团队定了一个关键策略把整张报纸切成碎片之后在碎片级别做OCR而且同时用两套工具。一套是老牌的Tesseract 5配合它的tessdata_best模型。Tesseract是开源OCR界的老将了失败模式非常成熟可控很少会像VLM那样一本正经地编造整句话。另一套是专门做OCR的VLM模型dots.mocr只有30亿参数,不算大,但支持多语言、还能解析表格。研究团队一开始用的是它的前身dots.ocr后来新版本发布后就切换过去了。值得一提的是dots.mocr偶尔的幻觉其实歪打正着地帮了忙。报告里举了个例子一张被磨损的扫描件上写着STORAGETesseract识别出一堆乱码TOR \GE Ste age Revs s而dots.mocr居然完整还原出了STORAGE Storage-Rooms may be found on application at The Advertiser Office等于是靠语言模型的脑补能力把破损的文字给修复了。当然这种脑补能力是把双刃剑用对了地方是修复用错了地方就是编造。为了让VLM能在合理的时间内跑完上百万张扫描件团队用vLLM推理框架配上8块NVIDIA L40S显卡还实现了双缓冲机制,下一批数据准备的同时当前批次正在跑推理两边互不等待。最终结果是dots.mocr产出了163亿个tokenTesseract产出了147亿个前者几乎在所有维度上都超过后者无论是总量还是单页平均值。这跟VLM更擅长从密集、装饰性强、甚至受损的内容里抠出文字是吻合的。而在成本上这套本地化方案把整个流水线的运行成本压到了大约2.5万美元,相比商业模型方案省下了几十倍的开支。给每个碎片贴标签它到底是什么内容光有文字还不够得知道这段文字是广告、是新闻正文、还是版头这类装饰性内容。研究团队又训练了两个小模型来干这件事一个基于YOLO26m-cls的图像分类器1160万参数一个基于Model2Vec框架微调的静态词嵌入分类器底座是potion-base-32M。静态词嵌入*一种不依赖注意力机制、计算速度极快的文本表示方法牺牲了一些语义理解的精细度换来极低的计算成本。有意思的是团队没有自己从零标注海量数据而是先用一个300亿参数的开源视觉语言模型Qwen3-VL去自动打标签人工审核了600条样本严格标准下准确率91%放宽一点到94.5%。这个思路跟前面切分模型的标注方式如出一辙,先让强模型打草稿再人工把关效率翻倍。图像分类器最终训练用了18.8万条标注文本分类器用了18.6万条,注意这里图像分类器的样本比文本分类器多出2577条因为其中1740个是完全没有文字的空白碎片,这类碎片对文本分类器毫无意义但对图像分类器来说得靠人工把这些空白碎片旋转90度、-90度、180度来扩容避免这个类别的数据太稀少而让模型学不好。两个分类器各有所长。图像分类器在识别照片或插图这种视觉主导的内容上表现出色F1值0.84比文本分类器的0.48高出一大截对漫画类别更是达到0.92远超文本分类器的0.68。反过来在广告、正文这类文字信号丰富的类别上两者旗鼓相当。这其实很好理解一张照片没有文字可以OCR你光靠文本信号根本判断不出它是什么。但一段密密麻麻的广告文案靠关键词和句式特征就能猜个八九不离十图像信息反而不是决定性的。如果只用单一分类器会怎样团队给出了明确答案两个分类器的意见有90.55%是一致的但最终决策里图像分类器贡献了95.03%文本分类器贡献了95.51%,这意味着两者虽然重合度很高但谁都无法单独replicate最终决策。这就好比医生看病既要听你描述症状,也要看化验单两者缺一不可单靠一项经常会漏诊。最终统计下来广告类碎片数量最多占了59%但正文类碎片虽然数量只占33%却贡献了65.2%的文字token量。这个反差挺有意思的广告版面占地方但字不多正文版面小一些但字密度高。而且这个趋势随着时间推移越来越明显,从1870年代起广告占用的版面面积开始明显超过它贡献的文字量到1920年代这个落差扩大到15个百分点左右说明广告在这段历史里变得越来越重视觉、轻文字。搞清楚一页报纸该怎么读如果你把一张报纸随手拍下来交给机器机器怎么知道该先读左上角还是右下角该沿着栏目竖着读还是跳着读这个问题在学术界叫阅读顺序检测此前已有LayoutReader这类基于Transformer的方案效果不错但计算成本高而且它们通常是在文字片段级别工作的不是碎片级别。研究团队没有选择这条重型路线而是设计了一套基于HDBSCAN聚类算法配合规则后处理的轻量方案。HDBSCAN*一种基于密度的层次聚类算法能自动识别数据里的簇结构不需要预先指定簇的数量。具体流程是这样的先判断每个碎片是窄栏还是宽栏,窄栏的正文碎片先用HDBSCAN根据横坐标聚成一列一列的栏目非正文的窄碎片再按最近距离归到某一栏跨栏的宽碎片则归到上方内容最多的那一栏最后按照从左到右、每栏从上到下的顺序排出阅读路径。这个思路挺像你自己翻一份报纸时的直觉先扫一眼哪些是竖着排的窄栏再顺着栏目往下读遇到跨栏的大标题就先归类到它下方对应的那一段内容里。团队还专门处理了照片和漫画的排序,这类视觉元素按顶边而不是中心点排序确保它们出现在自己配的文字说明之前这也是符合人类阅读直觉的细节打磨。为了验证这套方法靠不靠谱团队标注了723张扫描件作为评测基准。结果显示宏观位置准确率是72.1%微观位置准确率是80.8%肯德尔τ系数分别达到0.922和0.959。肯德尔τ*一种衡量两个排序序列相似程度的统计指标取值范围从-1到1越接近1说明两个排序越一致。这两组数字看起来有落差但恰恰揭示了一个有意思的现象位置准确率要求每个碎片必须排在完全正确的那个精确位置上而肯德尔τ衡量的是整体排序的相对顺序对不对。也就是说哪怕某个碎片没有落在人工标注的确切索引上只要它前后顺序的相对关系是对的肯德尔τ依然会给出高分。这就像你把一副扑克牌按大小排序就算有两张牌前后位置差了一格只要整体从小到大的趋势没乱这副牌看起来依然是排好序的。不出所料照片或插图和漫画这两类的位置准确率明显偏低只有0.494和0.558这跟版面复杂、视觉元素位置本身就不规则有关。研究团队也坦承这套轻量方案没法完美处理特别复杂或独特的版面布局未来可能需要引入Transformer方案来补足。从文字里挖人名、地名、机构名有了干净的OCR文本下一步自然是想办法从里面挖出更细粒度的信息,比如这段话里提到了哪些人、哪些地方、哪些机构。这一步团队用的是Flair框架里的ner-fast模型这是一个拿来即用的现成工具报告里明确说这部分产出是实验性的,团队没有专门针对这个历史报纸集合去做定制化开发。NER*Named Entity Recognition命名实体识别指从文本中自动抽取出人名、地名、机构名等专有名词的技术。过滤规则也很直白置信度低于0.85的直接丢弃只保留人物、地点、机构三类实体重复检测到的同一个实体保留置信度最高的那条。最终结果是全库检测到1.556亿条地点提及、1.422亿条人物提及、4906万条机构提及。排名靠前的地名毫不意外地是Boston866万次、New York416万次、Washington297万次机构类前几名是Congress60万次、Senate43万次、House39万次这些结果和这份报纸集合的地域属性、时代背景高度吻合。不过团队也很坦诚地指出了这个方法的局限历史文本里的人名很多是当代NER模型从没见过的分布外样本OCR质量本身的瑕疵也会传导到实体识别的错误里甚至偶尔模型会把一些带有歧视性的历史用语误判成人名。这类数据可以用来辅助研究但绝不能拿来直接下结论。给每段文字打上话题标签除了知道这是什么类型的内容和里面提到了谁团队还想知道这段文字到底在讨论什么话题。这里用的是一个叫ModernBERT-large-zeroshot-v2.0的模型基于ModernBERT架构做的零样本分类微调版本。零样本分类*Zero-shot Classification指模型在没有专门针对某个具体分类任务做训练的情况下仅凭对语义的理解就能完成分类判断的能力。结果显示全库最常见的主题是商业、金融与市场报告和商业广告与分类信息紧随其后的是科学、技术、健康与农业和政治、国际关系与政府。有个细节值得琢磨这个模型给出的置信度分数波动特别大同一个标签下的标准差在0.08到0.23之间浮动。团队解释说这是零样本分类的固有特性,模型是靠文本蕴含关系去打分的不是靠一个专门训练过的分布去判断天然就会比监督学习模型的置信度更不稳定。这也是为什么团队反复强调这部分产出是实验性的用户不能只看排名第一的标签就下判断得看完整的分数分布。不过好消息是模型给出的第一名和第二名之间的置信度差距平均达到0.457说明模型的首选答案通常是相当有把握的不是随便乱猜的结果。而且从广告类碎片压倒性地对应商业广告与分类信息这个标签、正文类碎片则铺开分布在多个新闻类主题上来看这套主题识别的结果和前面的碎片类型分类是自洽的互相印证。预先算好的向量方便以后检索这一步是为了让整个数据集开箱即用。团队给每个碎片同时生成了图像向量和文本向量图像用的是facebook/dinov2-small2200万参数文本用的还是Model2Vec框架下的potion-multilingual-128M。嵌入向量*Embedding一种把文字或图像转化成一串数字向量的技术语义相近的内容在向量空间里的距离也会相近方便做检索和相似度计算。图像向量是384维文本向量是256维单个碎片的两套向量加起来大约占2560字节。放大到8300多万个碎片图像向量总共约128GB文本向量约85GB合计213GB左右。这一步的意义在于未来任何人想在这个数据集里做语义搜索,比如找出所有和铁路事故相关的内容而不是死板地匹配关键词铁路事故这几个字,都能直接用这些预先算好的向量做检索不用自己重新跑一遍模型。这就像图书馆提前把每本书的内容摘要做成索引卡片你查资料时不用把每本书翻一遍直接查卡片就行。跑这套流水线到底要花多少钱和多少时间团队把整套流水线部署在自己拥有的一台GPU服务器上配置是8块NVIDIA L40S显卡、256个CPU核心、768GB内存。处理时间上两个OCR步骤占了大头。每处理200期报纸为一批dots.mocr的OCR平均要跑28.62分钟Tesseract平均16.48分钟两者加起来占了整批86.69分钟总耗时的一大半。其余十三个步骤加起来反而没那么费时间大多数几分钟就能跑完。如果换成租用云端GPU资源团队估算总成本大约2.5万美元按照总运行时长约1650小时、每小时租用8卡L40S节点约15美元来算。这个数字和前面提到的商业大模型方案25万到80万美元的报价放在一起看差距立刻就出来了,同样是处理163亿token量级的文字选择本地化小模型加合理架构设计的路线成本能压缩到十分之一甚至更低。这背后其实是一整套工程优化在支撑。团队发现YOLO26模型在批量推理时图像预处理环节居然是串行执行的没有充分利用并行计算能力于是自己动手把这部分重写成并行处理再喂给模型。扫描件的读取和解码也做了本地磁盘缓存让下一批数据的读取能和当前批次的计算重叠进行不用来回等待。这些听起来琐碎的细节累积起来对整体效率的影响相当可观。这套数据能拿来干什么又有什么该注意的报告里特别强调了几个使用上的风险提示。版权方面团队只收录了1931年以前出版、在美国确定属于公共领域的报纸内容但也提醒用户,美国境内公共领域不代表在其他司法管辖区也一定没有版权限制。内容方面这些老报纸原原本本反映了它们所处时代的语言和观念里面难免包含种族歧视、性别偏见等今天看来冒犯或过时的表述。团队选择保留原始内容不做删改是为了保留历史语境和研究价值但也提醒读者要带着批判性眼光去看待这些材料不构成对任何议题的平衡呈现。另外命名实体识别、主题分类、种族及移民相关关键词匹配这几项产出都被明确标注为实验性质,团队没有回避这些工具在处理历史文本、尤其是涉及敏感历史词汇时可能出现的局限和风险。在报告的结尾团队也很直白地承认了整套系统目前的边界。这套模型是基于波士顿公共图书馆这一个馆藏训练和测试的换一批版式差异很大的报纸效果很可能会打折扣。阅读顺序检测对严格按栏目排版的报纸效果好遇到不规则版面就容易露怯。而VLM级别的OCR依然是整条流水线里最耗计算资源的瓶颈,团队甚至提出了一个具体设想专门针对历史报纸碎片训练一个更小、更准、更不容易陷入重复循环的定制化VLM作为未来的改进方向。QAQ1这套历史报纸处理流水线一共生成了多少数据A处理了147万3635张波士顿公共图书馆的公共领域报纸扫描件覆盖1795年到1930年最终提炼出163亿个o200k_base标准token涉及8310万个独立内容碎片。Q2为什么不直接用ChatGPT这类大模型来做OCR反而要自己搭一套流水线A成本和稳定性都撑不住。用顶级商业模型处理163亿token量级的文本估算成本要25万到80万美元而且大模型在密集复杂版面上容易出现重复循环等错误。团队改用碎片级OCR加本地小模型的方案把成本压到约2.5万美元。Q3这套流水线用了哪些AI模型来处理报纸A包括YOLO26x做版面切分、YOLO26m-cls和Model2Vec做双重内容分类、Tesseract和dots.mocr做双重OCR、Flair做命名实体识别、ModernBERT做主题分类以及DINOv2和Model2Vec生成图文向量。