Bishi-JEPA:端到端书法世界模型研究方案

摘要

本文提出一种面向中国书法的端到端结构化世界模型研究路线。研究对象首先聚焦于已经切分好的智永《真书千字文》单字图像。利用多模态模型结合《黄简书法课程99笔势名称与定义表》,逐字产生笔势候选、粗定位、关系与置信度;再根据字与字之间共享、差分、组合等关系自动生成集合/图结构训练任务。

这些标注和关系并不被视为最终不可改变的“人工真值”,而作为模型训练中的中间结构状态与弱监督。核心模型采用一种带结构瓶颈的 Autoencoder:

x → Z_calligraphy → x̂

其中中间状态不是普通连续向量,而是:

Z_calligraphy = (C, G, B, R)

  • $C$:汉字内容;
  • $G$:裹束/结体状态;
  • $B$:笔势实例及其连续变化;
  • $R$:笔势之间的空间、组合与次序关系。

在这个结构瓶颈内部加入 JEPA 目标:随机隐藏某些笔势、局部或关系,让世界模型根据其余状态预测目标 latent;最终 renderer/decoder 再把完整书法状态还原为原始智永单字图像。因此训练同时包含:

图像重建
+
笔势弱监督
+
集合/关系约束
+
JEPA 表征预测

最终希望得到一个能够从有限智永字迹中压缩出书法规律的模型:

智永字迹 → 笔势与裹束世界状态 → 智永书法世界模型

在应用阶段,用户以硬笔书写目标字,模型主要提取其字符内容与裹束意图,再由世界模型推导智永体系下相应的笔势组织和局部变形,最后渲染成毛笔书法结果。

本文所采用的笔势本体共 99 个笔势,包括:

  • 26 个单一笔势;
  • 5 个张旭五势;
  • 56 个复合笔势;
  • 12 个复杂笔势。

研究的核心问题因此变成:

有限的99笔势、组合关系与裹束状态,能否构成一个足够紧凑的书法世界状态,使模型既能重建已见字,又能预测未见组合,并把硬笔提供的结体意图转换成智永风格的毛笔书法?

1. 研究问题

传统字体生成通常把任务写成:

目标汉字内容
+
风格表示
→
目标字图像

这种方法可以生成视觉上相似的字,但“风格表示”往往很难解释:模型究竟学到了书家的书写规律,还是仅仅学到了轮廓、粗细、墨色等外观统计?

书法研究更关心另一类问题:

  • 同一种笔势在不同字中为什么仍然能被认出?
  • 同一种笔势到了不同结构环境中为什么会发生变化?
  • 一个书家的这些变化是否具有稳定规律?
  • 若一个复杂笔势可以由若干基础笔势组成,模型能否学习这种组合关系?
  • 若一个未见汉字由已经见过的笔势和结构重新组合,模型能否推导出合理的新字?

因此,本项目把研究目标改写为:

作品集合
→
笔势空间
→
书家实现函数
→
未见笔势实例/未见汉字

2. JEPA 提供的核心思想

JEPA 的关键不是“遮住一块图片”,而是:

不要求模型复原所有表面细节,而要求模型在表征空间中预测有意义的目标状态。

传统像素重建可以写成:

x_context→ {x}_target

JEPA 更接近:

$E_c(x_{context})=z_{context}$

$E_t(x_{target})=z_{target}$

$P(z_{context})=\hat z_{target}$

并使:

$\hat z_{target}\approx z_{target}$

对于书法,这一点非常重要。书法模型没有必要首先记住每一个像素,而应该学习:

  • 当前局部属于哪一种笔势;
  • 该笔势在什么结构环境中出现;
  • 它与前后、左右笔势有什么关系;
  • 某书家如何稳定地实现这一笔势;
  • 在新的汉字环境里,它应该如何变化。

因此,JEPA 可以从“图像缺块预测”进一步推广为:

根据其他笔势实例和汉字上下文,预测目标笔势的 latent


3. 为什么“笔势”比笔画或偏旁更适合作为基本组件

可以把书法信息粗略分成:

墨迹像素
→
笔画形迹
→
笔势
→
偏旁/部件
→
整字
→
章法

3.1 笔画通常太细

“一横”“一点”“一撇”只能说明粗略几何类别,却不能充分说明实际书写路线。

以横向笔势为例,99笔势中明确区分:

  • 横仰势;
  • 横势(平势);
  • 横覆势;
  • 策势。

它们同样可能在传统笔画分类里被归入“横”,但在书写路线、方向和动态感觉上并不相同。

撇捺也类似。例如啄势与掠势都属于撇,但一个强调短直斜线,一个强调长弧线。

如果数据只标“横、竖、撇、捺、点”,很多书法信息在进入模型之前已经被压扁。

3.2 偏旁通常太粗

偏旁可以告诉模型:

$清=氵+青$

但“氵”本身仍不是唯一写法。

当前99笔势体系把三点水进一步区分为:

  • 散水势:三点彼此分开,以方向呼应;
  • 流水势:三点全部实连或牵连连续书写;
  • 隔水势:介于散水和流水之间,只有部分实连,其余以虚势相接。

所以:

偏旁身份=氵

与:

实际书写笔势=散水/流水/隔水等

不是同一层信息。

3.3 笔势处在更合适的中尺度

笔势往往同时携带:

  1. 几何信息:方向、曲直、开合、比例;
  2. 运动信息:折、转、滚、趯、牵连、抬笔;
  3. 时序信息:先后关系和连续路线;
  4. 结构信息:包围、相背、相交、占位;
  5. 组合信息:简单笔势可以再次组成复杂笔势;
  6. 上下文信息:同一笔势在不同位置会收缩、伸展或改变连接方式。

因此可以把笔势视为书法模型中的 mesoscopic token(中尺度 token)。


4. 99笔势不是平坦的99分类,而是一套层级语法

如果把99笔势简单做成 99-way classification,会损失它们内部很重要的组织关系。

