【機器學習】條件隨機場
- 2020 年 2 月 23 日
- 筆記
跟着博主的腳步,每天進步一點點



本文介紹了條件隨機場模型,首先對比了隱馬爾科夫模型、最大熵馬爾科夫模型、條件隨機場模型。基於前二者存在的1)獨立性假設問題,2)標註偏置問題,條件隨機場採用最大熵模型的特徵模板定義克服獨立性問題,參數學習過程建立在最大化整條序列的概率,而不是在時刻上進行歸一化。
作者 | 文傑
編輯 | yuquanle
條件隨機場
條件隨機場是一個概率圖模型,深入圖模型的話實在有太多東西。這裡,我們接着隱馬爾科夫模型和最大熵馬爾科夫模型基礎理解條件隨機場。在序列標註問題上,條件隨機場與兩者之間的差異:

1)隱馬爾科夫模型是一個生成模型,其假設當前時刻狀態只與上一狀態有關,而當前的觀測值只與當前的狀態有關,所以獨立性假設非常強。
2)最大熵馬爾科夫模型則通過特徵模板的定義克服了獨立性假設問題。基於熵原理,在滿足所有條件經驗期望的條件下,熵最大的為最好的模型,也就導出了對數線性模型,是一個標準的判別模型。
3)條件隨機場同最大熵馬爾科夫模型非常一致,也是一個基於特徵模板的判別模型。然而在序列標註問題上,最大熵馬爾科夫模型將每個時刻看作是一個分類問題,每時刻獨立歸一化,這就導致標註偏置問題,條件隨機場則歸一化作用於整個序列。
結合最大熵模型,模型輸出條件概率,假設所有的特徵模板為,(其中一些書中分為轉移特徵和發射特徵)。最大化條件概率為:
考慮整個序列的條件概率,條件隨機場的目標函數是最大化:
對於參數的學習,同樣可以採用最大熵模型使用的優化算法,比如梯度下降的方法。
狀態預測問題就是一個最大化序列概率獲得狀態序列:
其中歸一化因子忽略,分子的指數形式單調遞增也忽略。所以整個序列的狀態等價於在最優的狀態序列下特徵模板與特徵模板權重乘積和最大。就此,條件隨機場就變成了一個特徵模板定義的問題了,特徵模板直接決定條件隨機場的性能。
代碼實戰
int CRF_CWS(){ cout<<"-----------training-----------"<<endl; DataStr traindata; LoadDataStr(traindata,"data\pku_training.utf8"); createVocabList_C(traindata); cout<<"------------test-------------"<<endl; DataStr testdata;;//加載測試數據 LoadDataStr(testdata,"data\pku_test.utf8"); cout<<"------------FenCi--------------"<<endl; FenCi(testdata); cout<<"-----------PingCe---------------"<<endl; DataStr resultdata; LoadDataStr(resultdata,"data\result.utf8"); DataStr golddata; LoadDataStr(golddata,"data\pku_test_gold.utf8"); PingCe(resultdata,golddata); return 0;}