财经 >

滚动:BoundInk:当AI学写字时,它到底该在哪里"接笔"

时间:2026-10-20 21:27:01       来源:科技行者

你有没有观察过自己写字的样子?

当你写"the"这个词的时候,t和h之间会不会连起来一点,h和e之间又是怎么衔接的?你大概从来没想过这个问题,因为这是肌肉记忆,是你从小学写字时慢慢养成的、独属于你的习惯。但如果有一天,一台电脑要模仿你的字迹,它最容易学错的地方,恰恰就是这些你自己都没意识到的细节。

这就是这篇论文要解决的问题。


(资料图片)

**手写生成AI,一直在"整体模仿"和"局部失真"之间打架**

先说说什么是"在线手写生成"。

在线手写*:记录的不只是最终写出来的字长什么样,还包括写字的过程,比如笔尖移动的坐标顺序、什么时候抬笔、什么时候落笔。这和"离线手写"不同,离线手写只是一张静态的图片,记录不了写字的动态过程。

想让AI生成一整句话的手写体,难点在于它得同时搞定两件事:字要写得像那个人写的(风格),字与字之间怎么连接、间距多大也要像那个人的习惯(边界行为)。

论文里给这个"边界行为"专门造了几个词,我们先弄清楚:

字形*:某个字符按照特定写字风格画出来的具体轨迹。

字符间边界*:两个相邻字符之间的过渡地带。

边界行为*:在这个过渡地带发生的连笔、间距、相对对齐这些事情。

连笔连接*:笔尖不抬起,直接从一个字符延续画到下一个字符。

字符间距*:两个相邻的、非空格的字符之间的水平距离或重叠程度。

词间距*:由空格造成的水平间隔。

在这篇论文出现之前,主流做法基本都是把一整句话丢给一个长序列模型(比如RNN或者Transformer),让它自己一路生成下去。这类方法包括2018年的DeepWriting、2020年的DSD、还有2025年的OLHWG等等,它们都能生成看起来"过得去"的字形,但连笔断裂、间距生硬这些毛病始终甩不掉。

问题出在哪?这些模型把字符间的过渡关系当成了序列生成中顺带出现的副产品,而不是需要专门盯着学的东西。这就好比让一个新手厨师做一整桌菜,你只告诉他每道菜单独怎么做,却没人教他上菜的节奏和摆盘的衔接,最后端上桌的时候,每道菜可能都不错,但整桌饭吃起来就是怪怪的,衔接不自然。

如果不专门处理这个"接口"问题会怎样?

论文的实验数据给出了答案:在一个叫DSD的对照设置下,原方法的连笔判断F1分数只有0.07,几乎等于瞎猜;换成论文提出的新方法后,直接跳到0.45。这不是一个小修小补的提升,这说明原来的模型对"该不该连笔"这件事基本没学明白。

**把字符间的接缝,从"顺便学"变成"专门学"**

这篇论文提出的方法叫BoundInk,核心思路说白了就一句话:不要让边界处理成为序列生成的意外产物,而是把它当成一个明确的生成目标去训练。

具体怎么做?BoundInk把生成一个字符时需要用到的信息拆成了四块:写什么(字符本身是谁)、模仿谁的字(写作者的整体风格)、这个字该怎么写(这个字符特有的书写细节)、以及它该怎么和邻居打交道(局部边界历史加上句子上下文)。

这里有个很关键的设计,叫二元组感知的滑动窗口Transformer解码器(Bi-SWT decoder)。

Bi-SWT解码器*:一种只关注"前一个字符+当前字符"这个局部窗口的解码器,专门捕捉相邻字符之间的连笔和间距关系,而不是一次性处理整句话。

为什么要限制窗口只看前一个字符,而不是看更长的历史?

论文的解释是,连笔和间距主要由相邻字符决定,如果窗口开得太大,比如同时看三四个字符组成的n-gram,可训练数据里能覆盖到的组合就会急剧变少,模型反而学不扎实。这就好比你想教一个人打招呼的礼仪,如果你非要教他"见到张三李四王五同时出现时该怎么打招呼",这种场景太稀少了,他很难练熟;但如果你只教他"见到任意一个人时该怎么打招呼",练习机会就多得多,效果反而更好。