当前本体天然呈现四层结构。

4.1 第一层:26个单一笔势

它们构成较基础的路线词汇。

点类(10)

右侧势、左侧势、打点势、四角势、曲抱势、两向点、翻捺势、顾左顾右势、悬胆势、蝌蚪势。

横竖类(7)

横仰势、横势(平势)、横覆势、策势、竖努势、纵势、竖裹势。

撇捺类(8)

啄势、掠势、波势、磔势、戈势、漫游鱼、击石波、柳叶势。

趯(1)

趯势。

这些笔势可以被看作较底层的轨迹原语。


4.2 第二类:张旭五势(5)

五势包括:

  • 奋笔势;
  • 竖笔势;
  • 钩裹势;
  • 钩努势;
  • 衮笔势(滚笔势)。

它们尤其值得在模型中单独处理,因为它们不只是某个局部的“形状名称”,还体现了组合和运动模式。

例如:

  • 奋笔势:横起的直线连续组合;
  • 竖笔势:竖起的直线连续组合;
  • 钩裹势:同向弧线连续转动;
  • 钩努势:直线与反向弧线结合;
  • 衮笔势:顺、逆弧线交替滚动。

从机器学习角度,可以把它们理解成介于“token”和“operator”之间的结构:

基础路线
→
复合运动结构

这可能是把书法从字形分类推进到“书写语法”的关键。


4.3 第三层:56个复合笔势

它们按照材料和组合方式进一步形成六组。

点·合点(1)

栗子势。

点·排点(15)

铁铃势、龙爪势、羊角势、布棋势、散水势、流水势、隔水势、开三点、连波势(连波省点势)、顾盼势、三往一复势、各自立势、联飞势、烈火势、悬珠势。

点·联点(4)

鸡头势、群鹊势、菱米势、戏蝶势。

横竖复合(10)

曲尺势、犁梁势、十字势、铁围势、挑土势、玉函势、石楯势、蟠龙势、马桩势、横爻势。

钩趯复合(13)

外略势、虿毒势(虿尾势)、鸟雏势、折钉势(钉势)、冖头势、宀头势、蟹爪势、玉钩势、斸钩势、打钩势(搭钩)、反引势、倚戈势、弯笋势。

撇捺复合(13)

向背势、贯鱼势、交争势、斗鹑势、凤翅势、蟹脚势、飞带势、瞑人势、屈头势、蛇头势、立人势、叠乌势、倚人势。

这些笔势说明:所谓“部件”常常可以进一步解释为一个或若干笔势的结构组合。


4.4 第四层:12个复杂笔势

当前体系中的复杂笔势包括:

三牵绾、曲钩势、阜耳势、邑耳势、节耳势、竹箨势、柳箕势、舞鹤势、狮口势、驼头势、双竹势、戈法。

这些对象已经很接近一段局部“书写程序”。

例如定义中存在明显组合关系:

曲钩势
≈
折钉势/蛇头势
+
玉钩势
阜耳势
≈
曲钩势
+
一竖
邑耳势
≈
曲钩势
+
一竖

但上下文位置不同,使两者在比例和穿插方式上不同。

又例如:

柳箕势
≈
钩裹势
+
向背势
双竹势
≈
Pair(衮笔势)
驼头势
≈
狮口势
+
内部点势

所以99笔势更适合被表示成一张有向图或超图,而不是一个平坦标签表。


5. 从“字的集合”改写成“笔势图”

传统字体数据通常只有:

$(character,image)$

在本研究中,一个字应该变成:

$G_{char}=(V_B,E_R)$

其中:

  • $V_B$:该字包含的笔势实例;
  • $E_R$:笔势之间的关系。

关系可以包括:

  • precedes:书写次序;
  • left_of / right_of;
  • above / below;
  • encloses;
  • connects_to;
  • separated_from;
  • compose_into;
  • variant_of;
  • shares_motion_with;
  • context_modifies。

因此:

字
=
笔势节点
+
笔势关系图

这是后续 Relational JEPA 的基础。


6. “集合论”关系如何进一步落到笔势层

之前可以把汉字粗略写成:

$江\cap湖\approx氵$

或者:

$氵\oplus青=清$

但偏旁层仍然过粗。

采用笔势表示后,可以把它改成:

$B(江)\cap B(湖)$

即比较两个字所包含的笔势子图,寻找共享的书写结构。

例如,“三点水”不必永远映射到同一个模板,而可能映射成:

WaterComponent
→
{
散水势,
流水势,
隔水势,
其他化势
}

这样“共同部分”不再是像素交集,而可以是:

  • 相同笔势身份;
  • 相同组合方式;
  • 相似的 latent movement pattern;
  • 相同书家的实现规律。

更进一步,可以检验 latent 中是否存在近似代数关系:

$z_{parent} \approx F(z_{child1},z_{child2},r)$

而不必强行要求简单线性相加。


7. “书法规律压缩”的数学表达

设笔势词汇:

$\mathcal B={b_1,b_2,\ldots,b_{99}}$

对于书家 $w$,我们希望学习一个书家实现函数:

$R_w(b,c)$

其中:

  • $b$:抽象笔势;
  • $c$:当前字的结构上下文;
  • $R_w$:该书家在这个上下文中如何实现该笔势。

于是一个具体实例:

$z_i = F(z_b,z_w,z_c)$

这里:

  • $z_b$:笔势身份;
  • $z_w$:书家规律;
  • $z_c$:当前上下文;
  • $z_i$:实际墨迹中的实例表示。

一个字可以进一步表示为:

z_glyph
=
Compose
(
{z_b_k^(w,c_k)},
 R
)

其中 $\mathcal R$ 是笔势之间的空间与次序关系。

因此,“压缩一个书家”真正要学习的不是一个模糊的 style vector,而是:

R_w:
(笔势,上下文)
→
具体书写实现

8. 数据集设计

8.1 Glyph 层

每个单字至少记录:

