天天看點

條件随機場-Conditional Random Field(CRF)

文章目錄

    • 什麼是條件随機場?
    • 前言
    • 隐馬爾科夫模型HMM (生成模型)
    • CRF
      • 特征函數舉例
      • 邏輯回歸
      • HMM
      • 學習CRF的參數
      • CRF實作細節
        • 位置1:
        • 位置2
        • 位置3
        • 總結

什麼是條件随機場?

Random指的隐藏狀态随機變量Y和觀測狀态随機變量X。

Conditional指條件機率,是以CRF是一個判别式模型 (discriminative model)。而生成式模型則計算聯合機率分布。

關于生成模型和判别模型:

生成模型VS判别模型

機器學習面試之生成模型VS判别模型

前言

對于序列标注模型,輸入一個文本序列,輸出标注結果。在HMM和CRF模型中,輸入的文本序列對應觀測序列,标注結果對應隐藏狀态,是以模型的目的是根據觀測序列計算隐藏狀态。

隐馬爾科夫模型HMM (生成模型)

以詞性标注任務為例,給定一個觀測序列即輸入文本X,計算輸出詞性序列Y

P ( Y ∣ X ) = P ( X ∣ Y ) ∗ P ( Y ) P ( X ) P ( X , Y ) = P ( X ∣ Y ) P ( Y ) = ∏ i = 1 n p ( x i ∣ Y ) ∗ P ( Y ) = ∏ i = 1 n p ( x i ∣ y i ) ∗ P ( Y ) = p ( y 1 ) ∗ p ( y 1 ∣ x 1 ) ∏ i = 2 n p ( x i ∣ y i ) ∗ p ( y i ∣ y i − 1 ) P(Y|X)=\frac{P(X|Y)*P(Y)}{P(X)}\\ P(X,Y)=P(X|Y)P(Y)\\ =\prod_{i=1}^{n}p(x_i|Y)*P(Y)\\ =\prod_{i=1}^{n}p(x_i|y_i)*P(Y)\\ =p(y_1)*p(y_1|x_1)\prod_{i=2}^{n}p(x_i|y_i)*p(y_i|y_{i-1}) P(Y∣X)=P(X)P(X∣Y)∗P(Y)​P(X,Y)=P(X∣Y)P(Y)=i=1∏n​p(xi​∣Y)∗P(Y)=i=1∏n​p(xi​∣yi​)∗P(Y)=p(y1​)∗p(y1​∣x1​)i=2∏n​p(xi​∣yi​)∗p(yi​∣yi−1​)

上述公式每一步對應一個假設

  • 由輸入詞間的條件獨立性得到 ∏ i = 1 n p ( x i ∣ Y ) \prod_{i=1}^{n}p(x_i|Y) ∏i=1n​p(xi​∣Y)
  • 目前觀測結果隻與目前隐層狀态有關 ∏ i = 1 n p ( x i ∣ y i ) \prod_{i=1}^{n}p(x_i|y_i) ∏i=1n​p(xi​∣yi​), p ( x i ∣ y i ) p(x_i|y_i) p(xi​∣yi​)為發射機率(emission probabilities )。
  • 馬爾科夫假設,每一個隐層狀态僅與上一個隐層狀态有關 p ( y i ∣ y i − 1 ) p(y_i|y_{i-1}) p(yi​∣yi−1​), p ( y i ∣ y i − 1 ) p(y_i|y_{i-1}) p(yi​∣yi−1​)為轉移機率(transition probabilities),例如介詞後面跟一個名詞,則轉移機率高。

CRF

CRF使用feature function來更抽象的表達特征,使得它不再局限于HMM的兩類特征。特征函數可以表示為 f ( x , i , y i , y i − 1 ) f(x, i, y_i, y_{i-1}) f(x,i,yi​,yi−1​),其中X表示輸入序列,i表示目前位置, y i y_i yi​表示目前狀态,在linear-chain CRF中 y i − 1 y_{i-1} yi−1​表示前一個狀态。

我們賦予每個特征函數一個權重 λ j \lambda_j λj​,給定一個輸入序列,我們累加所有輸入權重的特征值标注 y y y:

