条件随机场(CRF)和隐马尔科夫模型(HMM)最大区别在哪里?CRF的全局最优体现在哪里?
作者:爾總的馬甲
鏈接:https://www.zhihu.com/question/53458773/answer/554436625
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
https://www.zhihu.com/question/53458773
可以按照這個順序理解:
1. 簡單了解一下概率圖模型
2. 簡單了解一下樸素貝葉斯分類器和隱馬爾可夫模型, 樸素貝葉斯模型擴展到序列問題,就是一個隱馬
3. 其實還有個最大熵馬爾可夫模型MEMM,就是結合了logistics regression地馬爾科夫網絡
4. CRF論文其實是拿MEMM來作比較的
5. 隱馬爾可夫可以推導出線性鏈CRF
其他輔助理解的擴展
6. CRF與Logistic Regression
7. 生成式和判別式模型
8. 簡單的代碼實現
概率圖模型
Graphical Models, 用圖的形式表示隨機變量之間條件依賴關系的概率模型,是概率論與圖論的結合。圖中的節點表示隨機變量,缺少邊表示條件獨立假設。
G = (V, E). 其中 V: vertex, 頂點/節點, 表示隨機變量. E: edge, 邊/弧. 如果兩個節點不存在邊, 則二者條件獨立.
image from: Probabilistic Graphical Models Principles and Techniques
從圖上可以看到, 貝葉斯網絡(Bayesian Networks, BNs)是有向圖, 每個節點的條件概率分布表示為P(當前節點 | 父節點).
而馬爾可夫網絡則是無向圖. 無向圖形模型是指一整個家族的概率分布,每個概率分布都根據給定的因子集合進行因式分解。一般用random field來指代無向圖中定義的特定分布. 數學上表達無向圖, 指給定子集 , 對于所有 和任何因子選項 , , 無向圖定義的各個分布可以寫成:
Z是正則項用于保證分布 和為
Markov Net 包含了一組具有馬爾可夫性質的隨機變量. 馬爾可夫隨機場(Markov Random Fields, MRF)是由參數 表示, 其中 是狀態的集合, 是初始狀態的概率, 是狀態間的轉移概率。一階馬爾可夫鏈就是假設 時刻的狀態只依賴于前一時刻的狀態,與其他時刻的狀態和觀測無關。這個性質可以用于簡化概率鏈的計算。使用類似性質作為假設的模型還有Bi-gram語言模型等.
從 樸素貝葉斯 到 隱馬爾可夫模型
樸素貝葉斯分類器(NBs)假設條件獨立性(樸素貝葉斯假設, Hand and Yu, 2001):
在給定目標值 y 時,x的屬性值之間相互條件獨立。這樣, 計算可以簡化為
樸素貝葉斯模型只考慮了單個輸出變量y。如果要為一個觀察序列 預測對應的分類序列 ,一個簡單的序列模型可以表示為多個NBs的乘積。此時不考慮序列單個位置之間的相互依賴。
此時每個觀察值 僅取決于對應序列位置的類變量 。由于這種獨立性假設,從一個步驟到另一個步驟的轉換概率不包括在該模型中。然而這種假設在實踐中幾乎不會符合,這導致這種模型的性能很有限。
因此,比較合理的假設是觀測序列在連續相鄰位置間的狀態存在依賴。要模擬這種依賴關系, 就要引入狀態轉移概率 , 由此引出著名的隱馬爾可夫模型 Hidden Markov model, HMM, Rabiner (1989)。
HMM的參數 ,其中 是隱狀態(輸出變量)的集合, 是觀察值(輸入)集合, 是初始狀態的概率, 是狀態轉移概率矩陣 , 是輸出觀察值概率矩陣 。在POS任務中, 就是觀察到的句子, 就是待推導的標注序列, 因為詞性待求的, 所以人們稱之為隱含狀態.
概括一下HMM設定的假設:
1. 假設每個狀態僅依賴于其前一個狀態,
2. 假設每一個觀察值 僅依賴于當前狀態值 ,
那么狀態序列 和觀察序列 的聯合概率可以分解為
從樸素貝葉斯, 到HMM有如下轉換關系:
Diagram of the relationship between naive Bayes, logistic regression, HMMs, linear-chain CRFs, generative models, and general CRFs. image from: An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum
HMM的缺陷是其基于觀察序列中的每個元素都相互條件獨立的假設。即在任何時刻觀察值僅僅與狀態(即要標注的標簽)有關。對于簡單的數據集,這個假設倒是合理。但大多數現實世界中的真實觀察序列是由多個相互作用的特征和觀察序列中較長范圍內的元素之間的依賴而形成的。而條件隨機場(conditional random fiel, CRF)恰恰就彌補了這個缺陷.
從上圖可以看到當HMM有了條件分布后,就變成了線性條件隨機場 。
隱馬爾可夫模型與最大熵馬爾可夫模型
最大熵馬爾可夫模型(Maximum Entropy Markov Models, MEMM)跟HMM的生成式概率圖不同,MEMM對當前狀態的判斷依賴于前一時間步的狀態和當前觀察值的狀態。
image from McCallum, A. (1909)
所謂"熵"就是信息論中的概念:
> Entropy: the uncertainty of a distribution.
量化Entropy: surprise.
Entropy = expected surprise
Event ,
Probability ,
"Surprise" ,
Entropy:
熵最大的分布就是均勻分布,也就是每一個選項都一樣,等于什么信息都沒給。如果給了額外的信息,如約束,特征之后,熵就可以降低。
“最大熵”是指遵循最大熵原則:
> model all that is known and assume nothing about that which is unknown.
也就說, 如果給定了一組事實,我們最好選擇一個符合這些事實的模型,剩余情況則盡可能地一視同仁不做任何區別對待。最佳的模型是符合訓練數據衍生的約束條件的模型,同時盡可能少地做假設,也就是少做承諾,也就避免過擬合。
MEMM 把HMM中的轉移概率和發射概率替換為一個概率:當前狀態s依賴于前一個狀態 和當前觀察值o,
MEMM的訓練思路是這樣: 對每個狀態 , 將訓練數據分為<觀察-目標狀態>對 , 也就是把 分成 個分別訓練的exponential model , 再通過最大化熵來訓練exponential models, 換種說法叫logistic regression classifier.
用的約束條件是學習分布中每個特征 a 的期望值與訓練數據的觀測序列上每個特征的期望值相同. 滿足這些約束的最大熵分布(Della Pietra,Della Pietra和Lafferty,1997)是唯一的,與最大似然分布一致,對每一個位置的狀態 , 具有指數形式:
其中 是待估計的參數, 是歸一化因子
S是狀態集.
如果把問題簡化為線性的相鄰依賴, 那么每一個狀態 僅依賴于前一個狀態 . 用Y表達標簽序列, 用X表達觀察序列, 那么
其中
則
MEMM將整體的概率分布分解為每一個時間步的分布之積,所以算loss只需要把每一步的交叉熵求和。只需要每一步單獨執行softmax,所以MEMM是完全可以并行的,速度跟直接逐步Softmax基本一樣。
雖然MEMM能克服HMM的很多弱點, 但是MEMM自身也有一個 **label bias** 問題, 就是標簽偏差, 離開給定狀態的轉移僅相互對比,而不是與全局所有其他轉移對比。轉移分數是分別對每個狀態的歸一化, 這意味到達一個狀態的所有質量必須在可能的后續狀態之間分配。觀察值可以影響哪個目標狀態獲得質量,但無法影響多少質量可以被傳遞。這會導致模型偏向輸出選擇較少的狀態, 比如極端情況下, 在訓練集中某個狀態 只發現了有一種可能的轉移 , 那么狀態 別無選擇,只能將所有質量傳遞給它的唯一的 transition output 。
MEMM和CRF
CRF再擁有MEMM的優點的同時, 克服了MEMM的缺點. CRF和MEMM的關鍵區別在于,MEMM使用每個狀態的指數模型來確定給定當前狀態的下一狀態的條件概率,而CRF則使用一個指數模型來表示整個標簽序列的聯合概率, 這個概率條件依賴于給定的完整觀察序列。因此,在不同狀態下,不同特征的權重可以相互抵消。也就是說CRF是一個以觀測序列X為全局條件的隨機場.
如果把問題簡化為線性鏈, CRF把Y看成一個整體,截至每一個時間步n, 通過統計所有特征可以得一個總分
其中 是轉移矩陣
可以得到對應得概率是
CRF的計算困難之處在于上式的分母項包含了所有可能路徑 的求和,搜索空間非常龐大.
線性鏈CRF和線性鏈MEMM比較, 區別僅在于分母(也就是歸一化因子)的計算方式不同,CRF的是全局歸一化的,而MEMM的是局部歸一化的.
隱馬爾可夫模型 到 Linear-Chain 條件隨機場
HMM和CRF的對應關系類似于Naive-Bayes和Logistics regression, 都是生成式和判別式的對比. HMM則采用生成式方法進行標簽生成, CRF將各種特征組合在一起判斷標簽. HMM可以推演出特定形式的CRF. 把上式的HMM改寫成如下形式:
HMM是生成式的, 借鑒Naive Bayes 到 logistics regression的方式, 通過引入特征函數這個概念, , 對于每一個 跳轉, 加入特征函數 , 對于每一個(狀態-觀察值)對 , 加入特征函數 . 以上特征函數統一表示為 , 那么可以進一步把HMM寫成:
可以得出條件概率
所以當聯合概率 以HMM的形式因式分解, 則關聯的條件分布 就是一種特定形式的 Linear-chain CRF.
Graphical model of the HMM-like linear-chain CRF. by Sutton, C. 2010
Linear Chain CRF
隨機場, 可以看成是一組隨機變量的集合(這組隨機變量對應同一個樣本空間)。當給每一個位置按照某種分布隨機賦予一個值之后,其全體就叫做隨機場。這些隨機變量之間可能有依賴關系,一般來說,也只有當這些變量之間有依賴關系的時候,我們將其單獨拿出來看成一個隨機場才有實際意義。
如果給定的馬爾科夫隨機場(MRF)中每個隨機變量下面還有觀察值,我們要確定的是給定觀察集合下,這個MRF的分布,也就是條件分布,那么這個MRF就稱為 Conditional Random Fields (CRF)。它的條件分布形式完全類似于MRF的分布形式,只不過多了一個觀察集合X。所以, CRF本質上是給定了條件(觀察值observations)集合的MRF
1.特征函數的選擇: 特征函數的選取直接關系模型的性能。
2.參數估計: 從已經標注好的訓練數據集學習條件隨機場模型的參數,即各特征函數的權重向量λ。
3.模型推斷: 在給定條件隨機場模型參數λ下,預測出最可能的狀態序列。
HMM的生成式概率模型是 , 它的條件概率 本質上就是選取了特定特征函數的CRF. 直接引用(Sutton, C. 2010)的定義:
An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum
CRF特征函數
在CRF中,首先需要定義特征函數.
然后為每個特征函數 分配權重 , 權重是從數據中學習而來. 對 個特征方程求和, 對序列每個位置 求和:
CRF的每個特征函數都是一個輸入的函數, 對應的輸出是一個實數值(只是0或1)。例如, 選擇特征函數 , 當且僅當 , 且第i個單詞以“-ly”結尾; 否則為0. 如果與此特征相關的權重 很大且為正,那么這個特征等同于說模型傾向于把以-ly結尾的單詞標記為ADVERB。
通過指數化和歸一化把這些得分轉換為概率值:
通過恰當地設置特征函數, 就可以從CRF中構建出一個HMM. 在CRF的對數線性形式中, 設置權重為對應HMM(取對數后)的二元轉換和發射概率:
- 對于每個狀態 , 對應HMM的每個狀態轉換概率 , CRF定義一組特征函數為 如果 且 , 為這些特征賦予權重
- 對于每個狀態-觀察值pair, 對應HMM的每個發射概率 , CRF定義一組特征函數為 如果 且 , 賦予權重 .
如此, CRF計算的似然 就精確地正比于對應的HMM, 也就是說, 任意的HMM都可以由CRF表達出來.
Linear-Chain CRF 特征函數的定義非常靈活, 不同的形式用于不同的功能. 比如對于HMM而言, 不管輸入怎么變, 狀態轉換 的分值是一樣的 ; 那么在CRF中, 我們通過增加這樣一個特征 , 使 分值依賴于當前的觀察序列:
from: An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum
這種特征常常用于文本處理中, 比如:
需要指出的是在線性鏈CRF的定義中每個feature的依賴值并不僅限于當前和上一時間步的觀察值. 事實上, 因為CRF并不表達變量之間的依賴關系, 我們可以讓因子 依賴于整個觀察向量 并保持線性圖結構, 這時候的特征函數就是 , 可以自由檢視所有輸入變量 ,
from: An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum
這個特性可以拓展到所有CRFs而不僅限于線性鏈CRF.
CRF比HMM更強大, 更泛用
CRF既具有判別式模型的優點,又考慮到長距離上下文標記間的轉移概率,以序列化形式進行全局參數優化和解碼的特點,解決了其他判別式模型(如MEMM)難以避免的標記偏見問題。
?
CRF與Logistic Regression
CRF的概率計算與Logistic Regression (LR)的形式類似,
在LR中, 是一個特征, 是與該特征相關的權重。提取的特征是二元特征,取值0或1,通常稱為指示函數(indicator func)。這些特征中的每一個都由與輸入x和分類y相關聯的函數計算。
實際上,CRF基本上就是邏輯回歸的序列化:與邏輯回歸是用于分類的對數線性模型不同,CRF是標簽序列的對數線性模型。
談談生成式模型和判別式模型
Diagram of the relationship between naive Bayes, logistic regression, HMMs, linear-chain CRFs, generative models, and general CRFs. image from: An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum
再祭上這張圖, 第一排都是生成式的, 第二排都是判別式的.
在樸素貝葉斯與Logistic Regression, 以及HMM和CRF之間, 又有生成式和判別式的區別.
- 生成式模型描述標簽向量y如何有概率地生成特征向量x, 即嘗試構建x和y的聯合分布 , 典型的模型有HMM,貝葉斯模型,MRF。生成式模型
- 而判別模型直接描述如何根據特征向量x判斷其標簽y, 即嘗試構建 的條件概率分布, 典型模型如如LR, SVM,CRF,MEMM等.
原則上,任何類型的模型都可以使用貝葉斯規則轉換為另一種類型,但實際上這些方法是不同的. 生成模型和判別模型都描述了 的概率分布,但努力的方向不同。生成模型,例如樸素貝葉斯分類器和HMM,是一類可以因式分解為 的聯合分布, 也就是說,它們描述了如何為給定標簽的特征采樣或“生成”值。生成式模型從統計的角度表示數據的分布情況,能夠反映同類數據本身的相似度,不關心判別邊界。生成式模型的優點是:
- 實際上帶的信息要比判別模型豐富, 研究單類問題比判別模型靈活性強
- 能更充分的利用先驗知識
- 模型可以通過增量學習得到
缺點也很明顯:
- 學習過程比較復雜;
- 在目標分類問題中準確度不高
而判別式模型, 比如 LR, 是一系列條件分布 . 也就是說,分類規則是直接建模的。原則上,判別模型也可通過為輸入提供邊際分布 來獲得聯合分布 ,但很少需要這樣。條件分布 不包括 的信息,在分類任務中無論如何也用不到。其次,對 建模的困難之處在于它通常包含很多建模難度較高的有高度依賴性的特征。判別式模型尋找不同類別之間的最優分類面,反映的是異類數據之間的差異。優點是:
- 分類邊界更靈活,比使用純概率方法或生產模型得到的更高級。
- 能清晰的分辨出多類或某一類與其他類之間的差異特征
- 在聚類、viewpoint changes, partial occlusion and scale variations中的效果較好
- 適用于較多類別的識別
缺點是:
- 不能反映訓練數據本身的特性。
- 能力有限,可以分類, 但無法把整個場景描述出來。
用 TensorFlow 實現 Bi-LSTM + CRF
很多序列標注問題, 如命名實體識別, 如果預先使用 Bi-LSTM 解碼序列, 經過 Bi-LSTM 解碼后的每一步隱含狀態, 包含了很多信息, 包括中長距離依賴和語法解析等, 把這些隱含狀態作為 CRF 的特征輸入 CRF 層來解碼, 可以得到一條最大概率的序列標注路徑.
比如序列經過某個模塊(如CNN, BERT, 或者單純是Embedding層) 解碼后的 output 輸入給Bi-LSTM 層lstm_layer , 再把雙向LSTM層的每一步隱含層作為特征輸入給CRF層. TensorFlow中要使用CRF 需要用到的函數是tf.contrib.crf.crf_log_likelihood 和 tf.contrib.crf.crf_decode :
output_layer = lstm_layer(output, _true_length, is_training) with tf.variable_scope("loss"):output_layer = tf.reshape(output_layer, [-1, hidden_size])logits = tf.matmul(output_layer, output_weights, transpose_b=True)logits = tf.nn.bias_add(logits, output_bias)logits = tf.reshape(logits, [-1, FLAGS.max_seq_length, num_labels])if FLAGS.use_crf:transition_params = tf.get_variable("transition_params",shape=[num_labels, num_labels],initializer=tf.zeros_initializer())log_likelihood, transition_params = tf.contrib.crf.crf_log_likelihood(inputs=logits,tag_indices=labels,transition_params=transition_params,sequence_lengths=_true_length) # NOTE CRF decode, decode_tags [batch_size, max_seq_len] 最大概率標注路徑decode_tags, best_score = tf.contrib.crf.crf_decode(potentials=logits, transition_params=transition_params, # NOTE sequence_length: [batch_size] vector of true sequence lengths.sequence_length=_true_length)# A [batch_size] Tensor containing the -log_likelihood of each exampleper_example_loss = -log_likelihoodpredictions = decode_tagsCRF++
CRF++利用特征模板來批量自動化生成 CRF 特征, 參考 CRF++模型格式說明-碼農場
比如
# Unigram U00:%x[-2,0] U01:%x[-1,0] U02:%x[0,0] U03:%x[1,0] U04:%x[2,0] U05:%x[-2,0]/%x[-1,0]/%x[0,0] U06:%x[-1,0]/%x[0,0]/%x[1,0] U07:%x[0,0]/%x[1,0]/%x[2,0] U08:%x[-1,0]/%x[0,0] U09:%x[0,0]/%x[1,0]# Bigram BT**: %x[#, #]中的T表示模板類型(U或B), 兩個#分別表示相對的行偏移與列偏移。
Unigram template: 用于生成 unigram features. %x[#, #]生成一個 CRF 中的點(state)函數: f(s, o), 其中s為t時刻的標簽(output),o為t時刻的上下文.
- 比如 是由U02: %x[0, 0]在輸入文件的第一行生成的點函數. 大致意思是, 如果第一個輸入是'今', 而且其對應的label是'B-TIME', 那么返回1 , 也就是
Bigram template: 用于生成 bigram features, %x[#, #] 生成一個 CRF 中的邊(Edge)函數 , 與 Unigram 類似, 只是還要考慮到t – 1時刻的標簽,
- 模板B默認生成 bigram 特征
?
參考資料
- http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/
- Classical probabilistic models and conditional random fields
- An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum
- http://www.hankcs.com/nlp/the-crf-model-format-description.html
總結
以上是生活随笔為你收集整理的条件随机场(CRF)和隐马尔科夫模型(HMM)最大区别在哪里?CRF的全局最优体现在哪里?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将代码从windows移动linux上出
- 下一篇: 在notebook中如何能完整的显示长文