char_id
unicode
writer
work
script_type
image
original_page_position
glyph_bbox
character_structure
source

应尽量保留原始字在字格或页面中的:

  • 大小;
  • 重心;
  • 四周留白;
  • 原始比例。

不要把所有字粗暴拉伸到相同 bounding box,因为这些空间信息本身就是结体的一部分。


8.2 Bishi Instance 层

真正的主要训练单位不是整字,而是笔势实例。

建议字段:

instance_id
char_id
bishi_id
canonical_name
region_type
regions
order_hint
parent_bishi
child_bishi
relations
visual_confidence
structural_confidence
motion_confidence
annotation_source
review_status

其中 regions 不应只允许一个矩形框。

原因是很多笔势天然是非连续区域:

  • 散水势由三个分开的点组成;
  • 顾盼势可能由彼此分开的点/短竖形成;
  • 向背势、贯鱼势由多个撇组成;
  • 一些复杂笔势内部还包含子笔势。

因此更合理的是:

Bishi Instance
=
一个或多个区域
+
关系

而不是:

Bishi Instance
=
一个独占 mask

8.3 Bishi Ontology 层

每个规范笔势建立一个机器可用记录:

bishi_id
canonical_name
aliases
level
family
definition
trajectory_description
composition_children
composition_operator
position_constraints
example_chars
source_lessons

这里 canonical_name 作为训练主标签,括号中的异名、俗名等保存在 aliases。

例如:

canonical_name: 衮笔势
aliases: [滚笔势]
canonical_name: 虿毒势
aliases: [虿尾势]

这样模型标签保持稳定,同时不丢失传统异名。


8.4 Relation 层

建立单独的边表:

subject_id
relation
object_id
confidence
source

例如:

曲钩势  compose_from  折钉势
曲钩势  compose_from  玉钩势
柳箕势  compose_from  钩裹势
柳箕势  compose_from  向背势
双竹势  pair_of       衮笔势
阜耳势  derived_from  曲钩势

最终数据集不是简单图片文件夹,而是一张:

Glyph–Bishi Knowledge Graph


9. 标注成本:不要把“笔势标注”误解为全量像素级 mask

99笔势体系里,相当一部分笔势是关系性和复合性的。要求每个字从一开始就做像素级 segmentation,会非常昂贵,而且概念上也未必正确。

更适合采用三级标注。

Level 0:存在性弱标注

只标:

这个字包含哪些笔势

例如:

字:洪
候选:[散水势, ...]

不要求定位。

Level 1:粗区域/多区域标注

记录:

  • 大致位置;
  • bbox;
  • 多个局部区域;
  • 前后关系;
  • 父子笔势。

这已经足够支持大量 representation learning。

Level 2:精标子集

只对高价值实例做:

  • polygon / mask;
  • 骨架;
  • 可能的起止点;
  • 子笔势分解;
  • 连接类型;
  • 专家确认。

每个高频笔势先精标少量代表样本,再训练 detector / segmenter 扩展到其他实例。


10. 多模态模型作为“笔势预标注器”

现有多模态模型很适合承担数据集生产中的第一轮知识标注。

输入:

I=(单字图像,字符,候选笔势定义,书体/书家信息)

输出不是自然语言评论,而是结构化候选:

{
  "character": "流",
  "candidates": [
    {
      "bishi": "散水势 | 流水势 | 隔水势之一",
      "region": "left component",
      "confidence": 0.0,
      "evidence": ["visual", "character_structure"],
      "needs_review": true
    }
  ]
}

这里最重要的是:模型必须从限定的99笔势本体中检索和判断,而不是自由创造名称。


10.1 以“流”为例

识别出字符“流”以后,模型首先知道左侧承担水旁功能。

但按照当前笔势本体,它不应该直接把左侧统一标成模糊的“三点水”,而应进一步比较:

{散水势,流水势,隔水势}

判断依据包括:

  • 三个点是否全部分离;
  • 是否全部实连;
  • 是否只有一部分实连;
  • 虚势与实势如何衔接;
  • 三点之间的方向呼应。

这说明多模态模型的作用并非只做 OCR,而是:

字符结构知识
+
视觉判断
+
笔势定义检索
→
候选笔势标注

10.2 标注证据要分层

静态图像可以直接观察到的内容,与从书写理论推断出来的动作不应混为一谈。

建议分三种置信度:

Visual evidence

图像可直接看到:

  • 曲直;
  • 方向;
  • 连接/断开;
  • 相交;
  • 包围;
  • 相背;
  • 相对空间。

Structural evidence

由字符知识得到:

  • 左右/上下结构;
  • 所属部件;
  • 字中位置;
  • 邻接关系。

Motion evidence

从最终墨迹间接推断:

  • 抬笔;
  • 踆锋;
  • 趯出方式;
  • 转动方向;
  • 实际手腕运动。

第三类天然应有更低置信度。

静态字帖可以学习“书写规律的可见投影”和“结构组织规律”,但不应轻易声称恢复了真实运动轨迹。


11. 多模态预标注的实际流水线

Stage A:候选检索

根据字符结构和局部位置,从99笔势中先召回 3–10 个可能候选。

例如水旁优先比较散水、流水、隔水等,而不是把99类全部同时交给模型。

Stage B:视觉判别

多模态模型基于图像和定义给出:

  • 候选笔势;
  • 粗定位;
  • 可观察证据;
  • 冲突候选;
  • 置信度。

Stage C:专家校正

专家不必从零标注,而只需回答:

  • 标签是否正确;
  • 候选中哪一个正确;
  • 区域是否需要调整;
  • 是否存在父子笔势关系。

Stage D:训练专用视觉模型

积累一批精标数据后,再训练成本更低的:

  • bishi detector;
  • region proposal model;
  • bishi encoder。

大型多模态模型逐渐退出大量重复推理环节。

Stage E:主动学习

