Bishi-JEPA:端到端书法世界模型研究方案
摘要
本文提出一种面向中国书法的端到端结构化世界模型研究路线。研究对象首先聚焦于已经切分好的智永《真书千字文》单字图像。利用多模态模型结合《黄简书法课程99笔势名称与定义表》,逐字产生笔势候选、粗定位、关系与置信度;再根据字与字之间共享、差分、组合等关系自动生成集合/图结构训练任务。
这些标注和关系并不被视为最终不可改变的“人工真值”,而作为模型训练中的中间结构状态与弱监督。核心模型采用一种带结构瓶颈的 Autoencoder:
x → Z_calligraphy → x̂
其中中间状态不是普通连续向量,而是:
Z_calligraphy = (C, G, B, R)
- :汉字内容;
- :裹束/结体状态;
- :笔势实例及其连续变化;
- :笔势之间的空间、组合与次序关系。
在这个结构瓶颈内部加入 JEPA 目标:随机隐藏某些笔势、局部或关系,让世界模型根据其余状态预测目标 latent;最终 renderer/decoder 再把完整书法状态还原为原始智永单字图像。因此训练同时包含:
图像重建
+
笔势弱监督
+
集合/关系约束
+
JEPA 表征预测
最终希望得到一个能够从有限智永字迹中压缩出书法规律的模型:
智永字迹 → 笔势与裹束世界状态 → 智永书法世界模型
在应用阶段,用户以硬笔书写目标字,模型主要提取其字符内容与裹束意图,再由世界模型推导智永体系下相应的笔势组织和局部变形,最后渲染成毛笔书法结果。
本文所采用的笔势本体共 99 个笔势,包括:
- 26 个单一笔势;
- 5 个张旭五势;
- 56 个复合笔势;
- 12 个复杂笔势。
研究的核心问题因此变成:
有限的99笔势、组合关系与裹束状态,能否构成一个足够紧凑的书法世界状态,使模型既能重建已见字,又能预测未见组合,并把硬笔提供的结体意图转换成智永风格的毛笔书法?
1. 研究问题
传统字体生成通常把任务写成:
目标汉字内容
+
风格表示
→
目标字图像
这种方法可以生成视觉上相似的字,但“风格表示”往往很难解释:模型究竟学到了书家的书写规律,还是仅仅学到了轮廓、粗细、墨色等外观统计?
书法研究更关心另一类问题:
- 同一种笔势在不同字中为什么仍然能被认出?
- 同一种笔势到了不同结构环境中为什么会发生变化?
- 一个书家的这些变化是否具有稳定规律?
- 若一个复杂笔势可以由若干基础笔势组成,模型能否学习这种组合关系?
- 若一个未见汉字由已经见过的笔势和结构重新组合,模型能否推导出合理的新字?
因此,本项目把研究目标改写为:
作品集合
→
笔势空间
→
书家实现函数
→
未见笔势实例/未见汉字
2. JEPA 提供的核心思想
JEPA 的关键不是“遮住一块图片”,而是:
不要求模型复原所有表面细节,而要求模型在表征空间中预测有意义的目标状态。
传统像素重建可以写成:
x_context→ {x}_target
JEPA 更接近:
并使:
对于书法,这一点非常重要。书法模型没有必要首先记住每一个像素,而应该学习:
- 当前局部属于哪一种笔势;
- 该笔势在什么结构环境中出现;
- 它与前后、左右笔势有什么关系;
- 某书家如何稳定地实现这一笔势;
- 在新的汉字环境里,它应该如何变化。
因此,JEPA 可以从“图像缺块预测”进一步推广为:
根据其他笔势实例和汉字上下文,预测目标笔势的 latent
3. 为什么“笔势”比笔画或偏旁更适合作为基本组件
可以把书法信息粗略分成:
墨迹像素
→
笔画形迹
→
笔势
→
偏旁/部件
→
整字
→
章法
3.1 笔画通常太细
“一横”“一点”“一撇”只能说明粗略几何类别,却不能充分说明实际书写路线。
以横向笔势为例,99笔势中明确区分:
- 横仰势;
- 横势(平势);
- 横覆势;
- 策势。
它们同样可能在传统笔画分类里被归入“横”,但在书写路线、方向和动态感觉上并不相同。
撇捺也类似。例如啄势与掠势都属于撇,但一个强调短直斜线,一个强调长弧线。
如果数据只标“横、竖、撇、捺、点”,很多书法信息在进入模型之前已经被压扁。
3.2 偏旁通常太粗
偏旁可以告诉模型:
但“氵”本身仍不是唯一写法。
当前99笔势体系把三点水进一步区分为:
- 散水势:三点彼此分开,以方向呼应;
- 流水势:三点全部实连或牵连连续书写;
- 隔水势:介于散水和流水之间,只有部分实连,其余以虚势相接。
所以:
偏旁身份=氵
与:
实际书写笔势=散水/流水/隔水等
不是同一层信息。
3.3 笔势处在更合适的中尺度
笔势往往同时携带:
- 几何信息:方向、曲直、开合、比例;
- 运动信息:折、转、滚、趯、牵连、抬笔;
- 时序信息:先后关系和连续路线;
- 结构信息:包围、相背、相交、占位;
- 组合信息:简单笔势可以再次组成复杂笔势;
- 上下文信息:同一笔势在不同位置会收缩、伸展或改变连接方式。
因此可以把笔势视为书法模型中的 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. 从“字的集合”改写成“笔势图”
传统字体数据通常只有:
在本研究中,一个字应该变成:
其中:
- :该字包含的笔势实例;
- :笔势之间的关系。
关系可以包括:
precedes:书写次序;left_of/right_of;above/below;encloses;connects_to;separated_from;compose_into;variant_of;shares_motion_with;context_modifies。
因此:
字
=
笔势节点
+
笔势关系图
这是后续 Relational JEPA 的基础。
6. “集合论”关系如何进一步落到笔势层
之前可以把汉字粗略写成:
或者:
但偏旁层仍然过粗。
采用笔势表示后,可以把它改成:
即比较两个字所包含的笔势子图,寻找共享的书写结构。
例如,“三点水”不必永远映射到同一个模板,而可能映射成:
WaterComponent
→
{
散水势,
流水势,
隔水势,
其他化势
}
这样“共同部分”不再是像素交集,而可以是:
- 相同笔势身份;
- 相同组合方式;
- 相似的 latent movement pattern;
- 相同书家的实现规律。
更进一步,可以检验 latent 中是否存在近似代数关系:
而不必强行要求简单线性相加。
7. “书法规律压缩”的数学表达
设笔势词汇:
对于书家
其中:
- :抽象笔势;
- :当前字的结构上下文;
- :该书家在这个上下文中如何实现该笔势。
于是一个具体实例:
这里:
- :笔势身份;
- :书家规律;
- :当前上下文;
- :实际墨迹中的实例表示。
一个字可以进一步表示为:
z_glyph
=
Compose
(
{z_b_k^(w,c_k)},
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 变体之一。
假设智永作品中有多个同类笔势实例:
先用其中一部分建立该书家的笔势 prototype:
其中
对新的目标字,只给:
- 书家的同类笔势 prototype;
- 目标字结构;
- 笔势在目标字中的位置;
- 周边笔势 context。
预测:
真实目标实例由 target encoder 编码:
训练:
它学习的正是:
同类笔势的稳定规律
+
当前上下文变化
不需要为每个目标制作传统 I-JEPA 式矩形 mask。
14. 第三类核心训练:Compositional JEPA
99笔势内部存在明确的多级组合关系,可以直接用来制造预测任务。
一般形式:
P(z_b_1,z_b_2,r)
→
z_b_3
要求:
例如:
(折钉势,玉钩势,compose)
→
曲钩势
(钩裹势,向背势,compose)
→
柳箕势
(衮笔势,衮笔势,pair)
→
双竹势
这样的任务非常接近“规律学习”,因为模型不能只记忆某一个汉字图片,而必须学习:
某种书写结构是怎样由更基础的势组合出来的。
15. 第四类训练:Graph-JEPA
一个字被表示成笔势图:
训练时可以隐藏一个节点或子图:
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. 书家规律的分离
只有一个书家的数据,很难区分:
汉字共有规律
与:
书家个人规律
所以最好引入多书家数据。
对同一个笔势 :
可以比较书家差异。
对同一个书家:
则可以寻找跨笔势共享的 writer law。
最终希望得到:
而不是把所有因素混在一个不可解释的大向量里。
18. 文本定义也可以成为训练信号
99笔势的定义本身包含大量结构信息,例如:
- “三点彼此分开”;
- “三点全部连续相连”;
- “横起,横竖直线往复”;
- “顺、逆弧线交替”;
- “一撇加一竖”;
- “撇与捺组成人字形”。
可以训练:
或者把定义解析为属性:
从而形成多任务监督。
这种做法尤其适合:
- 少样本笔势;
- 复杂笔势;
- 多模态预标注;
- 新书体迁移。
19. 容易混淆的笔势应该专门做对比训练
99笔势中有一些类别只有抓住关键结构差异才能区分。
例如:
散水 / 流水 / 隔水
关键变量是:
connectivity pattern
玉钩势 / 反引势
外形可能接近,但关键是主笔材料不同:
- 玉钩势以“裹”为主线;
- 反引势以“撇”为主线。
曲尺势 / 犁梁势
都属于一横一竖的一折,但比例不同。
奋笔势 / 竖笔势
核心区别是连续直线组合的起势方向与次序不同。
因此训练中应加入 hard negative:
专门增强模型对相似笔势之间结构差别的敏感度。
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 = 字符内容
对于智永《千字文》,字符标签是已知的,因此可以直接提供 Unicode / character ID,也可以训练视觉识别头做辅助任务。
在第一版模型里,可以把 当作外部已知条件,而不要求模型自己 OCR。
21.2 Enclosure:裹束状态
表示整字的几何与结体意图,例如:
- 整体长宽;
- 字心;
- 重心;
- 左右开合;
- 上下收放;
- 部件占位;
- 内外留白;
- 疏密;
- 主次;
- 外轮廓张力。
不必一开始人工定义每一个维度。
可以先令:
G ∈ R^d
但限制
21.3 Bishi Slots:笔势实例
一个字最多分配
B = {s₁, s₂, …, s_K}
每个 slot 可以写成:
s_i = (p_i, g_i, a_i, m_i)
其中:
:笔势身份
p_i ∈ R^99
是 99 笔势上的概率分布。
例如:
散水势 0.84
隔水势 0.11
流水势 0.03
其他 0.02
这使多模态模型输出的 soft label 可以直接进入训练。
:局部几何
例如:
g_i = (x, y, w, h, θ, scale)
表示笔势的大致位置、尺度和方向。
:连续变化参数
99类标签不足以表达同一种笔势内部的书家变化,因此还需要连续属性:
- 长短;
- 曲率;
- 开合;
- 伸缩;
- 粗细;
- 局部张力;
- 与下一势的趋向。
:存在概率
用于允许一个字实际只使用部分 slot。
21.4 Relation Graph:笔势关系
仅有笔势集合还不够。
同样的:
换一种空间关系可能就是完全不同的字。
因此定义:
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 偷偷存下整张图,需要限制:
- 的维度;
- 单个 slot 的连续 residual 维度;
- slot 数量 ;
- 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. 端到端模型的关键防作弊机制
端到端设计是否成功,最重要的是防止模型绕过世界状态。
建议至少加入以下限制:
- 禁止 encoder–decoder 大型 skip connection,否则 decoder 可以直接拿低层像素。
- 限制裹束 latent 容量,避免其偷偷编码完整字形。
- 随机 drop bishi slots,迫使 world model 真正补全。
- 随机 mask relations,迫使模型理解结构。
- slot permutation invariance,避免 slot 编号暗中变成字符模板。
- 跨字共享笔势 prototype,阻止每个字符独立拥有自己的“散水势”。
- held-out character 训练拆分,防止纯记忆。
- target encoder stop-gradient / EMA,维持 JEPA 的预测性质。
- 生成后重新编码的 cycle consistency,检查 renderer 是否服从状态。
- 信息容量实验,验证小 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_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
人为改变:
- 一个笔势;
- 一条关系;
- 裹束参数;
观察模型能否生成合理对应变化。
如果改变 只影响结体,而不错误改变字符内容和笔势身份,说明 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 个高频、视觉上相对清晰的笔势。
推荐流程:
- 取已经切分好的智永单字图;
- 多模态模型逐字生成笔势 pseudo-label;
- 专家只审核一个小型验证集;
- 训练 structured encoder;
- 训练 renderer 重建智永原字;
- 加入跨字 common/difference/compose;
- 加入 bishi-mask JEPA;
- 留出一批完整字符做 zero-shot composition;
- 最后加入少量硬笔输入测试。
这已经足以回答三个关键问题:
- 笔势 latent 能否稳定形成?
- 缺失笔势能否由书法上下文预测?
- 未见字符能否由已见规律组合出来?
如果这三点成立,再扩到完整 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
其中:
- :有限笔势本体;
- :笔势组合与关系规则;
- :书家的实现规律;
- :每次实际书写的个体变化。
如果模型能够用较小的前三项解释大量具体墨迹,并预测未见组合,那么可以说它在某种意义上学习到了“书法规律的压缩表示”。
34. 项目暂定名称
较适合的名称包括:
Bishi-JEPA
以笔势为主要 token 的联合嵌入预测架构。
Relational Bishi-JEPA
强调笔势之间的结构、组合和跨字关系。
Compositional Calligraphy World Model
如果后续进一步加入笔势序列、规划和生成,可使用更广义的“书法世界模型”表述。
第一阶段建议使用:
{Relational Bishi-JEPA}
因为目前最有实证基础的部分,是:
- 静态字图;
- 99笔势本体;
- 跨字重复;
- 组合关系;
- 多模态辅助标注。
35. 99笔势规范词表
以下按当前本体层级列出全部99项,作为本文内部使用的规范词汇。
A. 单一笔势(26)
A1. 点(10)
- 右侧势
- 左侧势
- 打点势
- 四角势
- 曲抱势
- 两向点
- 翻捺势
- 顾左顾右势
- 悬胆势
- 蝌蚪势
A2. 横竖(7)
- 横仰势
- 横势(平势)
- 横覆势
- 策势
- 竖努势
- 纵势
- 竖裹势
A3. 撇捺(8)
- 啄势
- 掠势
- 波势
- 磔势
- 戈势
- 漫游鱼
- 击石波
- 柳叶势
A4. 趯(1)
- 趯势
B. 张旭五势(5)
- 奋笔势
- 竖笔势
- 钩裹势
- 钩努势
- 衮笔势(滚笔势)
C. 复合笔势(56)
C1. 点·合点(1)
- 栗子势
C2. 点·排点(15)
- 铁铃势
- 龙爪势
- 羊角势
- 布棋势
- 散水势
- 流水势
- 隔水势
- 开三点
- 连波势(连波省点势)
- 顾盼势
- 三往一复势
- 各自立势
- 联飞势
- 烈火势
- 悬珠势
C3. 点·联点(4)
- 鸡头势
- 群鹊势
- 菱米势
- 戏蝶势
C4. 横竖(10)
- 曲尺势
- 犁梁势
- 十字势
- 铁围势
- 挑土势
- 玉函势
- 石楯势
- 蟠龙势
- 马桩势
- 横爻势
C5. 钩趯(13)
- 外略势
- 虿毒势(虿尾势)
- 鸟雏势
- 折钉势(钉势)
- 冖头势
- 宀头势
- 蟹爪势
- 玉钩势
- 斸钩势
- 打钩势(搭钩)
- 反引势
- 倚戈势
- 弯笋势
C6. 撇捺(13)
- 向背势
- 贯鱼势
- 交争势
- 斗鹑势
- 凤翅势
- 蟹脚势
- 飞带势
- 瞑人势
- 屈头势
- 蛇头势
- 立人势
- 叠乌势
- 倚人势
D. 复杂笔势(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 能否模仿智永的视觉风格”,而是:
智永《真书千字文》中有限的具体字迹,是否可以被压缩成一个由笔势、裹束和关系组成的可预测世界状态;这个世界状态是否能够通过重建、补全和未见字符组合得到验证,并进一步把新的硬笔结体意图转换成智永体系下的毛笔书法。
如果上述链路成立,那么“生成完整智永字库”只是其应用之一;更重要的结果是建立了一个可以进行预测、组合、编辑和迁移的书法世界模型。