1. 前言
- 自然語言處理是關毅老師的研究生課程。
- 本博客僅對噪聲信道模型、n元文法(N-gram語言模型)、維特比算法詳細介紹。
- 其他的重點知識還包括概率上文無關文法(PCFG)、HMM形式化定義、詞網格分詞等等,比較簡單,不做贅述。
2. 噪聲信道模型
2.1 噪聲信道模型原理
- 噪聲信道模型的示意圖如下所示:
- 該模型的目標是通過有噪聲的輸出信號試圖恢復輸入信號,依據貝葉斯公式,其計算公式如下所示:
\[I = \arg \max _ { I } P ( I | O ) = \arg \max _ { I } \frac { P ( O | I ) P ( I ) } { P ( O ) } = \arg \max _ { I } P ( O | I ) P ( I ) \]
- \(I\)指輸入信號,\(O\)指輸出信號。
- 噪聲模型的優點是具有普適性,通過修改噪聲信道的定義,可以將很多常見的應用納入到這一模型的框架之中,相關介紹見2.1。
2.2 噪聲信道模型的應用
2.2.1 語音識別
- 語音識別的目的是通過聲學信號,找到與其對應的置信度最大的語言文本。
- 計算公式與上文相同,此時的\(I\)為語言文本,\(O\)為聲學信號。
- 代碼實現過程中,有一個信息源以概率\(P(I)\)生成語言文本,噪聲信道以概率分布\(P(O|I)\)將語言文本轉換為聲學信號。
- 模型通過貝葉斯公式對后驗概率\(P(I|O)\)進行計算。
2.2.2 其他應用
- 手寫漢字識別
- 文本 -> 書寫 -> 圖像
- 文本校錯
- 文本 -> 輸入編輯 -> 帶有錯誤的文本
- 音字轉換
- 文本 -> 字音轉換 -> 拼音編碼
- 詞性標注
- 詞性標注序列 -> 詞性詞串替換 -> 詞串
3. N-gram語言模型
3.1 N-gram語言模型原理
- N-gram語言模型基於馬爾可夫假設,即下一個詞的出現僅僅依賴於他前面的N個詞,公式如下:
\[P ( S ) = P \left( w _ { 1 } w _ { 2 } \dots w _ { n } \right) = p \left( w _ { 1 } \right) p \left( w _ { 2 } | w _ { 1 } \right) p \left( w _ { 3 } | w _ { 1 } w _ { 2 } \right) \ldots p \left( w _ { n } | w _ { 1 } w _ { 2 } \dots w _ { n - 1 } \right) \]
- 實踐中,往往采用最大似然估計的方式進行計算:
\[P \left( w _ { n } | w _ { 1 } w _ { 2 } \dots w _ { n - 1 } \right) = \frac { C \left( w _ { 1 } w _ { 2 } \ldots w _ { n } \right) } { C \left( w _ { 1 } w _ { 2 } \dots w _ { n - 1 } \right) } \]
-
在訓練語料庫中統計獲得字串的頻度信息。
-
n越大: 對下一個詞出現的約束性信息更多,更大的辨別力
-
n越小: 在訓練語料庫中出現的次數更多,更可靠的統計結果,更高的可靠性
3.2 平滑處理
- 如果不進行平滑處理,會面臨數據稀疏的問題,這會使聯合概率的其中一項值為0,從而導致句子的整體概率值為0。
3.2.1 加一平滑法(拉普拉斯定律)
- 公式如下:
\[P _ { L a p } \left( w _ { 1 } w _ { 2 } , \ldots w _ { n } \right) = \frac { C \left( w _ { 1 } w _ { 2 } \dots w _ { n } \right) + 1 } { N + B } , \left( B = | V | ^ { n } \right) \]
- 實際運算時,\(N\)為條件概率中先驗字串的頻度。
3.2.2 其他平滑方法
- Lidstone定律
- Good-Turing估計
- Back-off平滑
4. 維特比算法
4.1 維特比算法原理
- 維特比算法用於解決HMM三大問題中的解碼問題,即給定一個輸出字符序列和HMM模型參數,如何確定模型產生這一序列概率最大的狀態序列。
\[\arg \max _ { X } P ( X | O ) = \arg \max _ { X } \frac { P ( X , O ) } { P ( O ) } = \arg \max _ { X } P ( X , O ) \]
- \(O\)是輸出字符序列,\(X\)是狀態序列。
- 維特比算法迭代過程如下:
- 初始化
\[\begin{array} { l } { \delta _ { 1 } ( i ) = \pi _ { i } b _ { i } \left( o _ { 1 } \right) } \\ { \psi _ { 1 } ( i ) = 0 } \end{array} \]
- 遞歸
\[\begin{array} { c } { \delta _ { t + 1 } ( j ) = \underset { 1 \leq i \leq N } \max \delta _ { t } ( i ) a _ { i j } b _ { j } \left( o _ { t + 1 } \right) } \\ { \psi _ { t + 1 } ( j ) = \underset { 1 \leq i \leq N } { \arg \max } \delta _ { t } ( i ) a _ { i j } b _ { j } \left( o _ { t + 1 } \right) } \end{array} \]
- 結束
\[\begin{array} { c } { P ^ { * } = \max _ { 1 \leq i \leq N } \delta _ { T } ( i ) } \\ { q _ { T } ^ { * } = \underset { 1 \leq i \leq N } { \arg \max } \delta _ { T } ( i ) } \end{array} \]
- 最優路徑(狀態序列)
\[q _ { t } ^ { * } = \psi _ { t + 1 } \left( q _ { t + 1 } ^ { * } \right) , \quad t = T - 1 , \ldots , 1 \]
- 上述迭代過程,\(a\)狀態轉移矩陣,\(b\)是狀態-輸出發射矩陣。
4.2 維特比算法例子
-
例子:
-
計算過程:
- 第一次迭代(此時的輸出字符為A):
\[\delta _ { 1 } ( 0 ) = 0.5*0.5=0.25 \]
\[\delta _ { 1 } ( 1 ) = 0.5*0.3=0.15 \]
\[\delta _ { 1 } ( 2 ) = 0*0.2=0 \]
- 第二次迭代(此時的輸出字符為B):
\[\delta _ { 2 } ( 0 ) = max(0.25*0.3*0.3, 0, 0)=0.0225 \]
\[\delta _ { 2 } ( 1 ) =max(0.25*0.2*0.4, 0.15*0.4*0.4, 0)=0.024 \]
\[\delta _ { 2 } ( 2 ) = max(0.25*0.5*0.3, 0.15*0.6*0.3, 0)=0.0375 \]
- 第三次迭代(此時的輸出字符為C):
\[\delta _ { 3 } ( 0 ) = max(0.0225*0.3*0.2, 0, 0)=0.00135 \]
\[\delta _ { 3 } ( 1 ) =max(0.0225*0.2*0.3, 0.024*0.4*0.3, 0)=0.00288 \]
\[\delta _ { 3 } ( 2 ) =max(0.0225*0.5*0.5, 0.024*0.6*0.5, 0)=0.0072 \]
-
最終答案:
- 選擇最優路徑的時候從后往前選,選擇最后一列最大的概率值為最終結果。
- 即\(0.0072\))。
- 接着尋找上一步中生成該概率值(\(0.0072\))的數作為前一步結果。
- 即\(0.024\),因為\(0.024*0.6*0.5=0.0072\)。
- 以此類推。
- 選擇最優路徑的時候從后往前選,選擇最后一列最大的概率值為最終結果。
4.3 維特比算法應用
4.3.1 基於HMM的詞性標注
- HMM的狀態集合:詞性標記集合
- \(t_i\)為為詞性標記集合中的第\(i\)個詞性標記。
- HMM的輸出字符集合:詞匯集合
- \(\pi _ { \mathrm { i } }\):詞性標記\(t_i\)初始概率
- \(a_{ij}\):從詞性標記\(t_i\)到\(t_j\)的狀態轉移概率
- \(b_{jk}\):詞性標記\(t_j\)對應的詞\(w_k\)的發射概率