只把:

  • 低置信样本;
  • 新书家;
  • 新书体;
  • 容易混淆的笔势;
  • 少样本复杂笔势

重新交给专家。

这样最符合实际数据成本。


12. 第一类核心训练:Bishi Representation Learning

第一阶段不要急着生成整字。

先训练:

E(image\ region)→ z_b

目标是使同一笔势的不同实例在 latent space 中具有稳定关系,同时保留具体上下文变化。

可以使用:

  • supervised classification;
  • metric learning;
  • contrastive learning;
  • prototype learning;
  • definition–image alignment。

但不应只训练 99 类分类器,因为最终需要保存:

同类中的连续变化

而不只是一个离散标签。


13. 第二类核心训练:Set-to-Instance JEPA

这是最适合书法小数据条件的 JEPA 变体之一。

假设智永作品中有多个同类笔势实例:

$X_b={x_1,x_2,\ldots,x_n}$

先用其中一部分建立该书家的笔势 prototype:

$p_b^w = A(E(x_1),E(x_2),\ldots,E(x_{n-1}))$

其中 $A$ 是集合聚合器。

对新的目标字,只给:

  • 书家的同类笔势 prototype;
  • 目标字结构;
  • 笔势在目标字中的位置;
  • 周边笔势 context。

预测:

$\hat z_{b,target} = P(p_b^w,C_{target})$

真实目标实例由 target encoder 编码:

$z_{b,target}=E_t(x_{target})$

训练:

$\hat z_{b,target}\approx z_{b,target}$

它学习的正是:

同类笔势的稳定规律
+
当前上下文变化

不需要为每个目标制作传统 I-JEPA 式矩形 mask。


14. 第三类核心训练:Compositional JEPA

99笔势内部存在明确的多级组合关系,可以直接用来制造预测任务。

一般形式:

P(z_b_1,z_b_2,r)
→
 z_b_3

要求:

$\hat z_{b_3}\approx z_{b_3}$

例如:

(折钉势,玉钩势,compose)
→
曲钩势
(钩裹势,向背势,compose)
→
柳箕势
(衮笔势,衮笔势,pair)
→
双竹势

这样的任务非常接近“规律学习”,因为模型不能只记忆某一个汉字图片,而必须学习:

某种书写结构是怎样由更基础的势组合出来的。

15. 第四类训练:Graph-JEPA

一个字被表示成笔势图:

$G=(V,E)$

训练时可以隐藏一个节点或子图:

G_context
→
 z_target\ bishi

上下文可以包括:

  • 邻接笔势;
  • 字的结构树;
  • 空间位置;
  • 书家 embedding;
  • 目标笔势类别提示或不提示。

这比纯矩形 mask 更符合书法的结构性。

例如可以隐藏“清”中的水旁笔势,让模型利用:

  • 右部结构;
  • 整字重心;
  • 智永其他水旁笔势实例;
  • 左右结构规则

预测目标 latent。


16. 静态字帖中的“伪时间”

古代字帖没有真实视频,不能直接恢复书写动力学。

但99笔势的定义中包含大量弱时序信息,例如:

  • 横起或竖起;
  • 一横接一竖;
  • 撇后接捺;
  • 先中后旁或先旁后中;
  • 一折一转;
  • 连续转动;
  • 末端再趯出。

因此可以构建:

b_1→ b_2→→ b_k

形式的粗粒度笔势序列或偏序关系。

训练:

P(z_b_1,…,z_b_t,C_char)
→
 z_{b_t+1}

它不能被解释为恢复了真实腕部轨迹,但可以学习:

一个书写组织状态如何过渡到下一个笔势状态。

可以称为 Pseudo-temporal Bishi-JEPA。


17. 书家规律的分离

只有一个书家的数据,很难区分:

汉字共有规律

与:

书家个人规律

所以最好引入多书家数据。

对同一个笔势 $b$:

$z_b^{智永}, z_b^{欧阳询}, z_b^{颜真卿}, z_b^{王羲之}$

可以比较书家差异。

对同一个书家:

$z_{b_1}^{智永}, z_{b_2}^{智永}, \ldots$

则可以寻找跨笔势共享的 writer law。

最终希望得到:

$z_i=F(z_b,z_w,z_c)$

而不是把所有因素混在一个不可解释的大向量里。


18. 文本定义也可以成为训练信号

99笔势的定义本身包含大量结构信息,例如:

  • “三点彼此分开”;
  • “三点全部连续相连”;
  • “横起,横竖直线往复”;
  • “顺、逆弧线交替”;
  • “一撇加一竖”;
  • “撇与捺组成人字形”。

可以训练:

$E_{text}(definition) \approx E_{vision}(instance)$

或者把定义解析为属性:

${direction,curve,connectivity,order,composition,position}$

从而形成多任务监督。

这种做法尤其适合:

  • 少样本笔势;
  • 复杂笔势;
  • 多模态预标注;
  • 新书体迁移。

19. 容易混淆的笔势应该专门做对比训练

99笔势中有一些类别只有抓住关键结构差异才能区分。

例如:

散水 / 流水 / 隔水

关键变量是:

connectivity pattern

玉钩势 / 反引势

外形可能接近,但关键是主笔材料不同:

  • 玉钩势以“裹”为主线;
  • 反引势以“撇”为主线。

曲尺势 / 犁梁势

都属于一横一竖的一折,但比例不同。

奋笔势 / 竖笔势

核心区别是连续直线组合的起势方向与次序不同。

因此训练中应加入 hard negative:

$L_{confusable}$

专门增强模型对相似笔势之间结构差别的敏感度。


20. 核心架构:Structured Bishi-JEPA Autoencoder