那句子层面的整体语境怎么办?总不能完全不管吧。

这就是第二个关键设计:门控上下文融合(gated context fusion)。

门控上下文融合*:用一个可学习的"闸门"来控制句子级别的上下文信息,注入到局部字符生成过程中的比例,既不完全忽略全局语境,也不让它压过局部的风格特征。

公式上,模型会算一个介于0到某个上限之间的门控值,决定当前这个token要吸收多少"句子上下文"的信息,剩下的部分继续保留"写作者风格"的信息。这个设计就像调音台上的推子,你不是简单地把两路信号叠加在一起,而是根据情况实时调整每一路信号的音量占比。

如果去掉这个门控融合会怎样?论文的消融实验显示,去掉它之后,连笔F1分数从0.49掉到0.35,掉幅相当明显,但间距相关的指标(KGS、SSS)变化不大。这说明句子上下文信息主要是用来判断"这里该不该连笔",而字符间距的稳定性主要还是靠局部的二元组建模撑着的。两个模块各管一摊,缺一个都不行。

再往深看一层,Bi-SWT到底是怎么运作的。

它构造了一个"预测器窗口",把前一个字符的身份编码、前一个字符的轨迹token、当前字符的身份编码、当前字符的轨迹token全部拼在一起,作为解码器一次要处理的输入。训练的时候用真实数据"喂"给模型(teacher forcing),推理的时候,前一个字符的轨迹换成模型自己刚生成出来的结果,自回归地往下走。

为了让模型知道窗口内谁在前谁在后,论文用了RoPE(旋转位置编码)来编码窗口内的相对顺序。

RoPE*:一种给序列中每个位置打上"相对位置标签"的编码方式,帮助模型区分谁在前谁在后,这里被用在Bi-SWT窗口内部,帮模型分清是前一个字符还是当前字符的信息。

每一步,解码器最终要预测的是一个高斯混合模型的参数,用来描述笔尖下一步移动的方向和距离,同时还要判断当前处于哪种笔的状态。

高斯混合模型(GMM)*:用多个高斯分布叠加起来去拟合一个复杂的概率分布,这里用20个混合成分来描述笔尖移动的方向和幅度的不确定性。

笔的状态一共有四种:落笔移动、抬笔、连笔式的字符结束(CursiveEOC)、普通的字符结束(EOC)。特别值得一提的是CursiveEOC这个状态,它显式地告诉模型"这里字符结束了,但笔还没抬起来,要连着写下一个字",这直接对应着连笔这个书写行为。

**三阶段课程学习:先学字,再学接口,最后学整句话**

光有好的模型结构还不够,怎么训练也很关键。

BoundInk采用了一个三阶段的课程学习策略,从单字到二元组再到整句话,一步步把训练任务变难。

课程学习*:像人类学习一样,先让模型掌握简单任务(写好单个字),再逐步过渡到复杂任务(处理字符间的过渡),最后挑战最难的任务(生成完整句子)。

第一阶段只训练单字的书写;第二阶段引入相邻字符对(bigram),让模型专门学习字符间的过渡关系;第三阶段才加入完整句子的生成,同时保留前两阶段的训练信号,不是替换而是叠加。

为什么不能一上来就直接训练整句话?

这就好比教小孩写作文,如果你一开始就要求他直接写一篇完整的议论文,他大概率连基本的字都写不稳,句子逻辑也理不清,最后写出来的东西每个环节都是半吊子。但如果先让他把每个字写工整,再练习怎么把两个词自然地连起来造句,最后才让他写整篇文章,每一步的基础都打得更扎实,最终成品自然更好。论文里在英文实验设置中,第一阶段用到1万步迭代,第二阶段延续到5万步,第三阶段一直训练到100万步,前两个阶段学到的东西并没有被丢弃,而是作为持续的辅助信号保留在整个训练过程里。

在第二、三阶段,论文还加入了一个叫垂直漂移损失(VDL)的辅助正则项。

垂直漂移损失(VDL)*:专门惩罚相邻字符之间垂直方向上位置不一致的问题,通过比较字符的顶部、中心、底部三个统计量在预测和真实数据之间的差异来计算。

