文章目錄
- 分數計算
- 訓練
- 測試
分數計算
插入式序列生成模型的概率計算邏輯,核心是將 “生成序列 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,1?p4,1?(a)+α3,2?p3,2?(?)
公式拆解:
- 第一項 α 4 , 1 p 4 , 1 ( a ) α_{4,1}p_{4,1}(a) α4,1?p4,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,2?p3,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,3?p4,2?(t)+β5,2?p4,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 | 依賴解碼,顯式對齊,支持在線,建模依賴 | 實時高精度識別(如語音助手) | 訓練和推理復雜度較高 |