本研究可以统一成一个端到端的 Autoencoder 式计算图:

             智永单字图像 x
                    │
                    ▼
              Glyph Encoder
                    │
        ┌───────────┼───────────┐
        │           │           │
        ▼           ▼           ▼
   Content C    Enclosure G   Bishi Slots B
    字符内容       裹束/结体       笔势实例
                                │
                                ▼
                         Relation Graph R
                           笔势关系图
        │           │           │
        └───────────┴─────┬─────┘
                          ▼
                  JEPA World Model
              masked / relational prediction
                          │
                          ▼
                 完整书法世界状态 Z
                          │
                          ▼
                   Glyph Renderer
                          │
                          ▼
                    重建图像 x̂

训练主循环就是:

x → Encoder → (C, G, B, R) → World Model → Z' → Renderer → x̂

并要求:

x̂ ≈ x

从外观上看,这确实是一个 Autoencoder;真正不同的地方是:

latent 不是黑箱向量,而是“书法世界状态”。


20.1 为什么这个设计比“先标注、再单独训练 JEPA”更统一

多模态笔势标注、集合关系和 JEPA 不需要是三个彼此独立的工程。

它们可以分别承担:

  • 多模态标注:给结构瓶颈提供初始弱监督;
  • 集合/图关系:给 latent 提供关系约束和组合任务;
  • JEPA:迫使模型学会“缺失状态可由其他状态预测”;
  • Autoencoder reconstruction:保证这些中间状态最终足以解释真实墨迹。

因此整个系统可以联合优化。

换句话说:

标注

不一定是最终数据产品,而可以是:

latent initialization / weak target

集合论也不一定只是离线扩增数据,而可以成为:

training-time relational constraints


21. 结构瓶颈:防止模型退化成普通 Autoencoder

端到端训练最大的风险是模型找到捷径。

如果直接:

x→ z→ x̂

encoder 很可能把整张字图压缩到一个高维向量里,decoder 直接重建,完全绕过:

  • 99笔势;
  • 裹束;
  • 集合关系;
  • JEPA 世界模型。

因此必须设计一个 Structured Bottleneck。


21.1 Content:字符内容 $C$

表示:

C = 字符内容

对于智永《千字文》,字符标签是已知的,因此可以直接提供 Unicode / character ID,也可以训练视觉识别头做辅助任务。

在第一版模型里,可以把 $C$ 当作外部已知条件,而不要求模型自己 OCR。


21.2 Enclosure:裹束状态 $G$

$G$ 表示整字的几何与结体意图,例如:

  • 整体长宽;
  • 字心;
  • 重心;
  • 左右开合;
  • 上下收放;
  • 部件占位;
  • 内外留白;
  • 疏密;
  • 主次;
  • 外轮廓张力。

不必一开始人工定义每一个维度。

可以先令:

G ∈ R^d

但限制 $d$ 较小,例如 8–32 维,并通过几何辅助任务、硬笔输入和 cycle consistency 逐渐让它承担“裹束”的功能。


21.3 Bishi Slots:笔势实例 $B$

一个字最多分配 $K$ 个笔势槽位:

B = {s₁, s₂, …, s_K}

每个 slot 可以写成:

s_i = (p_i, g_i, a_i, m_i)

其中:

$p_i$:笔势身份

p_i ∈ R^99

是 99 笔势上的概率分布。

例如:

散水势   0.84
隔水势   0.11
流水势   0.03
其他     0.02

这使多模态模型输出的 soft label 可以直接进入训练。

$g_i$:局部几何

例如:

g_i = (x, y, w, h, θ, scale)

表示笔势的大致位置、尺度和方向。

$a_i$:连续变化参数

99类标签不足以表达同一种笔势内部的书家变化,因此还需要连续属性:

  • 长短;
  • 曲率;
  • 开合;
  • 伸缩;
  • 粗细;
  • 局部张力;
  • 与下一势的趋向。

$m_i$:存在概率

用于允许一个字实际只使用部分 slot。


21.4 Relation Graph:笔势关系 $R$

仅有笔势集合还不够。

同样的:

${b_1,b_2,b_3}$

换一种空间关系可能就是完全不同的字。

因此定义:

R_ij

表示笔势之间的关系,例如:

  • left-of;
  • right-of;
  • above;
  • below;
  • encloses;
  • inside;
  • intersects;
  • connects-to;
  • precedes;
  • follows;
  • responds-to;
  • shares-space-with。

因此完整 latent 是:

Z = (C, G, B, R)

它是一张书法状态图,而不是一个普通 feature vector。


22. 多模态模型在端到端系统中的作用

多模态模型主要负责构建弱监督初始化,而不是成为最终生成模型本身。

对于每个已经切分好的智永单字:

(单字图像, 字符, 99笔势定义)

输入:

  • 单字图像;
  • 已知字符;
  • 99笔势规范定义。

输出:

character
candidate_bishi[]
region / bbox
confidence
alternative_candidates[]
visual_evidence
structural_evidence
inferred_motion
relations[]

例如某个局部可以输出:

label:
  散水势 0.82
  隔水势 0.14
  流水势 0.04

evidence:
  structural: 左侧水旁
  visual: 三个局部彼此未形成完整实连
  motion: 不确定

这些结果不必全部人工确认后才能训练。

可以将它们看成:

q_MM(B, R | x)

即多模态教师给出的一个 noisy posterior。

训练过程中学生模型可以逐渐形成自己的:

q_θ(B, R | x)

并通过图像重建、JEPA、集合关系和少量专家金标共同修正。

因此:

多模态模型负责“启动结构”,端到端训练负责“校正结构”。


23. 集合论与图关系如何进入端到端训练

假设 encoder 对每个字输出笔势集合:

B(x)

那么跨字关系可以在训练时在线构造。


23.1 交集:Common

如果两个字共享某个笔势:

B(x_i) ∩ B(x_j)

应该存在可匹配的 slot。

可以定义:

L_common

要求相同笔势的 latent 在跨字条件下保持一致性,同时允许几何和上下文参数不同。


23.2 差集:Difference

对于结构相关的字:

B(A) − B(B)

可以表示“新增了什么”。

例如如果两字只差一个主要笔势,模型应该能识别差分 latent:

Δz

并让同类差分在不同字对之间近似一致。