这个设计是为了解决一个具体的痛点:因为模型是按坐标增量(delta)逐步预测轨迹的,误差会一步步累积,写到句子后半段的时候,字可能会莫名其妙地往上飘或者往下沉。VDL就像给写字的人在纸上画了隐形的横线提醒,"你这一笔的高度跟前一个字对不上了,往回调调"。

**怎么评价一个AI写得像不像?光看轨迹重合度是不够的**

这篇论文还提出了一整套新的评价指标,叫连接与间距度量(Connectivity and Spacing Metrics,CSM)。

为什么需要专门造一套新指标?因为传统上评价生成轨迹好坏,用的是动态时间规整(DTW)这种衡量整条轨迹形状相似度的方法,但这种方法测不出局部的连笔对不对、间距合不合理。

动态时间规整(DTW)*:一种计算两条时间序列之间对齐代价的方法,常用来衡量生成轨迹和真实轨迹在整体形状上的相似程度。

论文里举了个很直观的例子说明这个盲区:有些案例里,两个方法的DTW分数几乎打平,差距只有0.004,但用CSM去看,一个方法的连接和间距质量得分是0.339,另一个是0.714,差了整整一倍还多。也就是说,两条轨迹整体形状看起来差不多贴合,但字符之间到底连没连、间距合不合理,完全是两回事。这就好比两份地图的整体轮廓画得都很像,但一份地图上路口的转弯方式全画错了,光看轮廓根本发现不了这个问题。

CSM具体由四个子指标组成。

F1Cursive专门评价每一个字符边界处,模型判断"该不该连笔"判断得准不准,把CursiveEOC当作正类来算精确率和召回率。CRE比较的是生成句子和真实句子在"整体连笔使用频率"上是否接近,因为不同人有不同的连笔习惯,有人爱连笔,有人写字比较断开,这个指标就是看模型有没有学到这种个人偏好。KGS衡量相邻非空格字符之间的水平间距是否合理,SSS则专门看词与词之间因空格产生的间隔是否自然。KGS和SSS都用了一种叫做"重叠感知的对称对数比相似度"的计算方式,既能捕捉相对间距误差,又不会因为不同人写字整体大小不同而失真。

有了这套指标,论文在三个基准对照设置下做了系统的对比实验。

方法 | F1Cursive | CRE | KGS | SSS | DTW(归一化)

DeepWriting基线 | 0.26 | 0.81 | 0.15 | 0.57 | 2.70

BoundInk(对应DeepWriting设置) | **0.33** | **0.84** | **0.41** | **0.61** | **1.41**

DSD基线 | 0.07 | 0.84 | 0.39 | 0.49 | 1.25

BoundInk(对应DSD设置) | **0.45** | **0.90** | **0.44** | **0.63** | **0.99**

OLHWG基线(中文场景) | — | — | 0.34 | — | 0.17

BoundInk(对应OLHWG设置) | — | — | **0.40** | — | **0.14**

这张表最值得注意的地方是,BoundInk不是牺牲全局轨迹相似度换取局部质量,而是两头都占了便宜:DTW反而变小了(数值越小说明轨迹越接近真实数据),归一化DTW在DeepWriting设置下从2.70降到1.41,降幅达到47.8%;在DSD设置下从1.25降到0.99,降幅是20.8%。

论文还专门验证了BoundInk在生成整句话的同时,会不会把单个字符的字形质量给牺牲掉。答案是没有,在SDT兼容的英文和中文单字评测协议下,BoundInk拿到的DTW分数都是所有对比方法里最低的,英文场景从1.6048降到1.3649,中文场景从0.8789降到0.8718。这说明这个方法不是靠"顾此失彼"取得的进步。

**消融实验:两个模块各自的价值,用数字说话**

论文把Bi-SWT和门控上下文融合这两个核心组件拆开来单独测试,做了一个2×2的对照实验。

变体 | Bi-SWT | 上下文融合 | F1Cursive | CRE | KGS | SSS | DTW(归一化)

完整方法 | 开 | 开 | **0.49** | **0.91** | **0.49** | **0.71** | **0.51**

