简介:OCR将汉字视为不可拆分的整体,导致AI生成中文字时缺乏细粒度反馈信号。本文解析汉字构型的分层特性,探讨从“二元评分”到“结构感知奖励”的技术路径,帮助开发者理解如何让生成模型学会笔画与部件级的改进方向,提升中文生成质量与评测可靠性。
在图像生成领域,用强化学习做后期训练已经成为提升生成质量的常见手段。这套流程的核心角色是一个“打分裁判”——它负责评估生成结果与目标之间的匹配程度,并将这个分数作为奖励信号反馈给模型。对于文字生成任务而言,这个裁判通常由OCR(光学字符识别)模型来担任。
OCR的工作逻辑非常直观:从生成图像中截取文字区域,识别其内容,再与目标文字进行比对。完全一致则给满分,否则给零分。这种“非对即错”的二元判断,在英文场景下基本够用——26个字母是最小单元,排列组合即构成单词,识别粒度与生成粒度天然对齐。
但汉字不是线性排列的字母串。汉字是二维积木结构:一个“尬”字由“九”和“龙”的变体左右拼合,“想”字由“相”和“心”上下叠放。这种由偏旁部首按照左右、上下、包围等空间关系组合而成的结构,称为汉字的构型。当一个字包含多个部件、多个层级时,OCR面对的是一个高度复杂的识别目标。
问题由此产生:OCR在处理复杂汉字结构时,经常将整字判定为一个无法识别的符号。它可能瞎猜一个形近字,也可能直接放弃输出。无论AI生成的字是错了一笔还是错了半边,只要OCR最终认不出,裁判给出的分数都是零。这就像批改一份100道选择题的试卷,不管学生错一道还是错九十道,统统给零分——学生完全不知道哪里需要改进,模型也就学不到该往哪个方向优化。
论文中给出了一个非常直观的案例。生成图像中有一个“尬”字,结构已经出现明显问题。专门的OCR模型老老实实地将其识别为另一个形近字,判定错误,打0分。这是真阴性——确实错了,也确实被发现了,但反馈信号只有一个“错”字,没有任何定位信息。
换用多模态大模型来识别,它结合上下文语境,“猜”出了正确答案,打1分。但这其实是假阳性——图上那个字形明明是错的,模型只是靠语言能力蒙对了而已。这种假阳性比假阴性更危险,因为它给了一个错误的奖励信号,让模型以为自己写对了。
还有一类专门检测“写错字”的工具(如TextPecker),它能准确判断出该字结构存在问题,但处理方式是将其整个标记为一个异常符号“#”,直接打0分。这种方法虽然不会被语言模型的“脑补”欺骗,但同样是非黑即白的判断:对,或者错,中间没有灰色地带。
三类裁判,三种失败模式:
汉字的错误本来就有程度之分。一个部件的位置偏移几像素,与一个部件完全缺失,显然不是同等程度的错误。一个笔画多了个钩,与整个字写成了另一个字,也应该有截然不同的惩罚力度。
如果裁判只能输出“对”或“错”,模型就无法区分以下情况:
这四级错误从轻微到严重,对可读性和语义的影响逐级递增。理想的奖励函数应该是一个连续谱,而不是一个阶跃函数。
要解决上述问题,核心思路是将裁判的评估粒度从“整字”下推到“结构”。具体来说,可以从以下几个层面构建更精细的奖励信号。
将目标汉字按照其构型分解为部件序列。例如“想”可以拆解为“相”和“心”,进一步“相”可拆解为“木”和“目”。生成结果同样进行部件级检测与匹配。奖励函数可以设计为:
reward = w1 * 部件存在性得分 + w2 * 部件位置得分 + w3 * 部件形状得分
其中部件存在性检测“有没有”,位置得分评估“对不对”,形状得分衡量“像不像”。这样即使整字OCR失败,模型仍能从部件层面获得梯度信号。
汉字的构型关系(左右、上下、包围、半包围等)可以显式建模为图结构。节点是部件,边是空间关系。生成结果与目标结果在结构图层面进行比对,可以更精确地定位错误类型。例如,如果部件检测正确但空间关系预测错误(左右写成了上下),奖励函数应给出“结构错误”的特定惩罚,而非笼统的零分。
将奖励从二元扩展为多级:
| 错误类型 | 奖励值 | 反馈信号 |
|---|---|---|
| 完全正确 | 1.0 | 保持 |
| 笔画级偏差 | 0.7-0.9 | 微调笔画 |
| 部件形状错误 | 0.4-0.6 | 修正部件 |
| 结构关系错误 | 0.2-0.3 | 调整布局 |
| 整字错误 | 0.0 | 重新生成 |
这种分级奖励可以让模型在不同训练阶段聚焦不同层次的问题——早期先学结构和部件,后期再精修笔画细节。
在实际系统中落地结构感知奖励,需要考虑以下工程细节:
汉字生成的评估不能停留在“OCR认不认得出”这个层面。汉字本身的二维积木结构决定了它的错误天然具有层次性和程度性。将裁判从“整字黑箱”升级为“结构感知系统”,让奖励信号从二元变为连续谱,是提升中文生成质量的关键一步。这不仅是一个算法问题,更是一个对汉字结构本质的理解问题——只有尊重汉字的构型规律,AI才能真正学会“画对”中文字。