# [白話解析] 用水滸傳為例學習條件隨機場 ## 0x00 摘要 本文將盡量使用易懂的方式,儘可能不涉及數學公式,而是從整體的思路上來看,運用感性直覺的思考來解釋條件隨機場。並且用水滸傳為例學習。並且從名著中找了具體應用場景來幫助大家深入這個概念。 在機器學習過程中,會遇到很多晦澀的概念,相關數學公式很多,大家理解起來很有困難。遇到類似情況,我們應該多從直覺角度入手思考,用類別或者舉例來**附會**,這樣往往會有更好的效果。 我在講解論述過程中給自己的要求是:在生活中或者名著中找一個例子,然後用自己的話語闡述出來。 ## 0x01 HMM 隱馬爾可夫 首先還是需要大概介紹下HMM和MEMM,這樣才能知道為什麼要引入CRF。 其中HMM在前文[[白話解析\]以水滸傳為例學習隱馬爾可夫模型](https://www.cnblogs.com/rossiXYZ/p/12430955.html)中也詳細介紹。這裡主要講講其推導過程和其缺點。 ### 1. HMM 模型 HMM模型中存在兩個假設:一是輸出觀察值之間嚴格獨立,二是狀態的轉移過程中當前狀態只與前一狀態有關(一階馬爾可夫模型)。下面我們就講講這兩個假設是如何應用在推導過程中的。 單樣本樸素貝葉斯分類任務中 (其中 x 是觀測值,y 是隱藏狀態) : $$ P(y|x)=\frac{P(x|y)*P(y)}{P(x)} $$ 擴充套件到序列化樣本分類問題任務中為: $$ P(y_1^n ∣x_1^n)= \frac{P(x_1^n∣y_1^n)∗P(y_1^n)}{P(x_1^n)} $$ 其中n表示的是序列的長度,這就是我們計算某個標籤序列在序列分類中的概率得分。 我們以詞性標註這一序列化分類問題進行後面的講解。對於一個給定的句子x_i^n=(x_1,x_2,...,x_n),我們的目的是為其找到一個得分最高的標籤序列 (yˆ1,yˆ2,...,yˆn ),則該問題轉化為: $$ \hat y_1^n = arg_{y_1^n} \ max \frac{P(x_1^n∣y_1^n)∗P(y_1^n)}{P(x_1^n)} $$ 對於同一個句子的標註,分母是相同的,所以該問題可以轉化為: $$ \hat y_1^n = arg_{y_1^n} \ max P(x_1^n∣y_1^n)∗P(y_1^n) $$ 回憶下聯合分佈的公式 $$ P(X = x \ and \ Y = y) = \ P(Y=y|X=x)P(X=x) = \ P(X=x|Y=y)P(Y=y) $$ 所以上述問題轉化後的公式就是 P(X,Y)。即 HMM 試圖去擬合 X,Y 的聯合分佈 P(X,Y),所以它是一種生成式模型。 現在我們需要引入HMM的兩個基本假設,才能計算 P: - 齊次馬爾可夫性假設。即假設隱藏的馬爾科夫鏈在任意時刻 t 的狀態只依賴於其前一時刻的狀態,與其他時刻的狀態及觀測無關,也與時刻t觀測無關。 - 觀測獨立性假設。即假設任意時刻的觀測只依賴於該時刻的馬爾科夫鏈的狀態,與其他觀測及狀態無關。 **以上這兩個假設是 HMM 的核心,之後的公式推導都是依賴這兩個假設成立的基礎上進行的。** 這兩個假設分別可以用於計算上。 $$ 假設1 \ 用於求解 \ 當前狀態 \ P(y_1^n) \\ 假設2 \ 用於求解 \ 當前觀測值 \ P(x_1^n∣y_1^n) $$ 原始情況下,根據有向圖模型計算方式: $$ P(y_1^n)=P(y_1)∗P(y_2∣y_1)∗P(y_3∣y_1,y_2)∗...∗P(y_n∣y_1,y_2,...,y_{n−1}) $$ 我們先把 **假設1** 用於求解,則其計算方式變為: $$ P(y_1^n)=P(y_1)∗P(y_2∣y_1)∗P(y_3∣y_2)∗...∗P(y_n∣y_{n−1}) $$ 根據 **假設2** ,當前觀測值僅僅與當前狀態有關,與其他時刻狀態和觀測值無關,所以 $$ P(x_1^n∣y_1^n)=P(x_1∣y_1)∗P(x_2∣y_2)∗...∗P(x_n∣y_n) $$ 即 - **假設1** 使用bi-gram近似得到轉移概率 Transition probability。 - **假設2** 就得到發射概率 emission probability。 最後合併起來: $$ \hat y_1^n = arg \ max_{y_1^n} ∏_{t=1}^nP(x_t∣y_t)∗P(y_t∣y_{t−1}) $$ **HMM的學習過程就是在訓練集中學習這兩個概率矩陣** (大小為 (y, y),(x, y) ) ### 2. HMM有哪些缺點 HMM 擁有以下幾個缺陷: - 在很多序列化標註任務中,尤其當不能列舉觀測值時,需要用大量的特徵來刻畫觀察序列。如在文字識別中識別一個未見的公司名字時,除了傳統的單詞識別方法以外,還需要用到很多特徵資訊,如大寫字母、結尾詞、詞性等資訊。也就是,我們需要用特徵對觀測值進行引數化,而HMM中直接利用觀測值本身。 - 在命名實體識別的任務中,由於實體本身結構所具有的複雜性,利用簡單的特徵函式往往無法涵蓋所有的特性,這時HMM的假設前提使得它無法使用複雜特徵(它無法使用多於一個標記的特徵)。 - 在很多自然語言處理任務中,需要解決的問題是在已知觀測序列的情況下求解狀態序列,HMM採用的生成式的聯合概率分佈P(x_1^n,y_1^n)來求解條件概率P(y_1^n|x_1^n),這種方法不適合處理很多特徵描述觀測序列的情況。為此MEMM直接採用條件概率模型P(y_1^n|x_1^n)。 ## 0x02 MEMM ### 1. 最大熵模型 其中最大熵模型在前文 [[白話解析\] 深入淺出最大熵模型](https://www.cnblogs.com/rossiXYZ/p/12244760.html) 以及 [[白話解析\]用水滸傳為例學習最大熵馬爾科夫模型](https://www.cnblogs.com/rossiXYZ/p/12435815.html) 中也有介紹。 假設離散隨機變數 x 的分佈是P(x),則關於分佈P的熵定義為: $$ H(P) = -\sum_xP(x)logP(x) $$ 可以看出當 x 服從均勻分佈時對應的熵最大,也就是不確定性最高。 給定離散隨機變數 ![[公式]](https://www.zhihu.com/equation?tex=x) 和 ![[公式]](https://www.zhihu.com/equation?tex=y) 上的條件概率分佈P(y|x),定義在條件概率分佈上的條件熵為: $$ H(P) = -\sum_{x,y}\hat{P}(x)P(y|x)logP(y|x) $$ 其中,p̃(x) 是樣本在訓練集熵的經驗分佈,也就是 x 的各個取值在樣本中出現的頻率統計。 最大熵模型就是,在 "滿足事先已約束" 的條件下,學習適合的 P(y|x) ,使得條件熵 H(P) 的取值最大。 我們使用特徵函式來表示約束條件,即 特徵函式也就是用來指示元素是否屬於某一個子集。 ### 2. 最大熵馬爾科夫模型 最大熵馬爾科夫模型把HMM模型和maximum-entropy模型的優點集合成一個產生式模型,這個模型**允許狀態轉移概率依賴於序列中彼此之間非獨立的特徵上,MEMM是這樣的一個概率模型,即在給定的觀察狀態和前一狀態的條件下,出現當前狀態的概率。** 最大熵馬爾科夫模型利用判別式模型的特點,直接對每一個時刻的狀態建立一個分類器,然後將所有的分類器的概率值連乘起來。為了實現是對整個序列進行的分類。在每個時刻t時,它的特徵不僅來自當前觀測值x_t,而且還來自前一狀態值y_{t−1} 。所以MEMM中,給定觀測序列 i1,...in 後,某個狀態序列 in 的條件概率是可以直接學習的。就是 - HMM下一個隱藏狀態 Y + 1 只是由目前隱藏標籤狀態 Y 決定。 - MEMM下一個隱藏狀態 Y + 1 只是由目前隱藏標籤狀態 Y 和 觀察狀態 X 共同決定。 **MEMM的序列標註問題**定義為,給定觀測序列 x_1^n,求解某個狀態序列 y_1^n ,並且使得條件概率最大,而且該條件概率滿足馬爾科夫假設,也就是條件概率依賴於當前時刻的觀察狀態和前一時刻的標籤狀態: $$ P(y_1^n|x_1^n) = \prod_{t=1}^n P(y_t|y_{t-1},x_t) $$ MEMM貪心地取當前時刻概率分佈中最大對應的標籤作為當前時刻的解碼標籤。 其中對於前一時刻可能的狀態取值y_{t−1} 和當前觀測值x_t,**當前狀態取值y_t 的概率**通過最大熵分類器建模為: $$ P(y_t|y_{t-1},x_t) = \frac{1}{Z(x_t,y^t)}exp(\sum_aλ_af_a(x_t,y_{t-1})) $$ 其中a, λ_a, f_a 分別表示特徵函式數量,特徵函式權重和第 a個特徵函式,Z() 這部分是歸一化。 ### 3. MEMM有哪些缺點 通過上面的公式,你會發現最大熵模型在每一個時刻,針對不同的前一狀態y′ 進行歸一化操作,這是一種區域性的歸一化操作,會存在標籤偏置問題。即,最大熵馬爾科夫模型雖然結合了隱馬爾科夫模型和最大熵模型的最大特點,但是仍然忽略了標籤之間的約束關係,只求在當前時刻的最大條件概率。 這裡有個網上常見的論斷: > 當前狀態是 S1,假設下一個狀態 S2 有兩個選擇,一個是p, 一個是c。經過區域性歸一化之後,因為p的轉出狀態比較少,導致 p 的轉移概率*發射概率 相對於轉出狀態多的c而言是比較大的,這會使模型更傾向選擇狀態p。 針對這個論斷,我們可以寫程式碼實驗下 (*如果哪位兄弟知道如何數學論證,還請告訴我,謝謝*) 。 ```python # 以下就是MEMM的viterbi演算法 def predict_viterbi(x, f_map, tags_s, word_t_map, lib_model): """ For each word in vector x predict his tag. Prediction is done by viterbi algorithm. Check all tags options/globally. :param x: X vector of all words to be tagged. :param f_map: Features map. :param tags_s: Tags set. :param word_t_map: Word to tags map. :param lib_model: Liblinear model. :return: Return best predicted list of tags for each word in x respectively. """ for ind, word in enumerate(x): # Calculate for each word best scores/probabilities and best tags for each word. for pp_t, p_t in v[ind]: for curr_tag in available_tags: word_features = extract.generate_word_features(is_rare, p_t, pp_t, word, ind, x) features_vec = features_to_vec(word_features, f_map) scores = lib_model.predict(features_vec) score = np.amax(scores) if (p_t, curr_tag) not in max_score or score > max_score[(p_t, curr_tag)]: max_score[(p_t, curr_tag)] = score max_tags[(p_t, curr_tag)] = pp_t # 預測程式碼,可以修改這個以測試 def predict(self, feature_ids): weights = self.weights scores = np.zeros(len(self.labels)) for f in feature_ids: if f in weights: scores += weights[f] scores = 1/(1+np.exp(-scores)) scores = scores/np.sum(scores) return scores #把上述程式碼修改下,自己傳入feature或者直接傳入weight就知道了。 #比如分別傳入weight #[1, 2, 6, 1, 2] #[1, 2, 9] #就會發現,如果傳入的列表中item的個數越少,則np.amax(scores)越大。 #所以這就與之前的論斷相一致: #經過區域性歸一化之後,因為 狀態 p 的轉出狀態比較少,導致 “轉移概率 x 發射概率” 相對於轉出狀態多的 狀態 c 而言是比較大的,這會使模型傾向於更多的選擇 狀態 p 。 #其實 S2 選擇 p 節點還是 c 節點只取決於 P(p|S1)、P(c|S1),即只與 “S1” 的上下文有關,與 “S2” 的上下文無關,這就是MEMM產生偏置的一種情況。 ``` 因為MEMM有缺點,所以人們引入了CRF。CRFs與最大熵模型的本質區別是:最大熵模型在**每個狀態都有一個概率模型,在每個狀態轉移時都要進行歸一化**。如果某個狀態只有一個後續狀態,那麼該狀態到後續狀態的跳轉概率即為1。這樣,不管輸入為任何內容,它都向該後續狀態跳轉。而CRFs是在**所有的狀態上建立一個統一的概率模型,這樣在進行歸一化時,**即使某個狀態只有一個後續狀態,它到該後續狀態的跳轉概率也不會為1,從而解決了“label bias”問題。 ## 0x03 CRF相關知識 ### 1. 什麼是場 看到這個概念,估計很多同學會懵圈。這不是物理學概念嘛,我們都學過電場,磁場。怎麼這裡也出來了一個場。 其實這是從物理學借鑑來的概念,這也不奇怪。比如熵這個概念就是物理學借鑑過來的。這說明數學物理是自然科學的基礎。 下面是我從網上或者其他地方找到的關於“場”的解釋。希望能對大家理解有幫助。 **闡釋1** 這個論斷是一個傳媒學者講藝術表演創作時候提到的。你可以認為她說的不精確,但是不能否認從其他行業的角度來看,反而更容易理解場這個概念。 > 場就是互相影響。電影表演不需要場。戲劇表演需要場,因為戲劇需要和大量觀眾互動必須對觀眾產生影響。 **闡釋2** > 這是借用的物理裡的概念。理論物理裡提出用蒙特卡羅演算法求解體系可能結構的方法,每個結構出現的概率和exp(-beta*E)成正比,-beta和溫度的倒數有關,E是體系每個部分的勢能之和,和系統所有可能構型的這個因子之和成反比,這個和就是配分函式,而勢函式就是用來計算體系每個部分間不同位置關係下可能的勢能的理論假設的函式形式。機器學習就是借用這種模型來產生概率罷了,或者說它是我們要考察的物理量的一個因子,而且這個被考察物理量不僅取值和這個因子有關,其變化規律也和這個因子有關。這是借用的物理裡的概念。理論物理裡提出用蒙特卡羅演算法求解體系可能結構的方法,每個結構出現的概率和exp(-beta*E)成正比,-beta和溫度的倒數有關,E是體系每個部分的勢能之和,和系統所有可能構型的這個因子之和成反比,這個和就是配分函式,而勢函式就是用來計算體系每個部分間不同位置關係下可能的勢能的理論假設的函式形式。機器學習就是借用這種模型來產生概率罷了,或者說它是我們要考察的物理量的一個因子,而且這個被考察物理量不僅取值和這個因子有關,其變化規律也和這個因子有關。 ### 2. 隨機場 隨機場是由若干個位置組成的整體,當給每一個位置中按照某種分佈隨機賦予一個值之後,其全體就叫做隨機場。舉詞性標註的例子:假如我們有一個十個詞形成的句子需要做詞性標註。這十個詞每個詞的詞性可以在我們已知的詞性集合(名詞,動詞...) 中去選擇。當我們為每個詞選擇完詞性後,這就形成了一個隨機場。 ```java 舉梁山為例子: 比如梁山好漢一起去聚義廳開會。 每把椅子是一個位置。給每個椅子賦予一個好漢。這個好漢如何分配? 每次從梁山上各個小團體(三山派,潯陽幫,宋江嫡系......)中隨機取出一人安排到椅子上。 ``` ### 3. 馬爾可夫隨機場 馬爾可夫隨機場(Markov random field)又稱為概率無向圖模型,是一個可以由無向圖表示的聯合概率分佈。 **概率無向圖模型:** 設有聯合概率分佈 P(Y) ,由無向圖 G=(V,E) 表示,在圖 G 中,結點表示隨機變數,邊表示隨機變數之間的依賴關係。如果聯合概率分佈 P(Y) 滿足成對、區域性或全域性馬爾可夫性,就稱此聯合概率分佈為概率無向圖模型或馬爾可夫隨機場。分別介紹一下三個概念: - **成對馬爾可夫性**:給定所有其他變數,兩個非鄰接變數條件獨立。這是因為兩個節點沒有直接路徑,並且所有其他路徑上都有確定的觀測節點,因此這些路徑也將被阻隔。其實意思就是說沒有直連邊的任意兩個節點是獨立的。 - **區域性馬爾可夫性**:給定變數 v 的所有鄰接變數 w,則該變數 v 條件獨立於其他變數 o。即在給定某個變數的鄰接變數的取值條件下,該變數的取值將於其他變數無關。就是說,v 的取值只和它所有鄰接變數w相關。 - **全域性馬爾可夫性**:設節點集合A,B是在無向圖G中被節點集C分開的任意節點集合,如下圖所示。全域性馬爾可夫性是指在給定x_C的條件下,x_A和x_B條件獨立。也就是說,在A和B被C分開時候,A和B條件獨立,這時候才說是滿足全域性馬爾可夫。 $$ A ------ C ------- B $$ 總的說來,馬爾可夫隨機場假設隨機場中某一個位置的賦值僅僅與和它相鄰的位置的賦值有關,和與其不相鄰的位置的賦值無關。 因此,聯合概率分佈的分解一定要讓 xi 和 xj 不出現在同一個劃分中,從而讓屬於這個圖的所有可能概率分佈都滿足條件獨立性質。讓非鄰接變數不出現在同一個劃分中,即每一個劃分中節點都是全連線的。這將我們引向了圖的一個概念,團(clique)。 ### 4. 最大團 CRF是通過團以及勢函式的概念來定義條件概率P(y|x)。所以我們要學習最大團。 馬爾可夫隨機場中,對於圖中結點一個子集,若其中任意兩結點間都有邊連線,則稱該結點子集為一個團,若在一個團中,加入另外任何一個結點都不再形成團,則稱該團為極大團,換言之,極大團就是不能被其他團所包含的團。 ```java 比如梁山好漢一起去聚義廳開會。你就會發現,同一個小集團的人會主動聚在一起。 比如打虎將李忠就必然在三山幫這一個小集團中。而九尾龜陶宗旺則必然在黃門山(摩雲金翅歐鵬、神運算元蔣敬、鐵笛仙馬麟、九尾龜陶宗旺)小集團中。 李忠和陶宗旺兩個人在私下不會有什麼交集。而黃門山這四人,每個人和每個人之間都是全聯接,都互相熟悉。 如果往黃門山四人中加入其他任何一個梁山好漢之後變成五人團體,則這個五人團體就不再算是黃門山這個小集團了。所以黃門山四人就是極大團。 ``` 顯然,最簡單的團就是兩個節點以及一條邊,而我們最開始就針對兩節點之間的相關關係(每條邊)定義了勢函式。 ### 5. 勢函式 勢函式的作用是定量刻畫變數集 Q 中變數之間的相關關係。比如句首幾個字的關係。 #### 數學定義 給定概率無向圖模型,設其無向圖為G,C為G上的最大團,Y_C表示C對應的隨機變數(是最大團的所有結點)。 φ(Y_C)是一個最大團 C 上隨機變數們的聯合概率,是用於對團C中的變數之間的關係進行建模,是定義概率分佈的函式。 φ(Y_C)被稱為與團C對應的「勢函式(potential function)」。一般而言,你要為圖中的每個極大團(maximal clique)定義一個勢函式。 #### 具體形式 無向圖模型中*勢函式*的具體形式通常定義為*特徵函式*的帶權加和, 也即這些方法通常將條件隨機欄位中的勢函式定義為某些人工設計的特徵函式的線性組合,這些函式是啟發式的。 勢函式是一個表示其對應的團(clique)狀態的非負實值函式,表徵的是該clique的狀態。對於一個圖中的每一個clique來講,它有一個狀態,用勢函式表示,狀態則是由多個feature的 加權和 構成,因為一個clique是包含多個 節點的,每個節點其對應的隨機變數,都會對應一個feature。 **因此,馬爾可夫隨機場中,多個變數的聯合概率分佈能基於團分解為多個勢函式的乘積,每一個團對應一個勢函式**。所以可以**將聯合概率分佈分解為其極大團上的勢函式的乘積**。 #### 從最大熵的角度來看勢函式 熵用來表示任何一種能量在空間中分佈的均勻程度,能量分佈得越均勻,熵就越大。 對於勢函式,我們換一種理解方式,定義將potential function表示成指數函式 $$ φ_C(Y_C) = exp \{-E(Y_C)\} $$ 這樣p(x)就可以表示成一系列E(Yc)的和的指數形式。E(Yc)叫做能力函式。 這樣轉化之後,可以將圖理解為一個能力的集合,他的值等於各個最大團的能量的和。CRF要做的就是最小化這些能量,以達到穩定的結果。均勻分佈就是最穩定的,熵就達到了最大值。即,用能量最小化表示整個系統達到穩態時各個變數的狀態滿足的條件。 ```java 比如梁山上,有各種小團體。每一個團體對應一個勢函式。 比如 生辰綱七人組,登州幫,三山幫,揭陽幫,降將幫,大名府幫,黃門山幫,清風山.... 那麼梁山就可以理解為一個能力的集合,他的值就等於各個小團體能量的和。 CRF就是要最小化這些能量,這樣梁山才能穩定,最好能均勻分佈,這樣熵就達到了最大值。 ``` ### 6. 特徵函式 特徵函式是一些經驗的特性,我們使用特徵函式來表示約束條件。特徵函式在前文[[白話解析]用水滸傳為例學習最大熵馬爾科夫模型](https://www.cnblogs.com/rossiXYZ/p/12435815.html)也有詳述。 勢函式是定義場裡面所有變數關係的的一個函式,而因子是為了或者描述簡化場裡面變數關係所限定的一個假設,例如同時考慮兩個相鄰的因子或者所有相鄰的因子。 特徵函式用來表示因子內的變數的關係,例如構成因子的變數的某些特徵是相似的。比如在詞性標註中,特徵函式可能是:前一個詞是動詞,當前詞的觀察狀態[是不是句首,是不是句尾,是不是數字] CRF中,特徵(feature)是一系列把我們觀測到的 d 和我們想要預測的類別 c 聯絡到一起的證據(evidence)。特徵是在實數範圍內一個函式 f。這些特徵是怎麼表達的呢?有兩種特徵: - 一種是轉移特徵,就是涉及到兩個狀態之間的特徵。 - 另一種就是簡單的狀態特徵,就是隻涉及到當前狀態的特徵。 特徵表達形式比較簡單,就是你是否滿足我特徵所說的這個配置,是就是1,不是就是0。 模型會給每個特徵分配一個權重,我們最後要學的就是這些權重: - 正權重說明這種結構很可能是正確的 - 正權重說明這種結構很可能是不正確的 我們通過引入兩類特徵函式便可以定義出目標條件概率: - 表示定義在觀測序列的兩個相鄰標記位置上的轉移特徵函式,用於刻畫相鄰標記變數之間的相關關係以及觀測序列對他們的影響, - 表示在觀測序列的標記位置i上的狀態特徵函式,用於刻畫觀測序列對標記變數的影響。 例如詞性標註,如何判斷給出的標註序列靠譜不靠譜,轉移特徵函式主要判定兩個相鄰的標註是否合理,例如,動詞+動詞語法不通。狀態特徵函式判定觀測值與對應的標註是否合理,例如:ly結尾的詞-->副詞較合理。 因此我們可以定義一個特徵函式集合,用這個特徵函式集合來為一個標準序列打分,根據此選出靠譜的標註序列。每一個特徵函式都可以用來為一個標準序列評分,把集合中所有特徵函式對同一個標註序列的評分綜合起來,就是這個標註序列最終的評分值。條件*隨機場*完全由*特徵函式*和對應的權值確定。 和HMM不同的是,CRF並沒有做出HMM的假設,CRF使用feature function來更抽象地表達特徵,使得他不再侷限於HMM的兩類特徵。特徵函式可以表示當前的state與任意一個observation或者 state甚至future state的關係。也就是說,特徵方程的存在允許CRF有十分自由的特徵表達。這也就是條件隨機場中場所代表的意義。舉例如下: ```python func1 = if (output = B-NP and feature="U01:DT") return 1 else return 0 func2 = if (output = I-NP and feature="U01:DT") return 1 else return 0 func3 = if (output = O and feature="U01:DT") return 1 else return 0 ... funcXX = if (output = B-NP and feature="U01:NN") return 1 else return 0 funcXY = if (output = O and feature="U01:NN") return 1 else return 0 ``` 一個特徵函式模板會生成 L x N 個特徵函式, 其中 L 輸出類別的情況數目,N 是expanded feature的所有可能的情況數目。 ### 7. 概率無向圖模型聯合概率分佈 實際上,我們更關心的是如何求概率無向圖模型聯合概率分佈。對給定的概率無向圖模型,我們希望將整體的聯合概率寫成若干子聯合概率的乘積的形式,也就是將聯合概率進行因子分解,這樣便於模型的學習與計算。事實上,概率無向圖模型的最大特點就是易於因子分解。所以我們將概率無向圖模型的聯合概率分佈表示為其最大團上的隨機變數的函式的乘積形式的操作,稱為概率無向圖模型的因子分解。 對於概率分佈函式而言,我們也希望能夠這樣做,即給定概率無向圖模型,設無向圖為 G , C 為 G 上的最大團, YC 表示 C 對應的隨機變數。那麼概率無向圖模型的聯合概率分佈 P(Y) 可分解為圖中所有最大團 C 上的函式 ΨC(YC) 的乘積形式。 總結一下,便得到 **Hammersley-Clifford定理 ,那麼整個概率無向圖模型的聯合概率分佈P(Y)可寫作圖中 所有 最大團C上的勢函式φ(Y_C)的乘積形式**。即 $$ P(Y) = \frac{1}{Z}\prod_Cφ_C(Y_C)  \\Z = \sum_Y\prod_Cφ_C(Y_C) $$ 其中,C 是無向圖的最大團, YC 是 C 的結點對應的隨機變數, ΨC(YC) 是 C 上定義的嚴格正函式,乘積是在無向圖所有的最大團上進行的。Z表示規範化因子,以確保P(x)是被正確定義的概率。 #### 另外一種考慮 最大團的思路 儘管在給定每個節點的條件下,分配給某節點一個條件概率是可能的,***但條件隨機場的 無向性很難保證每個節點在給定它的鄰接點條件下得到的條件概率和以圖中其它節點為條件得到的條件概率一致***。因此導致我們不能用條件概率引數化表示聯合概率,而要從一組條件獨立的原則中找出一系列區域性函式的乘積來表示聯合概率。 個人理解就是:因為crf希望過計算整個標記序列 Y 的聯合概率分佈,而不是在給定當前狀態條件下定義下一個狀態的分佈。但是從每個節點角度講,很難保持條件概率一致。所以選取最大團這個具有獨立性的小群體。 選擇區域性函式時,必須保證能夠通過分解聯合概率使沒有邊的兩個節點不出現在同一區域性函式中。最簡單的區域性函式是定義在圖結構中的最大團(clique)上的勢函式(Potential function),並且是嚴格正實值的函式形式。 但是一組正實數函式的乘積並不能滿足概率公理,則必須引入一個歸一化因子 Z ,這 樣可以確保勢函式的乘積滿足概率公理,且是無向圖 中節點所表示的隨機變數的聯合概率分佈。 這樣出來的圖是等價于吉布斯分佈的,就是說,你可以只在每個最大子團上定義一個聯合分佈(而不需要對每個邊定義一個聯合分佈),整個圖的聯合概率分佈就是這些最大子團的聯合概率分佈的乘積。當然這裡最大子團的聯合概率並不是標準的聯合概率形式,是沒歸一化的聯合概率,叫factor(因子),整個圖的聯合概率乘完之後下面再除一個歸一化因子和就歸一化了,最終是一個聯合概率,每個子團記載的都是因子,是沒歸一化的概率,嚴格大於零,可以大於一。但關鍵是依賴關係、這些相關關係已經encode在裡面了。 ### 8. 從水滸傳角度看 從水滸傳角度看,可以這麼定義特徵函式和勢函式。對了,**這裡的勢函式就可以看成是勢力** ```java 三山幫指的是二龍山、桃花山和少華山。這個派系一共13人,頭領是魯智深。下面人是:二龍山的魯智深、楊志、武松、施恩、曹正、張青和孫二孃;桃花山的周通、李忠;少華山的史進、朱武、陳達,楊春。 定義特徵函式如下 *********************** 特徵函式 之 節點屬性 s_1 = 是不是倒拔垂楊柳的僧人 s_2 = 是不是打虎英雄 s_3 = 是不是黑旋風 s_4 = 是不是五虎將 s_5 = 是不是八驃騎 s_6 = 是不是小彪將 s_7 = 是不是一同參贊軍務頭領 s_8 = 是不是步軍將校一十七員 s_9 = ...... *********************** 特徵函式 之 邊屬性 t_1 = 是不是親兄弟 t_2 = 是不是叔侄 t_3 = 是不是夫妻 t_4 = 是不是表親 t_5 = 是不是師徒 t_6 = 是不是主僕 t_7 = 是不是曾經共過生死 t_8 = 是不是一起經歷過尷尬事 t_9 = 是不是同鄉 t_10 = 是不是 "聚會之前就是結拜兄弟" t_11 = 是不是同僚 t_12 = 是不是有同地工作經歷 t_13 = ...... 定義勢函式如下: *********************** 勢函式 φ = λ1t1 + λ2t2 + λ3t3 + λ4t4 + λ5f5 + ...... + w1t1 + w2t2 + w3t3 + w4t4 + w5t5 + ...... 計算結果如下: *********************** 計算結果 s_1 = 魯智深 ————————————— 倒拔垂楊柳的僧人 s_2 = 武松 ——————————————— 打虎英雄 s_3 = 0 s_4 = 0 s_5 = 楊志 史進 ——————————— 八驃騎 s_6 = 陳達,楊春,周通 —————— 小彪將 s_7 = 朱武 ———————————————— 一同參贊軍務頭領 s_8 = 李忠,施恩———————————— 步軍將校一十七員 ...... t_1 = 0 t_2 = 0 t_3 = 張青&孫二孃 —————————— 夫妻 t_4 = 0 t_5 = 0 t_6 = 0 t_7 = 武松&施恩, 魯智深&史進, 史進&朱武&陳達&楊春, 武松&張青&孫二孃, 楊志&魯智深&曹正 ———— 共生死 t_8 = 魯智深&李忠&周通 ———— 共尷尬 t_9 = 張青&孫二孃&施恩&曹正(河南),楊志&楊春(山西),周通&武松(山東),朱武&李忠(定遠縣) ———— 老鄉 t_10 = 武松&施恩, 魯智深&史進, 史進&朱武&陳達&楊春, 武松&張青&孫二孃, 周通&李忠 ———— 老兄弟 t_11 = 0 t_12 = 魯智深&楊志&史進 (都有延安府相關履歷) t_13 = ...... 這裡如果按照影響力計算,則 s_1 ~ s_7,t_3,t_7 的權重都相當大。 由此可見三山幫的勢函式有多大,有猛人,有幫閒,有主將,有副將,有馬軍,有步兵,甚至還有軍師。他們彼此之間關係則是盤根錯節。 其在梁山內部絕對是第二大勢力。 ``` ## 0x04 條件隨機場 (conditional random field,CRF) ### 1. 條件隨機場 當隨機變數之間有依賴關係的時候就是條件隨機場。比如: ```java 三山派的好漢不能和宋江嫡系挨著坐。 ``` 條件隨機場接收一個輸入序列 (觀察序列)如 X = (x1 ,x2, ..., xn), 給出一個輸出目標序列( 隱藏狀態序列 ) Y = (y1 ,y2, ..., yn),這裡使用大寫 X,Y 表示序列。 一般地,輸入序列 X 被稱為 **observations (觀測值)** , 輸出序列 Y 叫作 **states (隱藏狀態)**。Random 指的是隨機變數 X and Y。 Conditional 指的是條件概率 Conditional probability。 HMM、MEMM屬於有向圖模型,貝葉斯網路一般屬於有向圖。**而CRF屬於馬爾科夫網路屬於無向圖**。 CRF是馬爾科夫隨機場的特例,條件隨機場沒有隱馬爾可夫模型那樣嚴格的獨立性假設條件,因而可以容納任意的上下文資訊,可以靈活地設計特徵。同時,條件隨機場具有表達長距離依賴性和交疊性特徵的能力,而且所有特徵可以進行全域性歸一化,能夠求得全域性的最優解,還克服了最大熵馬爾可夫模型標記偏置的缺點。 ### 2. 數學定義 條件隨機場準確的數學語言描述是:設X與Y是隨機變數,P(Y|X)是給定X時Y的條件概率分佈,若隨機變數Y構成的是一個馬爾科夫隨機場,則稱條件概率分佈P(Y|X)是條件隨機場。 條件隨機場是在給定需要標記的觀察序列 X 的條件下計算整個標記序列 Y 的聯合概率分佈,而不是在給定當前狀態條件下定義下一個狀態的分佈。 $$ P(Y|X) = \frac{exp (w.φ(x,y))}{Z_x} $$ 注意Z(x)是遍歷所有 y 的全域性歸一化,如果Z(x)寫在乘積符號裡面的則就是local歸一化,那樣得到的是MEMM。 CRF本質上就是一個softmax,只是它不是在單樣本上面做的,而是序列化樣本;為了保證是整個序列做的分類,在CRF中考慮了相鄰狀態之間的轉換特徵函式。 CRF損失函式由兩部分組成,真實路徑的分數 和 所有路徑的總分數。真實路徑的分數應該是所有路徑中分數最高的。 ### 3. linear-CRF 在CRF的定義中,我們並沒有要求X和Y有相同的結構。而實現中,我們一般都假設X和Y有相同的結構,即: $$