23.3 并集/组合:Compose

严格说,普通并集不足以表达汉字。

更合适的是:

Compose(B₁, B₂, R)

即把若干笔势在指定关系下组合。

因此:

集合论
→
带关系的集合代数

训练目标可以包括:

L_compose

要求基础笔势和关系能够预测复杂笔势或更高层局部。


23.4 集合关系可以动态生成

不一定需要提前把所有 pair/triplet 数据写死。

训练 batch 中可以动态采样:

  • 共享笔势的字对;
  • 相似结构字对;
  • 一个复杂笔势及其组成项;
  • 一个字和被删去一个笔势后的版本;
  • 一个字和替换笔势后的反事实版本。

这样一千个字可以产生大量关系训练任务。


24. JEPA 如何嵌入 Autoencoder 内部

JEPA 不负责最终像素生成。

它负责学习:

书法世界状态之间的可预测关系。

例如 encoder 得到:

B = {s₁, s₂, …, s₆}

训练时随机隐藏:

s₄

context world state 为:

Z_without_4 = (C, G, {s₁, s₂, s₃, s₅, s₆}, R_visible)

world model 预测:

ẑ₄ = M(Z_without_4, target_query)

target encoder 对真实局部得到:

z₄_target

JEPA loss:

L_JEPA
=
d(ẑ_4,z_4^target)

target branch 使用 stop-gradient / EMA 更新,避免预测器和 encoder 共同塌缩。


24.1 可以 mask 的不只是像素区域

这个系统可以有四种 mask:

Bishi Mask

拿掉一个完整笔势:

B_without_i → B_i

Relation Mask

隐藏一条关系:

R_without_ij → R_ij

Geometry Mask

隐藏某个笔势的位置/尺度:

(B_i, other context) → g_i

Subgraph Mask

隐藏一整个笔势子图:

G_partial → G_missing

相比随机像素 mask,这些任务更接近“书法世界如何组织”。


25. 端到端联合损失

整体损失可以写成:

L=
_r L_recon
+_j L_JEPA
+_b L_bishi
+_g L_geometry
+_R L_relation
+_s L_set
+_c L_compose
+_cycL_cycle
+_capL_capacity

25.1 Reconstruction Loss

L_recon
=
d(D(Z),x)

保证结构瓶颈最终足够解释真实字迹。

可以组合:

  • pixel loss;
  • perceptual loss;
  • edge/skeleton loss;
  • foreground shape loss。

但不能让重建损失过强,否则模型可能主动寻找绕过结构瓶颈的捷径。


25.2 Bishi Weak-supervision Loss

多模态模型给出 soft target:

q_MM(b)

学生 slot 输出:

p_θ(b)

训练:

L_bishi
=
D_KL(q_MM p_)

专家精标样本可以给予更高权重。


25.3 JEPA Loss

L_JEPA
=
d(
P_(Z_context),
sg(E_t(x_target))
)

这是学习世界规律的核心项。


25.4 Set / Relation Loss

包括:

L_common, L_difference, L_compose, L_graph

共同约束 latent 的关系结构。


25.5 Cycle Loss

从书法状态生成图像:

Z → x̂

再编码:

E(x̂) → Ẑ

要求:

Ẑ ≈ Z

这会迫使 renderer 尊重笔势和裹束状态,而不是只追求表面“像”。


25.6 Capacity / Information Bottleneck

为防止某一个 latent 偷偷存下整张图,需要限制:

  • $G$ 的维度;
  • 单个 slot 的连续 residual 维度;
  • slot 数量 $K$;
  • graph hidden size;
  • decoder skip connection。

可以加入:

L_capacity

或使用量化、噪声、dropout、VQ 等方式控制信息容量。

“书法规律压缩”因此变成一个真实的工程约束。


26. 训练策略:最终端到端,但不建议从随机初始化纯联合训练

最终模型应该能够端到端 fine-tune,但第一版工程上更适合分阶段初始化。


Phase 1:准备智永单字集

已有切分好的《真书千字文》单字图,补充:

  • 字符 ID;
  • 原始比例;
  • 页码/坐标;
  • 图像质量;
  • 是否有重复/异体。

Phase 2:多模态批量预标注

逐字产生:

(B_pseudo,R_pseudo)

并保留 soft confidence。

第一版无需全量人工核验。


Phase 3:训练基础 Autoencoder / Renderer

先确保:

x → z → x̂

能够稳定重建墨迹。

但从一开始就限制 latent 尺寸,避免建立一个过强的黑箱通道。


Phase 4:插入结构瓶颈

把黑箱 latent 逐渐替换成:

(C, G, B, R)

加入:

L_bishi + L_geometry + L_relation

让 slot 开始对应笔势。


Phase 5:加入集合/组合任务

引入跨字训练:

L_common + L_difference + L_compose

开始让同类笔势跨字共享表示。


Phase 6:加入 JEPA World Model

随机 mask:

  • 笔势;
  • 子图;
  • 关系;
  • 几何。

训练:

Z_context → Z_target

世界模型在这一阶段真正形成。


Phase 7:Joint Fine-tuning

最后联合优化:

Encoder + World Model + Renderer

也就是:

  • encoder;
  • world model;
  • renderer

一起训练。

多模态 pseudo-label 的权重可以逐渐下降,让 reconstruction、JEPA 和跨字关系承担更多约束。

因此整个项目是:

分阶段建立结构 → 最终端到端联合优化。


27. 端到端模型的关键防作弊机制

端到端设计是否成功,最重要的是防止模型绕过世界状态。

