拆开汉字看构型:让AI写对中文字的细粒度打分法

作者:沙与沫2026.11.04 00:19浏览量:0

简介:AI生成图像里的中文常常缺笔少画、部件错位,一个深层原因是训练时用OCR当裁判,只给整字级“对/错”二值分,模型无从得知错在哪里。本文拆解一项将汉字按笔画、部件、空间关系分层评分的研究思路,剖析信用分配失效、形近字误读、语言模型假阳性三类裁判失真,并给出防奖励作弊等工程落地要点与通用设计启示。

文生图模型已经能画出以假乱真的光影与人脸,却常常在“写字”上翻车——尤其是写汉字。近期一项研究指出:问题不全在生成模型本身,更在给它打分的“裁判”。本文从问题根源出发,拆解这套把汉字按结构逐层评分的思路,并延伸到工程落地与通用启示。

一、起点:文生图模型的“写字困难症”

近两年,文生图模型在质感、构图上的进步肉眼可见,但“把字写对”始终是块难啃的骨头,中文尤甚。拼音文字只要按线性顺序拼出有限字符集,就能凑出像样的单词;汉字则是几十笔笔画、两三层部件嵌套出的二维图形——某一横写歪、某个部件缺笔、上下位置颠倒,整字就“废”了。

业界主流的改进路径是强化学习式的后期训练:模型生成一批图,由一个“裁判模型”逐张打分,分数作为奖励信号回传,驱动模型朝“写得对”的方向迭代。裁判通常由OCR(光学字符识别)模型担任——即让机器“认字”、把图片里的文字转成计算机可理解文本的技术。

这套流程里有一条容易被忽视的铁律:裁判的分辨率,决定了学生的上限。裁判只会说“对/错”,学生就只能靠盲试去逼近正确答案。

二、OCR裁判为什么带不好“学生”

把现有裁判的失真模式归拢一下,大致有三类,外加一个“治标不治本”的补丁。

1. 整字黑箱,零分零信息。OCR的判决逻辑是“把图里的字截出来识别,与目标文字比对,对了给分,错了不给”。问题在于:写错一笔和写错半边,得分完全一样,都是零。这好比批改一份100道选择题的卷子,学生错1题和错90题统统给0分——分数无法告诉学生哪里需要改进。放到强化学习语境下,这叫信用分配失效:奖励信号里不含任何“哪部分做对了”的定位信息,优化就失去了抓手。

2. 形近字误读,冤枉“差一点”的答案。汉字的部件组合空间极大,结构出错的字往往“长得像”另一个字。OCR遇到这类字,常常老实巴交地把它认成某个形近字,比对失败,0分。写得接近正确的样本可能因被误读而蒙冤,奖励噪声随之增大。

3. 语言先验带来假阳性。论文给了一个很直观的例子:生成图里一个“尬”字结构写错了,专用OCR把它认成另一个形近字,判0分——判断本身没错;换多模态大模型识别,它结合上下文“脑补”出了正确答案,给了1分——这其实是假阳性:图上的字形明明是错的,模型靠语言能力蒙对了。用这种奖励训练,模型学到的不是“把字写对”,而是“写得像到能被猜对即可”,甚至演变成专门糊弄裁判。

4. 专用错字检测工具,仍是二值判决。还有一类专门检测“写错字”的工具,能准确判断该字结构有问题,不会被语言先验骗到,但处理方式是把整个字标记成异常符号,直接打0分。判断粒度依旧非黑即白,中间没有灰色地带。

四类裁判殊途同归:都把汉字当成不可拆分的整体,只输出整字级判决。而汉字恰恰是最“可拆分”的文字之一。

三、换个视角:汉字是天然的二维积木

研究的核心洞察朴素得很:既然汉字本身是组合结构,对它的评价也应该是组合式的。汉字的构型可拆成三层:

  • 笔画层:横、竖、撇、捺、点、折等最小书写单元;
  • 部件层:偏旁部首级别的独立构件,如“木、口、心、辶”;
  • 结构层:部件间的空间关系——左右(“河”)、上下(“想”)、包围(“围”)等。

举例:“想”由“相”与“心”上下叠放,“相”又可拆成“木”和“目”,说明构型还是递归的;“尬”由“尢”与“介”左右拼合。AI写错的字,绝大多数并非“全错”,而是某个部件写歪、缺了一笔,或两个部件位置摆错——错误是局部的,惩罚却是全局的,这正是症结所在。