去掉Bi-SWT | 关 | 开 | 0.37 | 0.88 | 0.44 | 0.40 | 0.60

去掉上下文融合 | 开 | 关 | 0.35 | 0.91 | 0.48 | 0.69 | 0.55

两者都去掉 | 关 | 关 | 0.22 | 0.85 | 0.29 | 0.66 | 0.57

去掉Bi-SWT之后,SSS从0.71骤降到0.40,几乎腰斩,说明局部二元组建模对间距稳定性的贡献非常关键。去掉上下文融合之后,F1Cursive从0.49跌到0.35,说明句子级语境对"是否连笔"这个判断至关重要。两个模块都去掉之后,F1Cursive只剩0.22,比完整方法差了一大截,这说明两个模块提供的信息是互补的,谁也替代不了谁。

**人类评委怎么看?盲测结果压倒性**

论文还做了一个30人参与的盲人评审实验,让评委在不知道方法身份的情况下,对比BoundInk和两个基线方法生成的手写,在风格、连接性、间距三个维度上打分。

对阵DSD时,在789个有效的逐项判断中,BoundInk获得了615个偏好票,占比78.0%;对阵DeepWriting时,815个有效判断里BoundInk拿到673票,占比82.6%。分维度看,风格维度的偏好比例最高,对阵DSD时达到73.7%,对阵DeepWriting时达到81.0%。

这个结果和自动化指标的结论是对得上的,说明CSM这套新指标确实抓住了人类真正在意的东西,不是自娱自乐的数字游戏。

论文还专门做了内容和写作者身份的验证实验,用OCR识别器检查生成的字是否还能被正确认出来,用写作者分类器检查生成的字是否还保留着目标写作者的风格特征。

结果显示,BoundInk在OCR识别准确率上和基线方法基本持平,没有为了追求边界质量而牺牲字的可读性;但在写作者风格分类的准确率上,提升非常明显。对阵DeepWriting时,Top-1准确率从35.8%提升到61.7%;对阵DSD时,Top-1准确率从6.0%直接跳到69.0%,提升了整整63个百分点。

**这条路还能走多远**

论文的作者们也坦诚地留了几个开放问题。

未来的方向包括引入可选的序列参考(也就是让模型除了看静态的字符图片参考,也能看一段真实的写字轨迹作为参考),去更精准地捕捉某个写作者独有的边界习惯;还包括扩展到更多文字体系、处理训练数据里没见过的字符组合、以及应对参考样本稀缺或不匹配的场景。另外,自回归生成长句子时误差累积的问题,也需要进一步解决。

论文附录里其实已经做了一个有意思的探索性实验,尝试给模型加一个基于真实轨迹序列的"序列风格参考"(而不只是图片参考),外加一个边界状态的辅助预测任务,专门去缓解长句子生成时的垂直漂移问题。中间检查点的结果显示,这个改进版本的平均漂移比率从0.6999降到了0.4994,降幅将近三成,但论文也很诚实地指出,这个版本在同等训练步数下的DTW反而比原版差,说明这是一个还没有完全调和好的权衡,值得后续工作继续打磨。

Q&A

Q1:BoundInk解决的核心问题是什么?

A:BoundInk要解决的是AI生成手写体时,字符与字符之间连笔断裂、间距生硬、写法不符合特定写作者习惯的问题,它把字符间的过渡关系当作明确的生成目标,而不是序列生成过程中顺带产生的副产品。

Q2:CSM指标和传统的DTW指标有什么区别?

A:DTW衡量的是整条轨迹的全局形状相似度,但测不出局部连笔对不对、间距合不合理;CSM由F1Cursive、CRE、KGS、SSS四个子指标组成,专门评价连笔判断准确性、连笔使用频率、字符间距和词间距,能捕捉DTW测不出的局部边界质量问题。

Q3:BoundInk的Bi-SWT解码器为什么只看前一个字符,不看更长的历史?

A:因为连笔和间距主要由相邻字符决定,如果窗口范围扩大到更长的n-gram,训练数据里能覆盖到的字符组合会急剧减少,导致模型学习不充分,只关注相邻字符对反而能让模型学得更扎实。

关键词: 空格 序列 连笔 接笔 上下文