1、背景
有了強大的log-linear模型,連水槽都能拿來做分類特征了,當然要想辦法用一下試試了。log-linear模型的輸入是一系列幾乎接近自然語言的特征方程,這種抽象的東西拿來做語義識別自然是再好不過了。語義識別有一個重要的步驟,叫做 ”給句子貼標簽“,簡而言之,就是給定一個句子,通過識別其中一些特征:比如存在人名,地名,日期,商品名稱,從而判斷這個句子的屬性(做交易,下任務,更改設置等。) 能夠准確的識別句子中的這些 tag 可以有助於理解一個句子。但是要怎樣來確定某個單詞是不是地名或者人名呢?光靠首字母是否大小寫或者和對應的庫去匹配顯然是不夠好的。
為了更好的完成任務,引入上下文成了一個有意義的手段。對自然語言或者大部分信號而言,在某信號之前的上個信號有着重要的意義(比如我使用了重要的,那么下個詞多半是名詞)。所以構建了以相鄰信號作為特征方程的模型,成為條件隨機場。
普通的log-linear模型長這樣:
如果把上下文考慮進特征方程,那么它的特征方程大概長這樣:
(x-) 代表整個句子,(y-)代表標簽序列。一個n個詞(x的長度)的句子顯然有m個標簽(tag的容量)。因為句子的長度一般都不同,但“標簽”的集合卻可以是相同的(詞性總歸就那么幾個),所以,我們需要恆定數目的特征方程(一般情況下特征方程的數目是m*n).
故考慮設計了上述形式的子特征方程,以 y_i-1 (這表示某標簽序列的第i-1個標簽)以及第i個標簽形成的子特征方程遍歷整個句子。最后將子特征方程遍歷的結果求和,作為總特征方程的返回值。子特征方程可以是以下形式(如果符合則返回1,否則返回0)
f1.前面為名詞,則后面一個詞開頭為M
f2.前面為副詞,則后面一個詞是形容詞
f3.前面為形容詞,則后面一個詞以y結尾
...
顯然對於一般情況下的句子而言,上述子特征方程求和后會給 F_j 一個比較大的值(因為符合語法規則)。注意每個 f_ 里都只能有兩個詞性。當我們有很多這樣的規則時,正確的規則(名次后面接動詞)會被訓練成較高的權重,而錯誤的規則則會被賦予較低的權重,最后得到的詞性序列會有較高的正確性。
2、CRF 模型的數學分析
拿到CRF模型后,我們要想辦法能夠通過訓練得到 一組合適的參數w_j,以實現分類器的構造。但是在拿到參數之前,還是需要做些准備工作,比如:獲得各階導數的表達式。ok,由於我們引入了 子特征方程 f_ 並且 F_與f_ 存在求和關系,所以這里的算法會比較復雜。
整體的表達式長這樣:
如果把 f_j 帶入,表達式長這樣:
(外圍部分被忽略了)
最終目標也就變成了:
這里做了一個乘法結合律,把wj和fj放在了一起,總結成了一個g函數。是不是 “一個” g函數呢?這倒是不一定。。。。。。。
對於任意一個 i ,gi 都是不同的方程。和 gi 有關的參數是兩個,這兩個參數都是tag。那么假設 tag的集合里有m個元素,則gi的總個數是 m^2(所有的tag組合都要遍歷)。也就是說,對長度為n的一個句子,都要算 n*m^2 次(此處可能有誤)。。。。
計算次數這么多顯然有點問題。故考慮設計一種遞歸的算法,來減小計算的規模。這里不詳細講述。
3.模型迭代所使用的梯度
要對 log-linear 模型進行標定,當然是要想辦法使模型參數最符合訓練集合了。最符合訓練集合的意思就是要想辦法使得在某組參數下,訓練集發生的概率達到最大。不妨對概率取對數,使得式子線性化。
ok,到此為止,已經求出了各個參數導數的表達形式,F_j(x,y)是很容易求的,對任意訓練集這都是已知的。而后面的E求起來卻比較麻煩,它需要把所有可行的標簽帶入Fj中,並且乘以p(這里p也好求,給定wj,p就是已知的)但是這樣子梯度的計算量就非常大。相當於每一次迭代都需要對 標簽集 進行遍歷,計算量很大,不過機智的計算機科學家設計了算法通過預測p的分布,來描述E。具體的算法不再贅述,總之,條件隨機場模型是一種可考慮多因素,對物體進行多標簽分類的模型。其訓練過程需要有監督學習,對機器人視覺來說,有監督學習並不是一件簡單的事情。物體的外形也很難和物體的標簽聯系起來(圓的是杯子還是茶葉罐?)所以條件隨機場對計算機視覺會更有效,基於紋理顏色形狀等信息的二維圖像更適合去探究其意義。