← 返回 PaperDaily
前沿研究
Persian Pixel来了:343k合成数据把波斯文OCR补上
波斯文OCR最难的不是识别器,而是先把像样的数据喂出来。本文直接用七百万词语料批量合成34万余对图文样本,还把字体、连写、退化、版式一并安排上了,属于“先把地基打平,再谈模型起飞”的典型路线。
龙哥读论文
阅读 4
查看原文
原论文信息如下:
引言
波斯语不是“小语种里随便补一补就能过关”的那类任务。它有强连写、字形随位置变化、点和附加符号极易丢失、还要兼顾从左到右的混排,对OCR来说,几乎是把常规文档识别的老底子都翻了一遍。
更麻烦的是,模型再强也得先吃数据。可波斯文高质量标注又贵又慢,结果就是“想做识别的人很多,能喂给模型的样本很少”,这类经典数据荒,最后往往把进展卡在最前面。
这篇论文的思路很直接:既然真数据难搞,那就把语料、字体、排版、退化一次性程序化做出来,先把波斯文OCR最缺的“粮仓”建起来。对工程团队来说,这种路线的价值很现实——省人工、可扩展、还能按需求定制不同粒度的训练样本。
波斯文OCR长期落后,不是因为大家不努力,而是因为数据供给跟不上模型胃口。现代OCR越来越像“数据驱动的手艺活”,没有足够多、足够杂、足够真实的样本,模型一换字体、一遇到扫描噪声,成绩就容易原地打滑。
论文里点得很明确:现有波斯文资源不是太小,就是字体覆盖窄,要么只盯着某一类文档场景,导致模型很容易学成“偏科生”。这也是为什么本文不是先卷一个更大的识别器,而是先补一套能规模化生产训练样本的体系。
方法概述
这套方法可以简单理解成三步:先找一大批干净的波斯文文本,再把它们按波斯语的书写规则“画”成图片,最后再故意给图片加上各种真实世界里的脏乱差,让模型别只会认“刚印出来的新书页”。
第一步是语料采集与清洗。论文从开放许可来源整理出七百万词以上的波斯文语料,覆盖百科、文学、新闻、政府、公开号、历史文献等不同风格。这样做的目的很朴素:OCR不只是在识别“标准印刷体”,而是在识别真实世界里五花八门的文档语言。
清洗环节也不是摆设。乱码、标记、隐私信息、非波斯字符占比过高的片段、重复句子,都会被过滤掉。合成数据最怕的不是“少一点”,而是“脏一点”,因为脏语料会直接污染后面的渲染结果,最后训练出来的模型也会跟着学歪。
第二步是支撑波斯语形态的渲染流水线。这里的关键不是“把字摆上去”,而是先做字形整形:根据字在词中的位置选择首、中、尾、独立形态,处理连写、连字、附加符号和从右到左的排版,再把这些信息交给渲染器生成真正像样的图像。
这一步很关键,因为波斯文不是“逐字贴图”就能糊弄过去的。比如同一个字母在不同位置会长得不一样,某些字母对还会形成固定连字,如果渲染时不按这些规则来,图片看着像字,模型学起来却像在背乱码。
第三步是多粒度生成。本文同时做了句子级、段落级、页面级三种样本,分别对应常见的行识别、多行识别和整页文档理解需求。这个设计很实用:不同任务吃不同粒度的数据,不必拿整页图去训练只看单行的模型,也不用把页面级任务硬塞进单行样本里。
最后一步是退化增强。论文不是只生成干净图片,而是叠加二十五种以上的随机退化,包括模糊、噪声、纸张老化、阴影、压缩伪影、倾斜、透视变化、墨迹扩散等。目的只有一个:让模型在训练时就见识到真实扫描件和拍照文档的“脾气”。
这也解释了为什么合成数据不是“假数据”的同义词。只要语料干净、渲染正确、退化逼真,合成数据反而比人工标注更稳定,因为它能精确给出像素级真值,还能随时按需要扩规模、换字体、换噪声。
如果把整套流程拆开看,最有价值的不是某个单点小技巧,而是模块之间的接力关系。语料决定内容覆盖,渲染决定字形正确,增强决定真实感,三者缺一块,最后样本都很难拿去训练真正可用的OCR模型。
从工程角度看,这种链式设计的好处是非常明确的:前端语料越丰富,后面可生成的样本空间越大;渲染越忠实,模型学到的就是波斯语的真实书写规律;增强越贴近现实,合成样本越不容易“穿帮”。
波斯语文字的五大“反人性”难点
论文把波斯文OCR的难点拆得很清楚,核心其实就一句话:不是字符少,而是字符的样子太会“变脸”。
首先是连写。波斯文里字母之间会自然连接,一个词不是一个个孤立字符排队站好,而是像手拉手走路。对OCR来说,这意味着传统的字符切分思路很容易失效,模型必须直接学整串序列的对应关系。
其次是上下文相关字形。同一个字母在词首、词中、词尾、孤立时长得都不一样,这种“同字不同脸”的现象,对模型的泛化要求非常高。训练数据里如果某种位置形态太少,模型就会在真实场景里认错。
第三是连字和排版风格。尤其是 Nastaliq 这种风格,字不是老老实实排在一条水平线上,而是有明显斜率和纵向堆叠。它对视觉模型的挑战很像让习惯看横平竖直字母的模型,突然去读一页“倾斜版书法”。
第四是点和附加符号。很多波斯字母只靠点的位置和数量区分,点一旦被模糊、溢墨、压缩或者噪声吞掉,字义就会跟着变。OCR最怕这种“小得不起眼,但错了就很要命”的细节。
第五是双向排版。波斯文是从右到左写,但现实文档里经常混进英文、数字、网址和数学符号,视觉顺序和逻辑顺序并不总是一致。合成时如果不正确处理双向算法,图片和真值就会对不上,训练也就失去意义。
看到这里就很容易理解,这篇工作为什么不是在“比谁模型更大”,而是在“比谁更懂波斯文怎么写”。这类任务里,数据构造能力本身就是方法能力的一部分,甚至比直接换一个更强识别器更值钱。
它最直接的价值,是把波斯文OCR从“少数团队慢慢手工攒样本”的模式,拉到“可批量生产、可复现、可扩展”的模式。对研究者来说,这意味着可以训练更大的模型、做更严格的对比实验;对工程团队来说,这意味着可以更快把系统推到真实文档场景里。
更进一步看,这类数据集还有一个隐藏价值:它不是只服务某一个模型,而是能同时喂给多种OCR架构。无论是传统序列识别器,还是 transformer 方案,甚至整页文档理解模型,只要输入输出格式对得上,都能拿它做训练或微调。
不过这类工作也有边界:合成数据再强,终究还是打印体和数字渲染体,离手写、历史残页、极端版式和真实拍照文档的复杂性还有距离。它解决的是“数据荒”,不是“所有波斯文识别问题”。
局限与展望:手写体、历史文档、跨语言迁移
论文自己也承认,Persian Pixel的边界很清楚:它覆盖的是印刷和数字渲染文本,不包含手写识别;字体虽然不少,但仍受限于高质量开源波斯字体的可得性;页面级布局也还没有完全覆盖历史档案里那些真正“乱成一锅粥”的边注、插注和非线性排版。
但这些限制并不减分,反而说明这条路线是可继续扩展的。下一步如果把生成式手写、历史版式建模和跨语言迁移接上,波斯文OCR才可能从“能读现代印刷件”走向“能读更复杂的真实文献”。
龙迷三问
合成数据会不会不如真数据?不会简单地这么看。真数据当然最真实,但在标注极贵、样本极少的场景里,合成数据往往是唯一能先把系统跑起来的办法。关键不在“真不真”,而在能不能把字体、连写、退化和布局做得足够接近真实世界。
这种数据集能直接拿来训练现成OCR吗?可以作为很强的预训练或微调基础,但通常还需要少量真实样本做域适配。合成数据擅长补“量”和“覆盖面”,真实数据擅长补“最后那一点点现场味道”,两者搭配最稳。
这篇工作的最大启发是什么?别总想着先把模型堆到天上去,很多时候真正卡住进展的,是训练数据根本没准备好。对于低资源、复杂书写系统,先把“数据工厂”搭起来,往往比单点刷榜更有长期价值。
如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~
龙哥点评
论文创新性分数:★★★★☆它不是发明了全新的OCR模型,而是把“如何规模化制造高质量波斯文训练数据”这件事做扎实了。对低资源语言来说,这种基础设施型工作往往比单次刷分更有长期价值。
实验合理度:★★★★☆从语料清洗、字体覆盖、粒度划分到退化增强,链条是完整的,逻辑也很顺。更重要的是,它把每一步为什么要这么做交代清楚了,不是那种“数据很多,应该很强”的空喊。
学术研究价值:★★★★☆波斯文OCR本来就缺公开大规模资源,这个数据集能直接给后续识别、版面分析、文档理解、历史档案数字化提供底座,属于能被后人反复引用的那类贡献。
稳定性:★★★☆☆合成数据的稳定性高,但真实世界的边界也很明确:手写、极端老化、复杂历史排版还没覆盖到位。它能显著缓解数据荒,但不是万能药。
适应性以及泛化能力:★★★★☆多字体、多粒度、多退化的设计,确实是在逼模型学更稳的特征,而不是背模板。只要后续再接一点真实数据微调,泛化前景是不错的。
硬件需求及成本:★★★★☆生成数据比人工标注便宜得多,扩规模也容易;真正的成本主要会转移到训练大模型和做域适配上。对数据侧来说,这已经算很友好了。
复现难度:★★★☆☆思路不复杂,但要把波斯语形态、双向排版和退化增强都做对,工程细节不少。属于“看起来是数据集,做起来是文本渲染工程”的活。
产品化成熟度:★★★☆☆作为OCR训练底座很实用,尤其适合文档数字化、档案检索、内容录入这类场景。不过离直接上线成完整产品,还需要真实业务数据和后处理链路配合。
可能的问题:数据集覆盖的是印刷与渲染文本,离手写和复杂历史文档仍有距离;字体和版式的长尾覆盖有限;如果后续评测只在合成域内打转,容易高估实际效果。最需要警惕的,是把“数据集发布”误当成“问题已经解决”。
波斯文OCR的“数据荒”有多严重?
波斯文OCR最尴尬的地方,不是模型不够聪明,而是能拿来训练的像样数据太少。这就像让厨师做一桌大菜,结果冰箱里只有半根葱和两颗蒜,手艺再好也只能先叹气。
论文开篇就把问题说透了:波斯语使用人数超过一亿一千万人,但OCR成熟度明显落后于拉丁字母语言。原因不是“没人想做”,而是波斯文的书写系统复杂、标注成本高、公开大规模数据集稀缺,三件事叠在一起,直接把数据管道堵死。
更麻烦的是,现代OCR越来越依赖大规模训练。没有足够多、足够杂、足够真实的样本,模型就容易在字体、退化、版式一换之后立刻露馅。也就是说,波斯文OCR面临的不是单纯的算法问题,而是“数据先天不足”的问题。
这也是本文最值得看的一点:它没有继续卷一个更复杂的识别器,而是先解决“喂什么”的问题。对于低资源语言,数据工厂往往比模型工厂更关键,这不是口号,是工程现实。
波斯文看起来像阿拉伯文的近亲,实际做OCR时一点也不“亲”。论文把难点拆得很清楚,核心就是一句话:字符不是静态图标,而是会随位置和上下文变脸。
第一难是强制连写。波斯文不是一个字一个字分开站队,而是自然连接成串。OCR如果还想着先切字再识别,通常会被现实教育得很快。现在主流的端到端序列模型之所以适合它,就是因为绕开了传统字符切分这道坎。
第二难是上下文相关字形。同一个字母在词首、词中、词尾、孤立时,长相都不一样。换句话说,模型识别的不是“字母本体”,而是“字母在不同位置的变体”。如果训练样本里某种位置形态太少,模型就会在真实文档里频繁翻车。
第三难是连字和书写风格。波斯文里有固定连字,最典型的就是 Lam-Aleph 之类的组合;再加上 Naskh 和 Nastaliq 两种主流风格,前者相对规整,后者斜着挂、上下堆、还会交叠,视觉上像是字在“走艺术路线”。模型如果只见过规整字体,碰到 Nastaliq 就容易懵。
第五难是双向排版。波斯文从右到左写,但现实文档里经常夹着英文、数字、网址和数学符号,视觉顺序和逻辑顺序并不完全一致。这个问题看似排版,实际上会直接影响合成数据的真值对齐,处理不好就等于训练时喂了“图文不一致”的假样本。
看到这里就很容易明白,本文做的不是“再造一个更大的识别器”,而是先把波斯文的书写规律、版式规律和退化规律都摸清楚。对于这类任务,懂语言的书写方式,本身就是方法的一部分。
Persian Pixel 的方法路线很清楚,可以概括成三步:先找足够好的波斯文语料,再把文字按正确的波斯语规则渲染成图片,最后给图片加上真实世界里常见的各种退化。看起来朴素,但每一步都卡在波斯文OCR的要害上。
先说语料。论文整理了超过七百万词的开放许可波斯文文本,来源覆盖百科、文学、新闻、政府、公开号、历史文献等多个领域。这样做的目的不是为了“词多好看”,而是为了让模型见到更广泛的词汇、语气、句式和专业表达,避免只会读某一种文风。
清洗环节也很扎实。乱码、残留标记、隐私信息、非波斯字符占比过高的片段、重复内容、过短或过长的段落,都会被筛掉。合成数据最怕“脏源头”,因为一旦语料不干净,后面再怎么渲染都只是把脏东西画得更漂亮一点。
再说渲染。这里的关键不是简单把文字贴在白底上,而是要做形态感知渲染。所谓形态感知,就是先根据字符在词中的位置,决定它该用哪一种字形;再处理连字、附加符号、右到左排版和双向文本;最后才生成真正符合波斯文视觉习惯的图像。
这一步的重要性怎么强调都不过分。因为如果直接逐字拼贴,生成出来的图像会像“字符拼图”,看着像文本,实际上不符合波斯语的真实书写规则。模型一旦吃到这种假样本,学到的就是错误先验,后面想纠正都费劲。
接着是多字体策略。论文选择了七种字体,覆盖现代 Naskh、经典 Naskh 和 Nastaliq 等风格。这个设计很像给模型安排“字体见习期”:同样的内容换着长相出现,逼模型学字体不变的结构,而不是死记某一套模板。
这三步连起来,才构成了 Persian Pixel 真正的价值。语料负责“说什么”,渲染负责“怎么写”,增强负责“怎么坏”。三者一接上,合成数据就不再是纸上谈兵,而是能直接给 OCR 模型喂进去的训练燃料。
一句话说透:它把波斯文OCR从“靠少量人工标注硬撑”变成“可以批量生产、反复复用、持续扩展”。对研究者而言,这意味着可以做更系统的模型训练和对比;对工程团队而言,这意味着可以更快把系统落到真实文档场景里。
更重要的是,这种数据集不是只服务某一个架构。无论是基于 transformer 的识别器,还是整页文档理解模型,只要任务形式匹配,都能拿来训练或微调。论文也明确提到,它可以作为 TrOCR 和 Donut 这类模型的训练和适配底座。
这里顺手解释两个缩写。OCR 是 Optical Character Recognition,中文叫“光学字符识别”,就是把图片里的文字变成可编辑文本;Nastaliq 是波斯语中非常经典的一种书法/排版风格,特点是斜势明显、字形流动感强,历史文献里很常见,但对机器识别并不友好。
不过也别把开源数据集想成万能钥匙。合成数据再强,终究还是以印刷和渲染文本为主,离手写、极端老化、复杂历史版式还有距离。它能把“数据荒”填平,但不能自动消灭所有真实场景里的长尾问题。
论文对局限说得很诚实。第一,它只覆盖印刷和数字渲染文本,没有进入手写识别;第二,字体覆盖虽然比以前宽,但仍受限于高质量开源字体的可得性;第三,页面级布局还没完全覆盖历史档案里那些边注、插注、非线性排版的复杂情况。
但这些限制并不减分,反而说明这条路线是能继续往前推的。下一步如果把手写合成、历史版式建模、跨语言迁移接上,波斯文OCR才可能从“能读现代印刷件”升级到“能读更复杂的真实文献”。
从行业角度看,这类数据集还有一个更大的意义:它把低资源语言技术的门槛往下压了一截。过去很多能力只集中在有大预算的团队手里;现在只要数据底座做得足够好,中小团队也有机会在波斯文文档数字化、档案检索、内容录入等场景里做出可用系统。
龙迷三问
这篇论文到底解决了什么问题?它解决的是波斯文OCR最基础、也最卡脖子的问题:没有足够多、足够好的训练数据。与其让模型在稀缺真数据上硬扛,不如先用高质量合成数据把规模、字体、退化和版式都补起来。
文中的“多粒度”是什么意思?就是数据同时包含句子级、段落级和页面级三种样本。句子级适合行识别,段落级适合多行文本,页面级适合整页文档理解,不同任务各取所需,避免一套数据硬套所有模型。
合成数据为什么能帮到OCR?因为OCR最需要的是“图文配对准确”的大规模样本,而合成数据可以在几乎零人工标注成本下生成大量样本,还能精确控制字体、退化和布局。只要生成规则足够贴近真实世界,它就能成为很强的训练底座。
龙哥点评
论文创新性分数:★★★★☆创新点不在新模型,而在把波斯文OCR最缺的“高质量大规模合成数据”真正做成了体系。对低资源语言来说,这类基础设施型工作很有分量。
实验合理度:★★★★☆语料清洗、字体覆盖、多粒度生成、退化增强的链条是完整的,逻辑也顺。不是单纯堆样本数量,而是在尽量逼近真实文档分布。
学术研究价值:★★★★☆它能直接支撑后续OCR、版面分析、文档理解、历史档案数字化等任务,属于可被长期复用的底座型资源,研究价值比较扎实。
稳定性:★★★☆☆合成数据本身稳定,但覆盖边界仍然清楚,尤其是手写、极端历史文档和复杂非线性版式还没完全覆盖。能显著缓解问题,但不是终点。
适应性以及泛化能力:★★★★☆多字体、多粒度、多退化的设计,确实是在逼模型学更稳的特征,而不是只记模板。后续再配少量真实数据,泛化前景更好。
硬件需求及成本:★★★★☆生成数据的成本远低于人工标注,扩规模也容易。真正的成本会转到模型训练和域适配上,但数据侧已经很友好了。
复现难度:★★★☆☆思路不复杂,难点在工程细节。波斯语形态、双向排版、退化增强都要做对,属于“看着像数据集,做起来像渲染工程”。
产品化成熟度:★★★☆☆适合作为OCR训练底座,尤其适合文档数字化和档案检索场景。但要直接上线成完整产品,还需要真实业务数据和后处理链路配合。
可能的问题:覆盖的是印刷和渲染文本,离手写和复杂历史文档仍有距离;字体和版式长尾覆盖有限;如果只在合成域里评估,容易高估真实效果。最需要警惕的是把“发布数据集”误当成“问题已解决”。
主要参考文献
[1] 原论文中关于波斯文OCR资源稀缺与现有数据集局限的相关综述与引用。
[2] 原论文中提到的 Persian OCR 相关数据集与资源,如 IDPL-PFOD、Arshasb 等。
[3] Jaderberg et al.,合成数据用于文本识别的经典工作。
[4] SynthText,面向自然场景文本的合成数据生成工作。
[5] Persian Pixel 数据集主页:https://huggingface.co/datasets/Omarrran/Persian_Pixel
[6] TrOCR,基于 transformer 的 OCR 模型。
[7] Donut,面向文档理解的端到端 transformer 模型。
[16] SynthOCR-Gen,原论文引用的低资源 cursive script 合成渲染框架。
波斯文OCR最缺的不是模型,是数据。Persian Pixel把“手工抄卷子”这件事,直接交给程序批量干活了。想继续看这种“低成本补数据、真能落地”的论文,欢迎加入龙哥读论文粉丝群,一起把AI论文看明白、看透彻🤘
欢迎加入龙哥读论文粉丝群,
扫描下方二维码或者添加龙哥助手微信号加群:kangjinlonghelper。
一定要备注:研究方向+地点+学校/公司+昵称(如 图像处理+上海+清华+龙哥),根据格式备注,可更快被通过且邀请进群。
波斯文OCR、合成数据、文档理解、图像文字识别相关方向的同学尤其适合来聊聊。