s c o r e ( y ∣ x ) = ∑ j = 1 m ∑ i = 1 n λ j f j ( x , i , y i , y i − 1 ) score(y|x)=\sum_{j=1}^{m}\sum_{i=1}^{n}\lambda_jf_j(x,i,y_i,y_{i-1}) score(y∣x)=∑j=1m​∑i=1n​λj​fj​(x,i,yi​,yi−1​)

最終可以得到一條輸出 y y y的機率值(0~1)

p ( y ∣ x ) = e x p [ s c o r e ( y ∣ x ) ] ∑ y ′ e x p [ s c o r e ( y ′ ∣ x ) ] = e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( x , i , y i , y i − 1 ) ] ∑ y ′ e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( x , i , y ′ i , y ′ i − 1 ) ] p(y|x)=\frac{exp[score(y|x)]}{\sum_{y'}exp[score(y'|x)]}=\frac{exp[\sum_{j=1}^{m}\sum_{i=1}^{n}\lambda_jf_j(x,i,y_i,y_{i-1})]}{\sum_{y'}exp[\sum_{j=1}^{m}\sum_{i=1}^{n}\lambda_jf_j(x,i,{y'}_i,{y'}_{i-1})]} p(y∣x)=∑y′​exp[score(y′∣x)]exp[score(y∣x)]​=∑y′​exp[∑j=1m​∑i=1n​λj​fj​(x,i,y′i​,y′i−1​)]exp[∑j=1m​∑i=1n​λj​fj​(x,i,yi​,yi−1​)]​

特征函數舉例

我們以英文單詞的詞性模組化,這裡舉例的特征函數不僅僅局限于線性鍊CRF:

  • 如果滿足條件:目前英文單詞以 ‘ly’ 結尾 && 特征函數标注 y i y_i yi​為副詞

    則記 f 1 ( x , i , y i , y i − 1 ) = 1    e l s e   0 f_1(x,i,y_i,y_{i-1})=1\ \ else \ 0 f1​(x,i,yi​,yi−1​)=1  else 0,則控制該特征函數的權重 λ 1 \lambda_1 λ1​傾向一個大的正值,因為以 ‘ly’ 結尾通常為副詞。

  • 如果滿足條件:目前位置為1 && 輸入的結尾是問好 && 特征函數标注 y i y_i yi​為動詞

    則記 f 2 ( x , i , y i , y i − 1 ) = 1   e l s e   0 f_2(x,i,y_i,y_{i-1})=1\ else\ 0 f2​(x,i,yi​,yi−1​)=1 else 0,則控制該特征函數的權重 λ 2 \lambda_2 λ2​傾向一個大的正值。例如 “Is this a sentence beginning with a verb?”

  • 如果滿足條件: y i − 1 y_{i-1} yi−1​為形容詞 && y i y_i yi​為名詞

    則記 f 3 ( x , i , y i , y i − 1 ) = 1    e l s e   0 f_3(x,i,y_i,y_{i-1})=1\ \ else \ 0 f3​(x,i,yi​,yi−1​)=1  else 0,則控制該特征函數的權重 λ 3 \lambda_3 λ3​傾向一個大的正值,因為形容詞後面通常跟名詞。

  • 如果滿足條件: y i − 1 y_{i-1} yi−1​為介詞 && y i y_i yi​為介詞

    則記 f 4 ( x , i , y i , y i − 1 ) = 1    e l s e   0 f_4(x,i,y_i,y_{i-1})=1\ \ else \ 0 f4​(x,i,yi​,yi−1​)=1  else 0,則控制該特征函數的權重 λ 4 \lambda_4 λ4​為一個負值,因為介詞通常後面不再跟介詞。

假定輸入為n,一條路徑的score包含n個位置的多個特征函數的計算,要将每條路徑輸出一個機率,則需累加所有路徑的exp[score],通過 e x p [ s c o r e ( y ) ] ∑ e x p [ s c o r e ( y ′ ) ] \frac{exp[score(y)]}{\sum exp[score(y')]} ∑exp[score(y′)]exp[score(y)]​計算一個機率值(0~1)。

邏輯回歸

CRF機率的形式 p ( l ∣ x ) = e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( x , i , y i , y i − 1 ) ] ∑ y ′ e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( x , i , y ′ i , y ′ i − 1 ) ] p(l|x)=\frac{exp[\sum_{j=1}^{m}\sum_{i=1}^{n}\lambda_jf_j(x,i,y_i,y_{i-1})]}{\sum_{y'}exp[\sum_{j=1}^{m}\sum_{i=1}^{n}\lambda_jf_j(x,i,{y'}_i,{y'}_{i-1})]} p(l∣x)=∑y′​exp[∑j=1m​∑i=1n​λj​fj​(x,i,y′i​,y′i−1​)]exp[∑j=1m​∑i=1n​λj​fj​(x,i,yi​,yi−1​)]​看起來很像邏輯回歸,CRF實際上是基礎的邏輯回歸的序列化版本,邏輯回歸是一個log-linear的分類模型,CRF是一個log-linear的序列模型。

邏輯回歸介紹

HMM

根據前面對HMM的介紹,HMM模型可以定義為 p ( y 1 ) ∗ ∏ i p ( x i ∣ y i ) ∗ p ( y i ∣ y i − 1 ) p(y_1)*\prod_{i}p(x_i|y_i)*p(y_i|y_{i-1}) p(y1​)∗∏i​p(xi​∣yi​)∗p(yi​∣yi−1​)

将上式取log得 log ⁡ p ( y , x ) = log ⁡ p ( l 1 ) + ∑ i log ⁡ p ( y i ∣ y i − 1 ) + ∑ i log ⁡ p ( y i ∣ x i ) \log{p(y,x)}=\log{p(l_1)}+\sum_i\log{p(y_i|y_{i-1})}+\sum_i\log{p(y_i|x_i)} logp(y,x)=logp(l1​)+∑i​logp(yi​∣yi−1​)+∑i​logp(yi​∣xi​),我們可以建構一個等效于HMM的CRF模型:

  • 對于轉移機率 p ( y i = b ∣ y i − 1 = a ) p(y_i=b|y_{i-1}=a) p(yi​=b∣yi−1​=a),當 y i = b , y i − 1 = a y_i=b,y_{i-1}=a yi​=b,yi−1​=a時我們定義一組CRF轉移特征函數 f ( a , b ) ( x , i , y i , y i − 1 ) = 1 f_{(a,b)}(x,i,y_i,y_{i-1})=1 f(a,b)​(x,i,yi​,yi−1​)=1,賦予特征函數的權重 λ ( a , b ) = log ⁡ p ( y i = a ∣ y i − 1 = b ) \lambda_{(a,b)}=\log{p(y_i=a|y_{i-1}=b)} λ(a,b)​=logp(yi​=a∣yi−1​=b)
  • 對于發射機率 p ( x i = c ∣ y i = b ) p(x_i=c|y_i=b) p(xi​=c∣yi​=b),當 y i = b , x i = c y_i=b,x_i=c yi​=b,xi​=c時定義一組發射特征函數 g ( x , y ) ( x , i , y i , y i − 1 ) = 1 g_{(x,y)}(x,i,y_i,y_{i-1})=1 g(x,y)​(x,i,yi​,yi−1​)=1,賦予特征函數的權重 λ ( c , b ) = log ⁡ p ( x i = c ∣ y i = b ) \lambda_{(c,b)}=\log{p(x_i=c|y_i=b)} λ(c,b)​=logp(xi​=c∣yi​=b)

這樣,計算的score p ( y ∣ x ) p(y|x) p(y∣x)成比例關聯于HMM的結果。

CRF優于HMM的原因是:

  • CRF可以建構更多豐富的特征,HMM隻能建構二進制轉移和發射特征,CRF可以使用全局的特征,例如上述CRF特征函數舉例2。
  • CRF特征函數的權重不受限制,HMM的機率需要滿足一定的限制: 0 < = p ( x i ∣ y i ) < = 1 ,   ∑ x p ( x i = x ∣ y 1 ) = 1 0<=p(x_i|y_i)<=1,\ \sum_xp(x_i=x|y_1)=1 0<=p(xi​∣yi​)<=1, ∑x​p(xi​=x∣y1​)=1

學習CRF的參數

采用梯度下降學習CRF的特征函數的權重。首先,随機初始化CRF模型的權重,采用梯度更新算法更新權重。

對于每一個樣本

  • 計算特征權重 λ i \lambda_i λi​的梯度 ∂ ∂ w j log ⁡ p ( y ∣ x ) = ∑ j = 1 m f i ( x , j , y j , y j − 1 ) − ∑ y ′ ∑ j = 1 m f i ( x , j , y j ′ , y j − 1 ′ ) \frac{\partial}{\partial{w_j}}\log{p(y|x)}=\sum_{j=1}^mf_i(x,j,y_j,y_{j-1})-\sum_{y'}\sum_{j=1}^{m}f_i(x,j,y'_j,y'_{j-1}) ∂wj​∂​logp(y∣x)=∑j=1m​fi​(x,j,yj​,yj−1​)−∑y′​∑j=1m​fi​(x,j,yj′​,yj−1′​)
  • 更新權重 λ i = λ i + α [ ∑ j = 1 m f i ( x , j , y j , y j − 1 ) − ∑ y ′ ∑ j = 1 m f i ( x , j , y j ′ , y j − 1 ′ ) ] \lambda_i=\lambda_i+\alpha[\sum_{j=1}^mf_i(x,j,y_j,y_{j-1})-\sum_{y'}\sum_{j=1}^{m}f_i(x,j,y'_j,y'_{j-1})] λi​=λi​+α[∑j=1m​fi​(x,j,yj​,yj−1​)−∑y′​∑j=1m​fi​(x,j,yj′​,yj−1′​)]

CRF實作細節

CRF的計算難點在于分母歸一化因子的計算(配分函數),這裡我推導一下計算的細節。

假定标簽數為2,序列長度為3,計算歸一化因子。在CRF模型中,隻考慮了臨近标簽的聯系,所有歸一化因子包含的路徑數應為 2 3 = 8 2^3=8 23=8條。我們按時刻t計算不同标簽(記為k)的的歸一化因子 Z t ( k ) Z_t^{(k)} Zt(k)​, Z t = Z t ( 1 ) + Z t ( 2 ) + . . . + Z t ( k ) Z_t=Z_t^{(1)}+Z_t^{(2)}+...+Z_t^{(k)} Zt​=Zt(1)​+Zt(2)​+...+Zt(k)​, Z t ( k ) Z_t^{(k)} Zt(k)​分别是截止到目前時刻 t t t、以标簽 1 , 2 , . . . k 1,2,...k 1,2,...k為終點的所有路徑的得分指數和。接下來,我們具體計算一下:

記編碼模型(RNN、CNN)對位置 t t t标簽k的打分為 h t ( k ) h_t^{(k)} ht(k)​,标簽 i i i到 j j j的轉移機率 g i j g_{ij} gij​

位置1:

初始 Z t ( k ) Z_t^{(k)} Zt(k)​采用模型編碼分 h t k h_t^{k} htk​

位置2

Z 2 ( 1 ) = log ⁡ ( e [ Z 1 ( 1 ) + g 11 ] + e [ Z 1 ( 2 ) + g 21 ] ) + h 2 ( 1 ) = log ⁡ ( e [ Z 1 ( 1 ) + g 11 + h 2 ( 1 ) ] + e [ Z 1 ( 2 ) + g 21 + h 2 ( 1 ) ] ) Z 2 ( 2 ) = log ⁡ ( e [ Z 1 ( 1 ) + g 12 ] + e [ Z 1 ( 2 ) + g 22 ] ) + h 2 ( 2 ) = log ⁡ ( e [ Z 1 ( 1 ) + g 12 + h 2 ( 2 ) ] + e [ Z 1 ( 2 ) + g 22 + h 2 ( 2 ) ] ) Z_2^{(1)}=\log{(e^{[Z_1^{(1)}+g_{11}]} + e^{[Z_1^{(2)}+g_{21}]})}+h_2^{(1)}=\log{(e^{[Z_1^{(1)}+g_{11}+h_2^{(1)}]} + e^{[Z_1^{(2)}+g_{21}+h_2^{(1)}]})}\\ Z_2^{(2)}=\log{(e^{[Z_1^{(1)}+g_{12}]} + e^{[Z_1^{(2)}+g_{22}]})}+h_2^{(2)}=\log{(e^{[Z_1^{(1)}+g_{12}+h_2^{(2)}]} + e^{[Z_1^{(2)}+g_{22}+h_2^{(2)}]})} Z2(1)​=log(e[Z1(1)​+g11​]+e[Z1(2)​+g21​])+h2(1)​=log(e[Z1(1)​+g11​+h2(1)​]+e[Z1(2)​+g21​+h2(1)​])Z2(2)​=log(e[Z1(1)​+g12​]+e[Z1(2)​+g22​])+h2(2)​=log(e[Z1(1)​+g12​+h2(2)​]+e[Z1(2)​+g22​+h2(2)​])

位置3

Z 3 ( 1 ) = log ⁡ ( e [ Z 2 ( 1 ) + g 11 + h 3 ( 1 ) ] + e [ Z 3 ( 2 ) + g 21 + h 3 ( 1 ) ] ) Z 3 ( 2 ) = log ⁡ ( e [ Z 2 ( 1 ) + g 12 + h 3 ( 2 ) ] + e [ Z 3 ( 2 ) + g 22 + h 3 ( 2 ) ] ) Z_3^{(1)}=\log{(e^{[Z_2^{(1)}+g_{11}+h_3^{(1)}]} + e^{[Z_3^{(2)}+g_{21}+h_3^{(1)}]})}\\ Z_3^{(2)}=\log{(e^{[Z_2^{(1)}+g_{12}+h_3^{(2)}]} + e^{[Z_3^{(2)}+g_{22}+h_3^{(2)}]})} Z3(1)​=log(e[Z2(1)​+g11​+h3(1)​]+e[Z3(2)​+g21​+h3(1)​])Z3(2)​=log(e[Z2(1)​+g12​+h3(2)​]+e[Z3(2)​+g22​+h3(2)​])

然後将 Z 2 ( 1 ) , Z 2 ( 2 ) Z_2^{(1)}, Z_2^{(2)} Z2(1)​,Z2(2)​帶入上式

Z 3 ( 1 ) = log ⁡ ( e [ Z 1 ( 1 ) + g 11 + h 2 ( 1 ) + g 11 + h 3 ( 1 ) ] + e [ Z 1 ( 2 ) + g 21 + h 2 ( 1 ) + g 11 + h 3 ( 1 ) ] ) + e [ Z 1 ( 1 ) + g 12 + h 2 ( 2 ) + g 21 + h 3 ( 1 ) ] ) + e [ Z 1 ( 2 ) + g 22 + h 2 ( 2 ) + g 21 + h 3 ( 1 ) ] ) Z_3^{(1)}=\log{(e^{[Z_1^{(1)}+g_{11}+h_2^{(1)}+g_{11}+h_3^{(1)}]} + e^{[Z_1^{(2)}+g_{21}+h_2^{(1)}+g_{11}+h_3^{(1)}]})+ e^{[Z_1^{(1)}+g_{12}+h_2^{(2)}+g_{21}+h_3^{(1)}]})} + e^{[Z_1^{(2)}+g_{22}+h_2^{(2)}+g_{21}+h_3^{(1)}]}) Z3(1)​=log(e[Z1(1)​+g11​+h2(1)​+g11​+h3(1)​]+e[Z1(2)​+g21​+h2(1)​+g11​+h3(1)​])+e[Z1(1)​+g12​+h2(2)​+g21​+h3(1)​])+e[Z1(2)​+g22​+h2(2)​+g21​+h3(1)​])

同理可以計算 Z 3 ( 2 ) Z_3^{(2)} Z3(2)​,這裡就不重複寫了。

總結

  • 每一步實際通過 l o g s u m e x p logsumexp logsumexp 來累加到一個節點 Z t ( k ) Z_t^{(k)} Zt(k)​的所有路徑指數和。
  • 編碼模型分 h t ( k ) h_t^{(k)} ht(k)​也可以提前指數相加進來。

簡明條件随機場CRF介紹(附帶純Keras實作)

Advanced NLP: Conditional Random Fields

CRF主體參考 Introduction to Conditional Random Fields

知乎點贊排前2的回答 如何用簡單易懂的例子解釋條件随機場(CRF)模型?它和HMM有什麼差別?

繼續閱讀