
2026年,一个叫Kunat Pipatanakul的研究者面对一个很尴尬的局面:泰语文档遍地都是,但能用来训练AI识别泰文的标注数据少得可怜。
这不是小事。
泰文有自己独特的字母系统,声调符号和元音符号能叠在辅音上下好几层,这意味着你没法像训练英文或中文OCR那样,直接把已有的模型拿过来微调一下就能用。
想让机器读懂泰文文档,你得从头教它认识每一个字符,而教材,也就是那些"图片配对应文字"的标注数据,却严重短缺。
更麻烦的是,现有的解决办法都不太靠谱。用PDF直接提取文字,经常会漏掉字符,还会把声调符号的顺序搞乱。用OCR做伪标签,同样容易出错。人工校对倒是准确,但成本高得离谱,不可能覆盖海量文档。
这篇论文要回答的问题很直接:如果没有真实的标注数据,只靠"合成"出来的假数据训练模型,泰文OCR能做到多好?
这个问题看似简单,但里面藏着一个更深的坑:什么样的"假",才能让AI学到"真"本事?
**为什么"逼真"这个词本身就是个陷阱**
在深入之前,得先说清楚一件容易被忽略的事。
合成数据*:用程序自动生成的、带有精确标注的训练数据,比如让电脑自己"画"出一页文档并同时记录每个字符是什么、在哪个位置。
很多人以为,合成数据要做得"逼真"就行了,看起来越像真实文档,效果就应该越好。
但这篇论文戳破了这个想当然的假设。"逼真"其实是好几个完全不同的因素捆在一起的模糊说法:文档来自什么领域、页面上除了文字还有什么背景元素、用的什么字体、文字在页面上怎么排布、手写字迹是真人写的还是电脑仿造的。
这些因素混在一起讨论"逼真不逼真",就像医生说"你这个人不太健康"却不说清楚是心脏问题还是血糖问题,听起来是个判断,但完全没法指导治疗。
研究团队决定把这些因素一个个拆开,单独测试每一个到底有没有用。
这才是这篇论文真正有价值的地方,不是简单地说"合成数据有效",而是精确地告诉你,合成数据里哪个部分在起作用,哪个部分其实是摆设。
拆解合成数据:一套可以精确控制变量的"文档重建"流水线
研究团队设计了一套叫做文档重建的方法。
思路是这样的:拿一份真实存在的文档,可能是泰文的,也可能是英文的,保留它原本的页面布局、文字区域的位置,然后把区域里的原始文字擦掉,重新填入你想要的文字内容,再用你指定的字体或手写笔迹渲染出来。
这套流程的关键在于,它能把"文档从哪个领域来"、"背景里有没有非文字内容"、"用了几种字体"、"文字是否保留二维排布"、"手写笔迹是电脑仿的还是真人写的"这五个变量,一个一个单独打开或关闭,其他条件全部保持不变。
这就像做菜实验时控制变量。你想知道到底是盐放多了还是火候不对导致这道菜难吃,唯一办法就是每次只改一个变量,其他全部锁死,做出十份菜来对比。如果你同时改了盐量、火候、下锅顺序,最后菜难吃了,你根本不知道该怪谁。
如果不做这种拆解,直接把一整套"看起来很真实"的合成数据扔给模型训练,效果好也好不到点子上,效果差也不知道该往哪改。
文档重建*:一种数据生成技术,保留原始文档的版式结构和文字区域标注,把区域内的文字替换为新内容并重新渲染,从而在保持真实版式的同时获得精确的文字标注。
图1里详细画出了这套流程。简单说分三步:第一步,如果源文档是泰文的,直接用它原本的OCR标签;如果是英文的,就翻译成泰文。第二步,把原来的文字像素擦掉,用HarfBuzz这个文字排版引擎把新的泰文文本按照原区域的形状"塑形",因为泰文翻译后长度经常和英文原文对不上,声调符号还可能占据多个垂直层级,所以要不断缩小字号直到能塞进原来的框里,塞不下就直接放弃这一页。第三步,把处理好的文字渲染回原来的区域,可以用采样出来的字体,也可以用真实手写笔迹的字形。
HarfBuzz*:一个开源的文字整形引擎,能把文字按照特定语言的排版规则(比如泰文声调符号的垂直堆叠)正确渲染出来。
这套流水线生成了两种数据源:一种叫域内合成,直接用真实泰文文档做底子,只是把文字擦了重写;另一种叫域外合成,用公开的英文文档(比如DocLayNet、Crello、PubTabNet这几个数据集)做底子,把文字翻译成泰文后重新渲染。
训练粒度决定了什么数据管用:页级和裁剪级的分野
在讲实验结果之前,得先弄清楚这篇论文里反复出现的一个关键区分:页级训练和裁剪级训练。
页级训练*:模型一次看整张文档图片,输出整页所有区域的文字和排版信息。
裁剪级训练*:模型只看一个被裁剪出来的小区域(比如一段文字、一个表格),单独识别这个区域的内容,页面的其他区域由一个专门的版面检测器先框出来再逐一喂给模型。
这个区别听起来只是技术实现上的差异,但实验结果显示它彻底改变了"哪种合成数据更好用"这个问题的答案。
以Heldout测试集(301页真实泰文印刷文档)为例,在页级训练下,用域内合成数据训练出来的模型,字符错误率的中位数是1.82%,而用域外合成数据训练出来的模型是5.07%,域内数据明显更好。
但换成裁剪级训练,情况完全反转:域内合成数据的字符错误率中位数飙升到15.59%,而域外合成数据反而只有5.52%。
字符错误率*:衡量OCR识别准确度的指标,指模型输出的文字和真实文字之间需要修改多少个字符才能对齐,数值越低说明识别越准。
这个反转很反直觉。按理说,用真实泰文文档做底子生成的"域内"数据,应该处处比用英文文档翻译来的"域外"数据更贴近真实场景才对,怎么会在裁剪级训练下反而变差?
论文里坦诚承认,这个现象的具体原因还不清楚,需要进一步研究。但这恰恰说明了一件事:合成数据的效果不是一个孤立的属性,它和你打算怎么用这批数据是绑在一起的。同一份数据,换个训练方式,结论可能完全不一样。
这就好比同一把螺丝刀,用来拧螺丝很好用,但你要是拿它去撬东西,可能比一根铁棍还差。工具好不好,从来不是脱离使用场景孤立评价的。如果你不问清楚"用在哪个场景"就直接下结论,很可能得出错误的最优选择。
背景噪声不重要,字体多样性和二维排布才是真功夫
回到最基础的那个拆解实验,研究团队想搞清楚,在域外合成数据里,去掉背景、去掉字体多样性、去掉二维排布,分别会造成多大的伤害。
结果显示,去掉非文字的背景内容(比如把整个页面背景换成纯白色,只保留文字区域),对识别效果几乎没有一致性的影响,中位数误差变化最多只有1.62个百分点,有时候甚至变得更好。
这个结果有点出乎意料。直觉上你可能会觉得,背景越丰富,模型见识的场景越多,应该越有帮助。但数据摆在那,背景噪声这个因素基本是个摆设。
真正造成明显伤害的是去掉字体多样性。在页级训练下,Handwriting测试集(200页真实手写泰文笔记本照片)的中位数误差从43.99%飙升到49.86%,Easy Handwriting(更易读的手写子集)从38.90%涨到47.55%。裁剪级训练下伤害更大,分别涨了11到13个百分点。
而在印刷体的Heldout测试集上,去掉字体多样性造成的伤害就小得多,只有0.56到2.15个百分点。
这说明什么?字体多样性这个因素,对手写体识别的帮助远大于对印刷体识别的帮助。原因也不难理解,印刷字体本身变化空间有限,模型见过几种主流字体基本就够用了,但手写体的风格千变万化,如果训练数据里只有一种或几种"仿手写字体",模型学到的其实是某个特定字体的样子,遇到真实的、五花八门的手写风格就懵了。
接着去掉二维排布,把原本按页面结构分布的文字区域改成竖着一行行堆叠,手写体的误差又进一步恶化。在裁剪级训练下,Heldout的中位数误差从7.01%跳到9.60%,页级训练下倒是几乎没变。
排布结构和字体多样性,像是两把不同的钥匙,各自对应着模型能不能应付真实世界里复杂多变的文档。背景噪声更像是装饰品,有没有都不太影响事情的本质。
合成数据能有多接近真实标注?答案取决于你问的是"典型情况"还是"极端情况"
接下来一个关键问题是,把合成数据和真实标注数据直接放在一起对比,差距到底有多大。
研究团队用页级训练比较了三种数据源在Heldout测试集上的表现:域外合成数据、域内合成数据,以及直接用真实泰文印刷文档训练的模型。
结果是这样的:真实印刷文档训练出来的模型,中位数误差是1.31%,域内合成数据是1.82%,两者只差0.51个百分点。这说明就"典型的一页文档"而言,合成数据几乎能追上真实数据的水平。
但如果换成看平均误差(把所有字符的错误加总除以总字符数,会被长文档和难例拉大权重),真实数据是9.79%,域内合成数据是16.20%,差距一下子拉大了。
这个反差揭示了一个很重要的道理:合成数据擅长应付大多数"正常"页面,但在遇到极端困难的、罕见的情况时,会显得力不从心。真实数据里那些"疑难杂症",恰恰是合成流水线难以凭空造出来的。
这就好比你训练一个新司机,让他在模拟器里开了几百小时,日常路况处理得游刃有余,中位数表现很好。但真正的马路上偶尔会出现罕见的极端情况,比如突然窜出来的行人、结冰路面上的失控车辆,这些场景模拟器很难完全覆盖。平均下来,模拟器训练出来的司机在这些极端场景里的表现,还是会比真实路况训练出来的司机差一截。
手写体测试的结果更有意思。域内合成数据和真实印刷数据在Handwriting测试集上的表现几乎一样,36.27%对36.14%,说明用真实泰文印刷页面做底子重建出的合成数据,已经能捕捉到大部分从"真实印刷监督"迁移到手写识别的能力。
但只要一加入真实的手写训练数据(Real Thai Print + Handwriting),误差直接降到26.05%,Easy Handwriting更是降到20.79%。这说明真实手写笔迹里,有一种合成印刷体数据无论如何都补不上的"变化性",这个缺口不是靠"文档领域匹配"就能填平的,它指向了手写本身的笔画差异。
手写渲染的最后一公里:字体仿造 vs 真实笔画拼接
既然发现了手写体是最大的短板,研究团队接着做了一个更细致的实验:到底是"用手写风格的字体渲染"就够了,还是必须"用真人写的笔画拼接"才能进一步缩小差距。
这里出现了两种渲染方式。一种叫手写字体渲染,从693种字体家族里挑出带手写风格的字体来渲染文字,相同字符用同一套字体会共享同一个笔画轮廓。另一种叫真实字形渲染,直接从一个真人手写笔迹库里,为每个字符随机抽取一个真实写出来的笔画实例,同一个字符在不同位置可能用不同人写的不同笔迹。
真人手写笔迹库*:论文中提到的一个包含5953个实例、覆盖76个字符类别的图像库,这些图像是从真实的泰文手写笔记本照片和公开手写数据集中,通过目标检测、OCR对齐、视觉语言模型验证等多道工序筛选提炼出来的。
结果显示,仅仅换成手写风格字体,就已经能明显改善手写识别,Handwriting测试集的中位数误差从43.99%降到38.65%。但如果进一步换成真实笔画拼接,误差继续降到37.91%,Easy Handwriting更是从34.84%降到30.66%。
这个差异证明了一件事:手写风格的字体只是"看起来像手写",但同一个字符每次出现都长得一模一样,这和真实世界里同一个人写同一个字、每次笔画都有细微差别,是完全不同的两回事。真实笔画拼接把这种"人写字的不确定性"带了进来,模型因此学到了更接近真实场景的变化模式。
但即便用了真实笔画拼接,距离真正用真实手写数据训练的模型(26.05%)还是有一段差距。论文里提到,这个真人笔迹库目前只有5953个实例,数量还不算大,如果扩充这个库的规模,效果可能还能进一步提升,但这个问题留给了未来的研究。
把发现落地:Wayu-Paxa-OCR-Zero,一个完全没见过真实泰文标注的模型
有了这些拆解出来的经验,研究团队把它们整合起来,训练出一个真正拿得出手的模型,叫Wayu-Paxa-OCR-Zero。
这个模型的基础是PaddleOCR-VL-1.6,一个0.9B参数(约9亿参数)的视觉语言模型,研究团队在它之上,用45723页完全合成的数据做了训练。
这里有个细节值得强调:训练数据里没有一张真实泰文文档的图片被当作源页面,所有的字符标注都来自合成流水线的输出、源区域标注,或者已知的模板和字段字符串。也就是说,这个模型是彻头彻尾靠合成数据"无中生有"训练出来的。
具体数据构成上,研究团队做了三点扩展。第一,把之前研究中7131张手写页面的两种渲染版本(手写字体版和真实字形版)都保留下来一起训练。第二,额外加入两批专门针对手写的合成页面,一批是3000张全用手写字形渲染的DocLayNet页面,另一批是999张直接把真人手写数据集里裁剪出来的图片贴进去的合成页面。第三,加入2190份从公开的CommonForms模板重建出来的填写表格,表格里的字段数量特意匹配了真实泰文表格的常见规格,用来补上表格类文档这一块的覆盖。
训练完成后,效果对比非常直观。相较于基础模型PaddleOCR-VL-1.6,Wayu-Paxa-OCR-Zero把Heldout测试集的中位数字符错误率从6.64%降到1.24%,Handwriting测试集从74.87%降到20.55%,Easy Handwriting从73.74%降到14.18%。
更值得说的是,这个只有0.9B参数、完全靠合成数据训练的模型,在全部五个评测集上都超过了Typhoon OCR的7B版本,也就是那个当时被认为代表泰文OCR开源领域最高水平的模型。
Typhoon OCR是什么?它是此前泰文OCR开源领域的标杆模型,由传统OCR、视觉语言模型重构和精心策划的合成数据混合训练而成,训练管线更复杂,模型规模也更大(7B参数是Wayu-Paxa-OCR-Zero的近8倍)。
不过公平地说,Wayu-Paxa-OCR-Zero和更小的Typhoon OCR 1.5(2B参数)版本相比,在Handwriting测试集上打了个平手(20.55%对19.36%),在SEA-DocBench(一个东南亚文档理解基准)上反而更好(4.86%对5.81%),但在Heldout、Easy Handwriting和ThaiOCRBench上还是略逊一筹。而谷歌的Gemini 3.7 Flash这类大型商业闭源模型,在大部分内部测试集上依然是最强的。
这个对比说明,合成数据训练出来的模型已经具备了相当的竞争力,能在参数量远小于对手的情况下打赢一场硬仗,但这不代表合成数据本身天生就比真实数据更优越。它只是证明了,如果没有真实标注可用,合成数据这条路是走得通的,而且能走得相当远。
写在后面
读完这篇论文,最让我意外的不是那个"Wayu-Paxa-OCR-Zero打赢了7B模型"的结果,而是那个裁剪级训练下域内合成数据反而变差的反转。
论文作者自己都没能解释清楚原因,只是老老实实写下"这个现象的原因尚不清楚,值得进一步研究"。这种坦诚其实挺难得的,很多论文遇到解释不了的结果,要么绕开不提,要么硬凑一个听起来合理的解释。这篇论文选择把疑惑摆出来,反而让人更相信这些数据是真的。
还有一个细节,字体多样性对手写识别的影响,比对印刷体识别的影响大得多,这个发现背后其实藏着一个更普遍的道理:当你的目标场景本身就充满变化(比如手写体因人而异),你的训练数据就必须提供同等量级的变化,否则模型学到的只是某种"假象的多样性"。这个逻辑其实可以推广到很多其他领域,不只是OCR。
论文里那个真人手写笔迹库的构建过程也值得单独说一句,从570万个候选字形候选框,一路筛选、比对、验证,最后只留下12090个被视觉语言模型确认过的实例,再精选出5953个组成最终的库。这个漏斗式的筛选比例,某种程度上说明了"真实"这个东西有多难获取,哪怕只是想要几千个干净的手写字形样本,背后也要经过这么多道工序的过滤。
这篇论文没有解决的问题也很明显,那个真人笔迹库的规模还太小,只覆盖了76个字符类别,如果泰文里有更生僻的字符组合没被覆盖到,模型遇到时大概率还是会露怯。合成数据能走多远,这篇论文给出了一个相当乐观的答案,但显然,故事还没讲完。
Q&A
Q1:Wayu-Paxa-OCR-Zero是什么?
A:它是一个泰文OCR模型,基于0.9B参数的PaddleOCR-VL-1.6微调而来,完全用45723页合成数据训练,没有使用任何真实泰文文档的标注,在多个评测集上超过了参数量更大的Typhoon OCR 7B模型。
Q2:合成数据里哪些因素对泰文OCR识别效果影响最大?
A:字体多样性、二维排布结构和真实手写笔画变化影响最大,而页面背景等非文字内容的影响很小,几乎可以忽略。
Q3:为什么域内合成数据在页级训练和裁剪级训练下表现差异这么大?
A:域内合成数据在页级训练下表现最好,中位数误差仅1.82%,但在裁剪级训练下却变差到15.59%,反而不如域外合成数据。论文作者也坦言这个反转现象的具体原因尚不明确,有待进一步研究。







