1 前言
在推導線性鏈CRF之前,我們先看一個詞性標註(POS)的例子
在我們想要標註book
這個詞的時候,是將其標註成名詞noun
或者動詞verb
是需要取決於當前詞的前一個詞的。在這種情境下,前一個詞‘a’的詞性一個限定詞(determiner),所以我們選擇將book
標註成noun
(名詞)。對於這樣的序列標記任務,以及更一般的結構化預測任務,Linear-chain CRF對標籤之間的上下文依賴關係建模是有幫助的。
2 什麼是結構化預測?
相信很多人對文本分類問題都比較熟悉,它的目標定義很簡單,將一個文本樣本輸入到一個模型中,然後讓模型輸出一個結果標籤,這個標籤可以是一個二分類的標籤,也可以是一個多分類的標籤。而除了這種範式的問題外,NLP領域還有一大問題範式:序列類任務。這種任務最大的特點就是輸出的標籤是一個序列。而根據具體的任務形式,可以將序列類任務分成兩種子類:
- 序列標註任務,對於一段文本,以詞或者字符等基本語素爲基本單位,模型輸出的標籤序列與原始文本的語素序列是一一對應的。具體的任務例子有詞性標註,實體識別等。
- 序列生成任務,即大家熟知的NLG任務。與序列標註任務不同,它不要求輸出的標籤序列與原始文本序列一一對應,長度也不需要相同。常見的序列生成任務有機器翻譯,文本摘要,智能對話回答生成等。
當然也可以將序列標註任務視作特殊的序列生成任務來做,只不過要加上長度的限定條件。
這種序列類任務的共同特點是每個文本樣本都會有指數級或者無限量級的標籤序列候選組合。對於詞性標註來說,假設一共有n種詞性,那麼對一個長度爲L的文本,所有可能出現的標籤序列組合有種。對於序列生成任務如機器翻譯來說,拋開一些模型的限定條件,它可能生成的標籤序列即目標語種詞序列是無限的。
基於上述特點,要解上述問題,需要設計一些方法,將問題結構化,使得模型能夠較爲高效得去學習,去訓練。常用的結構化預測模型有:基於RNN的decoder、卷積網絡作爲decoder、引入注意力機制的decoder、條件隨機場等等。
而常用的訓練算法有:
- Structured perceptron,structured large margin
- sampling corruptions of data
- 使用動態規劃算法
- 使用強化學習或者minimum risk training
總結而言:結構化預測(Structured Prediction)是解決分類或迴歸問題的框架,其中輸出變量相互依賴或約束。它可以被看作是我們利用輸出空間中的結構的預測子集,可以理解爲上一時刻的輸出可以作爲下一個預測的輸入。結構化預測問題中使用的損失函數將輸出視爲一個整體。
詞性標註任務定義
我們將輸入序列單詞記爲,輸出空間(即所有可能的詞性目標序列的集合)記爲,函數代表和的擬合函數,預測標籤可以使用如下公式:
其中代表最優的結果序列。
在這裏我們解釋下爲什麼需要區別結構化預測與常規分類任務?通過上面公式可以看到,對於結構化預測需要在輸出空間上進行搜索:尋找某個來使得最大化,通常這種情況是非常複雜的。這是爲什麼呢?對於我們這個詞性序列標註任務而言,假設所有可能的POS標籤個數爲,序列長度爲,那麼所有可能輸出空間包含中結果。不過,如果我們忽略輸出空間中的依賴關係並簡單地“貪心算法”連續解碼,我們可以使用以下面的公式分別對輸入序列中的所有單詞進行解碼,僅需要操作:
3 條件隨機場
條件隨機場 (CRF, Lafferty et al., 2001 ) 是一種概率圖模型,它結合了判別分類和圖模型的優點。
3.1 判別式模型與生成式模型
對於分類任務的判別式模型中,我們直接對 建模,相反地生成式模型需要結合和預測結果的貝葉斯推斷一起建模。怎麼理解這句話?其實很簡單,還是回到上面詞性標註的任務,如果我們直接基於貪心思想直接基於條件概率構建模型,則它們之間的 本身沒有依賴關係,直接變成了聯合乘積就結束了。
- 生成式模型描述了一些標籤如何是如何生成一些特徵向量 X,而判別模型直接描述如何分配特徵向量 X 一個標籤。
- CRF 是判別模型。
3.2 Probabilistic Graphical Models:概率圖模型
概率圖模型 (PGM) 將許多變量的複雜分佈表示爲變量較小子集的局部因素的乘積。生成模型先天然地可以由有向圖模型表示,因爲它們假設可以 生成,其中,而判別模型是純天然的無向圖模型(單純的模型 :p ( y∣ x ))。請參見下圖中左側的生成 PGM 和右側的判別式。
CRF 是判別模型,可以表示爲因子圖,由公式來建模表示:
表示節點,即隨機變量(在此處詞性標註任務中是一個pos tag),具體地用爲隨機變量建模,注意現在是代表了一批隨機變量(想象對應一條sequence,包含了很多的tag),爲這些隨機變量的分佈‘’
表示邊,即概率依賴關係
如果一個graph太大,可以用因子分解將
寫爲若干個聯合概率的乘積。咋分解呢,將一個圖分爲若干個“小團”,注意每個團必須是“最大團”(就是裏面任何兩個點連在了一塊,就是最大連通子圖),則有:
其中代表一個最大團a上隨機變量的聯合概率,下面線性鏈CRF會解釋道。N(a)代表最大團上的節點集合,N代表neighbors 的意思。其中 ,歸一化是爲了讓結果算作概率。
基於這種概率圖結構,我們可以將CRF應用詞性標註任務中,因爲我們想要假設當前詞性的標籤依賴與此前字符的標籤,這種基於概率圖的CRF也稱爲 linear-chain CRF。
Linear-Chain CRF
現在我們設計一種針對詞性標註的CRF模型,其中假設每一個標籤依賴於先前標籤,輸入序列是詞語{x}的序列,如下圖“聯通子圖”表示:
這個特定的線性鏈 CRF 意味着以下條件獨立假設:
每個 POS 標籤只依賴於它的直接前繼和後繼和 :
我們可以簡單地將上述因子圖中的所有因子相乘,得到分解後的條件概率分佈:
另外,CRF奏效的一個重要因素是選擇子團的計算方式,這個函數通常叫勢函數,是一組實值特徵函數的線性組合,即和、組合,如下公式所示:
直觀上我們可以這麼理解上面這個公式,第一個累加和代表時刻的標籤預測概率,第二個累加和代表和的同時發生的概率。幸運的是有了深度學習之後,特徵函數不需要我們手動構建。就是partition function,來保證公式是一個正確定義的概率分佈,保證所有y出現的概率總和爲 1。我們看到上面公式的計算還是很麻煩的,接下來就是 belief propagation(消息傳播)算法登場了。
4 訓練Linear-Chain CRF
我們可以用最大似然估計算法訓練 CRF的參數,給定一組 N數據點,使用對似然執行梯度下降算法計算PGM的聯合概率,這些可以通過消息傳播算法來計算。讓我們看一下對數似然:
爲了優化參數,我們需要計算對數似然參數的梯度,如下:
參數的梯度如下:
參數推理
條件隨機場的概率計算問題就是給定條件隨機場,輸入序列x和輸出序列y,計算提交概率P(Y_{i}=y_{i}|x),P(Y_{i-1}=y_{i-1},Y_{i}=y_{i}|x)。
將問題拆分成多個子問題進行求解:
對於前向概率可以用如下公式計算:
對於最後一項:
對於後向概率計算:
整體概率:
歸一化之後:
參考資料
Structured Prediction part one - Deriving a Linear-chain CRF
CMU NLP課程總結—— Structured Prediction Basics
概率圖模型體系:HMM、MEMM、CRF