建议至少加入以下限制:

  1. 禁止 encoder–decoder 大型 skip connection,否则 decoder 可以直接拿低层像素。
  2. 限制裹束 latent $G$ 容量,避免其偷偷编码完整字形。
  3. 随机 drop bishi slots,迫使 world model 真正补全。
  4. 随机 mask relations,迫使模型理解结构。
  5. slot permutation invariance,避免 slot 编号暗中变成字符模板。
  6. 跨字共享笔势 prototype,阻止每个字符独立拥有自己的“散水势”。
  7. held-out character 训练拆分,防止纯记忆。
  8. target encoder stop-gradient / EMA,维持 JEPA 的预测性质。
  9. 生成后重新编码的 cycle consistency,检查 renderer 是否服从状态。
  10. 信息容量实验,验证小 latent 是否仍能泛化。

如果不做这些限制,模型很可能最后只是一个复杂的字体 Autoencoder,而不是世界模型。


28. 硬笔输入到智永毛笔书法:应用链路

训练完成后,真正的应用不应该是普通 image-to-image style transfer。

硬笔输入主要提供:

(C, G)

即:

写的是哪个字 + 这个人希望如何裹束/结体。


28.1 从硬笔字提取裹束

设硬笔输入为:

x_h

Hard-writing encoder 得到:

E_h(x_h) → (C, G_h)

这里应该主动忽略:

  • 硬笔粗细;
  • 圆珠笔/铅笔纹理;
  • 笔锋不存在造成的细节;

重点保留:

  • 轮廓占位;
  • 重心;
  • 开合;
  • 内部空间;
  • 部件比例;
  • 疏密;
  • 用户个体结体意图。

28.2 世界模型进行“智永化推理”

给定:

(C, G_h)

以及固定的智永书家条件:

W_智永

world model 推导:

