文章目录
- 分数计算
- 训练
- 测试
分数计算
插入式序列生成模型的概率计算逻辑,核心是将 “生成序列 h 的过程” 拆解为一系列插入操作,并通过步骤概率的乘积计算总概率 P ( h ∣ X ) P(h∣X) P(h∣X)。以下从 模型框架、步骤分解、概率计算 三个层面解析:
一、模型框架:插入式生成的 “状态 - 位置” 双维度
- 上层:生成状态( l 0 , l 1 , l 2 , l 3 l^0,l^1,l^2,l^3 l0,l1,l2,l3)
- 代表生成过程中的阶段,对应目标序列的 token:
- l 0 l^0 l0:起始状态(对应
<BOS>
,序列开始); - l 1 l^1 l1:生成
c
后的状态; - l 2 l^2 l2:生成
a
后的状态; - l 3 l^3 l3:生成
t
后的状态。
- l 0 l^0 l0:起始状态(对应
- 状态转移规则:
- 插入目标 token(如
c
、a
、t
)时,状态前进(如 l 0 → l 1 l^0→l^1 l0→l1); - 插入占位符 φ时,状态不变(如 l 1 → l 1 l^1→l^1 l1→l1)。
- 插入目标 token(如
- 下层:位置索引( x 1 ∼ x 6 x^1∼x^6 x1∼x6)
- 表示序列的位置坐标(共 6 个位置,对应图中列),每个位置可插入 token 或 φ。
- 绿色模块 h 1 ∼ h 6 h^1∼h^6 h1∼h6:每个位置的特征表示,用于预测插入概率。
二、步骤分解:生成序列 h 的插入路径
目标序列 h = ϕ c ϕ ϕ a ϕ t ϕ ϕ h=ϕcϕϕaϕtϕϕ h=ϕcϕϕaϕtϕϕ,其生成过程可拆解为 9 步插入操作,每一步对应一个概率:
步骤 | 插入位置 | 当前状态 | 插入内容 | 概率符号 | 含义 |
---|---|---|---|---|---|
1 | x1 | l0 | φ | p1,0(ϕ) | 状态l0下,向位置x1插入 φ |
2 | x2 | l1 | c | p2,0(c) | 状态l1下,向位置x2插入 c |
3 | x2 | l1 | φ | p2,1(ϕ) | 状态l1下,向位置x2插入 φ |
4 | x3 | l1 | φ | p3,1(ϕ) | 状态l1下,向位置x3插入 φ |
5 | x4 | l2 | a | p4,1(a) | 状态l2下,向位置x4插入 a |
6 | x4 | l2 | φ | p4,2(ϕ) | 状态l2下,向位置x4插入 φ |
7 | x5 | l2 | t | p5,2(t) | 状态l2下,向位置x5插入 t |
8 | x5 | l3 | φ | p5,3(ϕ) | 状态l3下,向位置x5插入 φ |
9 | x6 | l3 | φ | p6,3(ϕ) | 状态l3下,向位置x6插入 φ |
三、概率计算:链式法则的应用
生成序列 h h h 的总概率 P ( h ∣ x ) P(h∣x) P(h∣x) 是 所有插入步骤概率的乘积(遵循概率的链式法则):
四、核心思想:为什么这样设计?
- 灵活性:允许在任意位置插入token 或 φ,突破传统 “逐 token 续写” 的限制,更适合文本编辑、补全、改写等任务。
- 条件依赖:每个插入步骤的概率 同时依赖 “当前生成状态( l j l^j lj)” 和 “插入位置( x i x^i xi)”,用 p i , j ( ⋅ ) pi,j(⋅) pi,j(⋅) 精准建模这种依赖关系。
- 可扩展性:通过 “状态转移 + 位置插入” 的框架,可轻松扩展到更长序列或更复杂的生成任务。
- 插入式生成的概率 = 各步骤插入操作的概率乘积,每一步的概率由 “当前生成状态” 和 “插入位置” 共同决定。
插入式生成的关键是 “允许插入 φ,并让每个插入步骤的概率同时看‘生成到哪一步(状态 l)’和‘插在哪里(位置 x)’”,否则模型会漏掉很多合理的生成路径,并且与之前的路径是独立。
这张图围绕 插入式序列生成模型中的 “对齐分数( α i , j α_{i,j} αi,j)” 展开,核心是用 动态规划(DP) 高效计算 所有可能生成路径的概率和。以下从 定义、公式、网格逻辑、求和意义 四个维度解析:
- α i , j α_{i,j} αi,j 的定义
α i , j α_{i,j} αi,j: {所有对齐方式的分数之和,这些对齐读取第 i i i 个位置特征(如 x i x^i xi),并输出第 j j j 个 token(含 ϕ)。
- “对齐(alignment)”:指生成序列的一条具体路径(如 “插入 φ→生成 c→插入 φ→…→生成 t”)。
- “分数”:路径中各步骤的概率乘积(如之前的 P ( h ∣ X ) P(h∣X) P(h∣X) 分解)。
2. 递推公式: α 4 , 2 = α 4 , 1 p 4 , 1 ( a ) + α 3 , 2 p 3 , 2 ( ϕ ) α_{4,2}=α_{4,1}p_{4,1}(a)+α_{3,2}p_{3,2}(ϕ) α4,2=α4,1p4,1(a)+α3,2p3,2(ϕ)
公式拆解:
- 第一项 α 4 , 1 p 4 , 1 ( a ) α_{4,1}p_{4,1}(a) α4,1p4,1(a):
从 **状态( i = 4 , j = 1 i=4,j=1 i=4,j=1) 转移而来,代表:- 已读取位置 x 4 x^4 x4,生成前一个 token(如
c
之后的状态); - 现在 生成 token
a
(概率为$ p_{4,1}(a)$)。
- 已读取位置 x 4 x^4 x4,生成前一个 token(如
- 第二项 α 3 , 2 p 3 , 2 ( ϕ ) α_{3,2}p_{3,2}(ϕ) α3,2p3,2(ϕ):
从 **状态( i = 3 , j = 2 i=3,j=2 i=3,j=2) 转移而来,代表:- 已读取位置 x 3 x^3 x3,处于生成阶段 j=2;
- 现在 插入占位符 ϕ(概率为 p 3 , 2 ( ϕ ) p_{3,2}(ϕ) p3,2(ϕ)),然后转移到 (i=4,j=2)。
3. 网格与路径:动态规划的状态转移
网格结构:
- 行(纵轴):目标 token(
c
、a
、t
),代表 生成阶段(对应之前的 l j l^j lj)。 - 列(横轴):位置 x 1 ∼ x 6 x^1∼x^6 x1∼x6,代表 读取的位置特征(对应之前的 x i x^i xi)。
路径与转移:
- 虚线箭头:代表 “插入 ϕ” 的转移(不推进生成阶段,仅移动位置)。
- 实线箭头:代表 “生成 token” 的转移(推进生成阶段,同时移动位置)。
- 蓝色圆点:状态节点 (i,j),如 α 4 , 2 α_{4,2} α4,2 对应 读取 x 4 x^4 x4、生成阶段到
a
的状态。
4. 求和的意义: ∑ h ∈ a l i g n ( Y ) P ( h ∣ X ) ∑_h∈align(Y)P(h|X) ∑h∈align(Y)P(h∣X)
- a l i g n ( Y ) align(Y) align(Y):所有能生成目标序列 Y Y Y(如
cat
)的**合法插入路径集合(含 φ 的不同插入方式)。 - 求和:因为生成 Y Y Y 可能有 多条不同的插入路径(如 φ 插入的位置不同),总概率是所有路径的概率之和。
- α i , j α_{i,j} αi,j 的作用:通过动态规划递推,**避免枚举所有路径,高效计算总概率(每一步仅依赖前两个状态,时间复杂度从指数级降为多项式级)。
核心结论:动态规划如何简化计算?
→ 用 α i , j α_{i,j} αi,j 累积 “到达状态( i , j i,j i,j)的所有路径概率”,通过递推公式(生成 token 或插入 φ)高效计算,最终求和得到总概率。
训练
通过极大似然估计,让模型参数θ尽可能提升 “所有生成真实序列Y的插入路径的总概率”,梯度计算依赖链式法则分解到每个插入步骤的概率。
每个步骤概率 p i , j ( ⋅ ) p_i,j(⋅) pi,j(⋅)的梯度,等于 “参数对该步骤的影响” 乘以 “该步骤对所有生成路径的总贡献”,最终所有步骤的梯度累加即为总梯度。
通过 BPTT,反向追溯 p 4 , 1 ( a ) p_{4,1}(a) p4,1(a) 的输入(状态 l 1 l^1 l1、位置 h 4 h^4 h4),再追溯 l 1 l_1 l1 的输入( l 0 l_0 l0、c
),直到触及模型参数 θ θ θ,累加各路径的梯度贡献。
总概率 P ( Y ∣ X ) P(Y|X) P(Y∣X) 可拆分为 “包含 p 4 , 1 ( a ) p_{4,1}(a) p4,1(a) 的路径” 和 “不包含 p 4 , 1 ( a ) p_{4,1}(a) p4,1(a) 的路径”:
对于 “含 p 4 , 1 ( a ) p_{4,1}(a) p4,1(a) 的路径”,其概率可分解为: P ( h ∣ X ) = p 4 , 1 ( a ) × o t h e r P(h|X)=p_{4,1}(a)×other P(h∣X)=p4,1(a)×other
- “other”:路径中 除 p 4 , 1 ( a ) p_{4,1}(a) p4,1(a)外其他步骤的概率乘积(如 p 1 , 0 ( ϕ ) p_{1,0}(ϕ) p1,0(ϕ)⋅ p 2 , 0 ( c ) p_{2,0}(c) p2,0(c)⋅… 中不含 p 4 , 1 ( a ) p_{4,1}(a) p4,1(a) 的部分)。
总概率对 p 4 , 1 ( a ) p_{4,1}(a) p4,1(a)的梯度,等于 “所有含 p 4 , 1 ( a ) p_{4,1}(a) p4,1(a)的路径概率和” 除以 p 4 , 1 ( a ) p_{4,1}(a) p4,1(a)。
梯度计算通过 “分解路径、提取公共因子 p 4 , 1 ( a ) p_{4,1}(a) p4,1(a)”,将复杂的路径求和转化为 “路径概率和除以该步骤概率”,大幅简化了计算。
“反向累积”:与 α i , j α_{i,j} αi,j(正向累积路径概率)对称, β i , j β_{i,j} βi,j 从 序列末尾开始,向前累积路径概率。
2. 递推公式: β 4 , 2 = β 4 , 3 p 4 , 2 ( t ) + β 5 , 2 p 4 , 2 ( ϕ ) β_{4,2}=β_{4,3}p_{4,2}(t)+β_{5,2}p_{4,2}(ϕ) β4,2=β4,3p4,2(t)+β5,2p4,2(ϕ)
- 正向 a i , j a_{i,j} ai,j:计算 “到达状态(i,j)的所有路径概率和”,用于前向预测。
- 反向 β i , j β_{i,j} βi,j:计算 “从状态(i,j)出发到序列结束的所有路径概率和”,用于反向传播或联合概率计算。
- 协同作用:结合 a i , j a_{i,j} ai,j 和 , β i , j β_{i,j} βi,j可高效计算 单个步骤对总概率的贡献(如之前的梯度分解),避免枚举所有路径。
结合链式法则,总梯度可简化为:
- 每个步骤 p i , j ( ⋅ ) p_{i,j}(⋅) pi,j(⋅) 对总概率的梯度贡献,等于 “参数对该步骤的影响” 乘以 “该步骤的前向累积概率 α” 乘以 “该步骤的反向累积概率 β”。
- 通过正向 α α α 和反向 β β β 的 “双累积”,将 “所有路径的枚举求和” 压缩为 “单步的 α ⋅ p ⋅ β α⋅p⋅β α⋅p⋅β 乘积”,使梯度计算的复杂度从指数级降为线性级。
测试
由于枚举所有路径不可行,解码时放弃 “全局概率和最大”,转而寻找 “单条路径概率最大” 的 h h h,再还原出 Y Y Y。用 近似搜索(如贪心、 beam search) 找局部最优路径,平衡计算复杂度与生成质量。
计算的时候保存概率最大的那个即可。
模型 | 核心特点 | 适用场景 | 缺点 |
---|---|---|---|
LAS | 依赖注意力,隐式对齐,建模长距离依赖 | 离线高精度识别(如语音转写) | 不支持在线实时处理 |
CTC | 独立解码,显式对齐,支持在线 | 实时简单识别(如关键词检测) | 无法建模 token 依赖 |
RNN - T | 依赖解码,显式对齐,支持在线,建模依赖 | 实时高精度识别(如语音助手) | 训练和推理复杂度较高 |