四、细粒度奖励:把“判决书”改成“诊断单”

该方案的本质,是把整字判决替换成一张逐项打分的诊断单,流程可抽象为五步:

  1. 定位:从生成图中切出目标文字区域;
  2. 分解:按公开的汉字构形规范,把目标字拆成“部件集合+空间关系”;
  3. 对齐:把生成字形与各部件模板对齐到同一坐标系,得到每个部件的预测位置与形状;
  4. 逐项评分:部件数量是否齐全、每个部件的形是否正确、空间关系是否正确(上下不颠倒、左右不换位);
  5. 加权聚合:核心部件权重高、装饰性细节权重低,合成整字分。

示意伪代码:

  1. def char_reward(rendered_glyph, target_char):
  2. # 按构型拆解目标字
  3. comps, layout = decompose(target_char) # "想" -> ["相","心"], 上下结构
  4. # 在生成字形中估计每个部件的位置与形状
  5. boxes = align(rendered_glyph, comps)
  6. score = 0.0
  7. for comp, box in zip(comps, boxes):
  8. score += w_shape * shape_similarity(box, comp) # 部件写得像不像
  9. score += w_pos * position_score(box, layout) # 部件摆得对不对
  10. score += w_layout * layout_consistency(boxes, layout) # 整体结构关系
  11. return score / normalizer

关键变化在于信号形态:分数从“0/1”的阶跃,变成连续的、带空间定位的梯度。一个少写一横的“想”,会拿到“相”部件的高分、“心”部件的低分和满额的结构分——模型一眼便知:问题出在下半部分。

五、三类旧问题如何被逐一化解

对照前文的失真模式:

  • 信用分配失效:部件级评分天然携带“错在哪”的定位信息,优化方向从盲试变成有指引的修正;
  • 形近字误读:相似度是连续量,即使整体像别的字,正确部件仍能保住部分分数,“差一点”不再蒙冤;
  • 语言假阳性:评分基于图形与部件的对齐结果,不依赖语言先验,从机制上抑制了多模态裁判式的“脑补”。

与“标记异常符号打0分”的错字检测工具相比,优势同样明显:从二值判决升级为连续评分,介于“全对”与“全错”之间的海量中间状态终于被区分开——而这部分中间态,恰恰是训练中最有价值的样本。

六、工程落地:三个必须盯住的风险

思路虽好,落地时有三件事要提前设防。

1. 防奖励作弊。细粒度奖励给了模型更多钻空子的路径,例如把高分部件写得格外大来抬高总分。需附加正则约束:整体布局比例、笔画粗细一致性、字形与背景风格的协调,都应纳入扣分项。

2. 拆分规范的一致性。同一个字可能有多种拆法(独体字与合体字之争、嵌套粒度选择),训练与评测必须共用同一套构型规范,否则分数不可比,奖励信号会引入系统性偏差。

3. 裁判的吞吐与成本。部件级对齐比整字OCR更重,而强化学习每步都需要海量打分,工程上通常要做轻量化、批量推理,或采用“粗筛+精评”的两级流水线。企业若想在自己业务里落地类似思路,可以把通用文字识别能力当底座——比如在百度智能云这类云平台上,文字识别属于成熟的通用能力类目,可先用它完成检测、定位、切字等前置环节,再叠加自研的部件级评分逻辑做二次开发。

评测建议采用双轨指标:整字准确率(最终能否读对,面向用户)与部件级得分(写得像不像,面向训练诊断),后者对迭代更有指导价值。

七、延伸思考:结构化的输出,配得上结构化的奖励

这个故事的价值超出中文场景。表格、图表、五线谱、化学结构式……凡是“整体由局部按空间或逻辑关系组装”的生成任务,都适用同一条设计原则:奖励函数应当与输出的真实结构同构分解。

反过来讲,“黑箱裁判+二值奖励”是生成模型训练里最隐蔽的瓶颈之一——它不报错、不崩溃,只是让模型学得慢、学得歪,且难以察觉原因。把汉字拆开看,不只是为了让AI写对几个字,更是为“如何科学地评价生成质量”提供了一个可复用的样板:先理解对象的构造,再让打分逻辑顺着构造走。