(B_智永, R_智永, G') = M(C, G_h, W_智永)

其中 $G'$ 不一定完全等于硬笔 $G_h$。

模型允许在一定范围内做“智永体系下的修正”:

G_h → G'

即保留用户结体意图,同时满足智永笔势和结构规律。


28.3 Renderer 完成毛笔显影

最后:

D(C, G', B_智永, R_智永) → x_brush

因此更准确的任务名称是:

结构条件下的书家化重新生成。

而不是简单的“毛笔风格迁移”。


29. 世界模型成立需要什么证据

仅仅重建训练字并不能证明模型学到了世界规律。

至少需要以下实验。


29.1 Reconstruction

输入智永原字:

x → Z → x̂

验证中间状态能解释已见字。


29.2 Masked Bishi Prediction

拿掉一个笔势:

Z_without_i → ẑ_i

验证局部能被整体预测。


29.3 Unseen Character Composition

训练不出现某个汉字,但其笔势材料分别出现过:

已见笔势 + 新组合 → 未见字

这是最重要的“世界模型”检验。


29.4 Counterfactual Editing

人为改变:

  • 一个笔势;
  • 一条关系;
  • 裹束参数;

观察模型能否生成合理对应变化。

如果改变 $G$ 只影响结体,而不错误改变字符内容和笔势身份,说明 latent 开始出现可解释分工。


29.5 Hard-writing Transfer

给一组硬笔手写字:

x_h → (C, G_h) → 智永毛笔结果

测试:

  • 是否保留输入结体特征;
  • 是否形成智永笔势;
  • 是否仍是正确字符;
  • 是否在未见字符上有效。

30. Baseline:必须证明“世界状态”确实有必要

至少比较四个系统。

Baseline A:普通 Autoencoder

x→ z→ x

检验纯重建能做到什么。

Baseline B:普通 style-transfer / font-generation

C + style → x

检验传统方法生成质量。

Baseline C:Bishi-conditioned Generator

使用笔势标签,但没有 JEPA world model。

检验“有笔势监督”本身带来的提升。

Baseline D:Structured Bishi-JEPA Autoencoder

完整使用:

(C, G, B, R) + JEPA + relation/set constraints

如果完整模型在:

  • unseen character;
  • masked bishi prediction;
  • counterfactual editing;
  • hard-writing transfer;

上明显优于前三者,才比较有力地支持“书法世界模型”的说法。


31. 智永《真书千字文》的第一版最小可行实验

第一版不需要一次做完全部 99 笔势。

可以先选择 15–30 个高频、视觉上相对清晰的笔势。

推荐流程:

  1. 取已经切分好的智永单字图;
  2. 多模态模型逐字生成笔势 pseudo-label;
  3. 专家只审核一个小型验证集;
  4. 训练 structured encoder;
  5. 训练 renderer 重建智永原字;
  6. 加入跨字 common/difference/compose;
  7. 加入 bishi-mask JEPA;
  8. 留出一批完整字符做 zero-shot composition;
  9. 最后加入少量硬笔输入测试。

这已经足以回答三个关键问题:

  1. 笔势 latent 能否稳定形成?
  2. 缺失笔势能否由书法上下文预测?
  3. 未见字符能否由已见规律组合出来?

如果这三点成立,再扩到完整 99 笔势和更复杂的硬笔迁移会更稳妥。


32. 风险与边界

27.1 笔势不是天然像素类别

一个笔势可能跨越多个断开的墨迹区域,也可能包含子笔势,因此不能简单套语义分割。

27.2 静态墨迹不能完全确定运动

某些定义包含趯、踆锋、抬笔、转动等动作。最终图像只能提供间接证据。

模型输出应区分:

直接观察
 与
动作推断

27.3 99笔势粒度并不完全一致

有些接近基础轨迹,有些是复合局部,有些已接近部件或局部程序。

这不是缺点,反而支持层级建模;但不适合简单平坦分类。

27.4 一个字可能存在多种合理分解

因此数据结构最好允许:

  • 多个候选解析;
  • 专家置信度;
  • 父子层级重叠;
  • alternative parse。

27.5 书家的规律不一定能压缩成一个向量

最终更合理的书家模型可能是一组:

writer-conditioned transformations

而不是一个固定 style embedding。


33. 一个更完整的理论表述

这项研究可以被表述为:

将书法建模为一个可编码、可预测、可重建的结构化世界状态。以99笔势为主要中层 token,以裹束表示整体结体,以关系图表示笔势之间的组织方式;通过 Autoencoder 重建保证状态足以解释真实墨迹,通过 JEPA 预测和集合/图关系约束迫使状态具有跨字可预测性。

其信息压缩形式为:

大量具体墨迹
→
 B_99
+
 R_compose
+
R_writer
+
_instance

其中:

  • $\mathcal B_{99}$:有限笔势本体;
  • $\mathcal R_{compose}$:笔势组合与关系规则;
  • $R_{writer}$:书家的实现规律;
  • $\epsilon_{instance}$:每次实际书写的个体变化。

如果模型能够用较小的前三项解释大量具体墨迹,并预测未见组合,那么可以说它在某种意义上学习到了“书法规律的压缩表示”。


34. 项目暂定名称

较适合的名称包括:

Bishi-JEPA
以笔势为主要 token 的联合嵌入预测架构。

Relational Bishi-JEPA
强调笔势之间的结构、组合和跨字关系。

Compositional Calligraphy World Model
如果后续进一步加入笔势序列、规划和生成,可使用更广义的“书法世界模型”表述。

第一阶段建议使用:

{Relational Bishi-JEPA}

因为目前最有实证基础的部分,是:

  • 静态字图;
  • 99笔势本体;
  • 跨字重复;
  • 组合关系;
  • 多模态辅助标注。

35. 99笔势规范词表

以下按当前本体层级列出全部99项,作为本文内部使用的规范词汇。

A. 单一笔势(26)

A1. 点(10)

  1. 右侧势
  2. 左侧势
  3. 打点势
  4. 四角势
  5. 曲抱势
  6. 两向点
  7. 翻捺势
  8. 顾左顾右势
  9. 悬胆势
  10. 蝌蚪势

A2. 横竖(7)

  1. 横仰势
  2. 横势(平势)
  3. 横覆势
  4. 策势
  5. 竖努势
  6. 纵势
  7. 竖裹势

A3. 撇捺(8)

  1. 啄势
  2. 掠势
  3. 波势
  4. 磔势
  5. 戈势
  6. 漫游鱼
  7. 击石波
  8. 柳叶势

A4. 趯(1)

  1. 趯势

B. 张旭五势(5)

  1. 奋笔势
  2. 竖笔势
  3. 钩裹势
  4. 钩努势
  5. 衮笔势(滚笔势)

C. 复合笔势(56)

C1. 点·合点(1)

  1. 栗子势

C2. 点·排点(15)

  1. 铁铃势
  2. 龙爪势
  3. 羊角势
  4. 布棋势
  5. 散水势
  6. 流水势
  7. 隔水势
  8. 开三点
  9. 连波势(连波省点势)
  10. 顾盼势
  11. 三往一复势
  12. 各自立势
  13. 联飞势
  14. 烈火势
  15. 悬珠势

C3. 点·联点(4)

  1. 鸡头势
  2. 群鹊势
  3. 菱米势
  4. 戏蝶势

C4. 横竖(10)

  1. 曲尺势
  2. 犁梁势
  3. 十字势
  4. 铁围势
  5. 挑土势
  6. 玉函势
  7. 石楯势
  8. 蟠龙势
  9. 马桩势
  10. 横爻势

C5. 钩趯(13)

  1. 外略势
  2. 虿毒势(虿尾势)
  3. 鸟雏势
  4. 折钉势(钉势)
  5. 冖头势
  6. 宀头势
  7. 蟹爪势
  8. 玉钩势
  9. 斸钩势
  10. 打钩势(搭钩)
  11. 反引势
  12. 倚戈势
  13. 弯笋势

C6. 撇捺(13)

  1. 向背势
  2. 贯鱼势
  3. 交争势
  4. 斗鹑势
  5. 凤翅势
  6. 蟹脚势
  7. 飞带势
  8. 瞑人势
  9. 屈头势
  10. 蛇头势
  11. 立人势
  12. 叠乌势
  13. 倚人势

D. 复杂笔势(12)

  1. 三牵绾
  2. 曲钩势
  3. 阜耳势
  4. 邑耳势
  5. 节耳势
  6. 竹箨势
  7. 柳箕势
  8. 舞鹤势
  9. 狮口势
  10. 驼头势
  11. 双竹势
  12. 戈法

36. 结论

本方案的核心已经从“先建立一个笔势数据集,再训练一个生成模型”进一步统一成:

单字图像 → (C, G, B, R) → JEPA 世界模型 → 单字图像

这是一个带结构瓶颈的 Autoencoder。

其中:

  • 多模态模型负责为99笔势和关系提供初始弱监督;
  • 集合论/图关系负责制造跨字组合约束;
  • Autoencoder reconstruction 保证中间世界状态能够解释真实智永字迹;
  • JEPA 通过 masked state prediction 学习“书法世界中的哪些状态可以互相预测”;
  • capacity bottleneck、防 bypass 和 held-out character 实验用于检验模型是否真的在压缩规律,而不是记忆字形。

这样,“标注”“集合数据生成”“JEPA”“渲染”就不再是四个彼此独立的步骤,而是同一个端到端系统中的不同训练信号。

最终应用链路为:

硬笔输入 → (C, G_hard) → 智永世界模型 → (B_智永, R, G') → 毛笔渲染

硬笔输入主要提供:

字符内容 + 裹束意图

世界模型提供:

智永体系下的笔势组织与结构修正

renderer 再负责把这个书法状态显影成最终墨迹。

因此,这项研究最终要验证的不是“AI 能否模仿智永的视觉风格”,而是:

智永《真书千字文》中有限的具体字迹,是否可以被压缩成一个由笔势、裹束和关系组成的可预测世界状态;这个世界状态是否能够通过重建、补全和未见字符组合得到验证,并进一步把新的硬笔结体意图转换成智永体系下的毛笔书法。

如果上述链路成立,那么“生成完整智永字库”只是其应用之一;更重要的结果是建立了一个可以进行预测、组合、编辑和迁移的书法世界模型。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论