简介:AI生成汉字时,传统OCR裁判只能给出“全对或全错”的二值反馈,无法区分错一笔与错半边。本文从汉字二维构型出发,剖析OCR评估的根本缺陷,介绍基于部件拆解与结构化匹配的细粒度打分思路,为生成模型训练提供更精确的优化信号。
在AI图像生成领域,用强化学习做后期训练已是常见做法。训练过程中需要一个“裁判”来打分,告诉模型生成得好不好。这个裁判通常由OCR(光学字符识别)模型担任。
OCR的打分逻辑非常直接:把生成图片中的文字区域截取出来,送入识别模型,将识别结果与目标文字比对——一致则给分,不一致则不给分。
这套机制在处理英文时基本够用。英文的最小单位是26个字母,单词由字母线性排列而成,识别粒度天然对齐评估粒度。但汉字完全不同。
汉字是一种二维的积木结构。以“尬”字为例,它由“九”和“龙”的变体左右排布拼合而成;“想”字则由“相”和“心”上下叠放构成。这种由偏旁部首按照左右、上下、包围等空间关系组合而成的结构,称为汉字的构型。
这意味着汉字的正确性不是原子化的,而是层次化的:
OCR只关注整字层的识别结果,对下面三个层次的信息完全丢弃。
OCR裁判的核心缺陷在于其打分函数的二值化特性:
score = 1 if OCR(image) == target_char else 0
这导致一个严重问题:无论AI生成的字是写错了一笔、写错了半边,还是结构完全崩坏,只要OCR认不出,得分都是零。模型无法从反馈中得知“哪里需要改进”。
论文中给出了一个典型例子:生成图中“尬”字的结构出了问题,专门的OCR模型将其识别为另一个形近字,判定为0分;而换成多模态大模型去识别,它结合上下文语境“猜”出了正确答案,打了1分——但这是一个假阳性,因为图上那个字形明明是错的,模型只是靠语言能力蒙对了。
还有一类专门检测写错字的工具,能准确判断字形结构有问题,但处理方式是将整个字标记为异常符号“#”,同样打0分。这种方式虽然不会被语言模型的脑补能力欺骗,但依然是非黑即白的判断:对,或者错,中间没有灰色地带。
用一个类比来说明:这就像批改一份100道选择题的试卷,不管学生错一道还是错九十道,给的分数都一样——统统零分。这样的打分方式完全无法告诉学生“你哪里需要改进”,模型也就学不到该往哪个方向优化。
关键洞察在于:汉字的错误不是二值的,而是有程度之分的。
一个汉字可能:
这些错误在严重程度上差异巨大,但OCR裁判将其全部映射为同一个分数:0。
这种信息损失直接导致:
解决思路的核心是:将汉字评估从整字级别下沉到部件与结构级别。
将目标汉字拆解为部件序列,例如:
尬 → [九, 龙] (左右结构)想 → [相, 心] (上下结构)回 → [口, 口] (包围结构)
对生成图片分别评估每个部件是否正确生成、位置是否合理。
部件之间的空间关系需要单独建模和评估:
可以设计一个分层打分函数:
total_score = w1 * structure_score+ w2 * component_score+ w3 * stroke_score+ w4 * recognizability_score
其中各分量分别评估结构关系、部件完整性、笔画准确性和整体可识别性。权重可根据具体任务调整。
采用结构化细粒度评估后,训练信号的信息密度大幅提升:
| 评估方式 | 反馈信息量 | 优化方向明确性 |
|---|---|---|
| OCR二值打分 | 1 bit | 无 |
| 结构化分层打分 | 连续向量 | 明确到部件/结构级别 |
模型可以学到:
汉字生成的评估不能简单套用英文OCR的思路。汉字作为二维构型文字,其正确性分布在整字、部件、结构、笔画多个层次上。传统的OCR裁判将所有错误压缩为一个零分,导致训练信号极度稀疏。通过将汉字拆解为部件与结构关系,设计分层细粒度的打分机制,可以为生成模型提供更丰富、更精确的优化信号,从而真正提升AI生成汉字的准确率和质量。
这一思路的通用性原则——评估粒度应与生成任务的语义粒度对齐——也可以推广到其他结构化生成任务中,例如表格生成、公式生成、流程图生成等场景。