从点到线:逻辑回归到条件随机场
開篇高能預警!本文前置知識:
1、理解特征函數(shù)/能量函數(shù)、配分函數(shù)的概念及其無向圖表示,見《邏輯回歸到受限玻爾茲曼機》和《解開玻爾茲曼機的封印》;
2、理解特征函數(shù)形式的邏輯回歸模型,見《邏輯回歸到最大熵模型》。
?
從邏輯回歸出發(fā),我們已經(jīng)經(jīng)過了樸素貝葉斯、淺層神經(jīng)網(wǎng)絡、最大熵等分類模型。顯然,分類模型是不考慮時間的,僅僅計算當前的一堆特征對應的類別。因此,分類模型是“點狀”的模型。
?
想一下,如果我們有一個詞性標注(POS)的任務,在這個任務中,類別有動詞、名詞、形容詞、副詞、介詞、連詞等有限個類別。樣本呢,當然就是自然語言序列啦,例如“夕小瑤喜歡 狗狗”這個序列就對應著“名詞 動詞 名詞”這三個對應類別。
?
這時我們如果用“點狀”模型,也就是分類模型來做這個任務,會產(chǎn)生什么現(xiàn)象呢?
假如我們選取的特征就是當前位置詞,那么我們將分類器訓練完成后,分類器遇到“夕小瑤”就會輸出“名詞”這個類別,也就是說它是不考慮上下文的,預測每個詞的詞性的時候才不會考慮整個句子的情況呢。在這里簡單例子中看似沒有什么影響,然而實際上非常多的詞在不同的句子中會表現(xiàn)出不同的詞性。比如“谷歌”一詞,在“我今天參觀了谷歌”中就是名詞,在“你谷歌一下”中就是動詞。可以看出,詞性不僅取決于它自己,還取決于它的上下文(它兩邊的詞)!
?
那么,有沒有可能讓邏輯回歸、樸素貝葉斯這類點狀模型利用好上下文信息呢?最容易想到的做法就是將上下文信息編碼成特征啦!
?
比如加入當前詞的2-gram上下文作為特征,這時在“你谷歌一下”中去預測“谷歌”的詞性的時候,特征就是三維的:1、“谷歌”2、“你 谷歌”3、“谷歌 一下”。而在“我今天參觀了谷歌”中,特征是1、“谷歌”2、“了 谷歌”3、“谷歌 <EOS>”這樣就能根據(jù)不同的特征值在不同的句子中更精確的分類“谷歌”的詞性啦~
在《邏輯回歸到最大熵模型》中,小夕詳細講了如何將邏輯回歸的傳統(tǒng)形式轉換成特征函數(shù)/能量函數(shù)描述的形式,而如《解開玻爾茲曼機的封印》所示,這種形式很容易畫成有向圖或無向圖的形式:
?
(上面白色圈圈是類別,下面灰色圈圈是各個特征,小黑框表示這一類別-特征對的能量函數(shù)/特征函數(shù))
?
問題來了。對于一些更復雜的句子,可能決定某個詞的詞性的關鍵詞距離該詞有好長的距離,那怎么辦呢?難道要擴展到10gram?
我們知道,ngram越長,訓練數(shù)據(jù)就越稀疏,導致模型容易過擬合,泛化能力明顯變差。顯然點狀的機器學習模型是很難在當前分類點利用到長距離信息的,也就是說,其最多能通過加入短距離上下文特征來做到局部最優(yōu)分類,而無法做到整個序列的最優(yōu)分類。
?
顯然吶,自然語言文本的詞性標注任務本來就是個“線狀”的任務,你非要用“點狀”的模型去做,肯定很差勁啦~那么我們能不能基于邏輯回歸這個經(jīng)典的判別式點狀分類器來改良成“線狀”,或者說“鏈狀”模型呢?如果讓你去改造,你會怎么改呢?
?
最簡單的做法當然就是將序列前一時刻/位置的輸出連到當前時刻到輸出阿,也就是同時用當前時刻的輸入和前一時刻的輸出來決定當前時刻的輸出(類別),畫出圖來就是:
?
(當然啦,這里白色圈圈依然代表類別,灰色圈圈代表特征。為了畫圖簡單,這里只畫出了一個灰色圈圈(三個特征的時候應該在每個時刻畫出三個灰色圈圈哦))
?
看,是不是超級簡單的就改完了呢?這樣在判斷每一時刻的類別的時候就會不得不去參考前一時刻的類別,而參考前一時刻的類別的時候就隱含的包含了更早時刻的類別,這樣就把整個句子串起來啦。
畫起來容易,但是這個模型該如何用數(shù)學語言描述呢?
?
回顧一下可以直接畫出上面邏輯回歸的無向圖的邏輯回歸假設函數(shù):
擴展到多個類別的話,就是:
?
?
從假設函數(shù)也可以看出,邏輯回歸是個點狀模型,當前時刻的類別預測不依賴任何其他時刻。
?
那么根據(jù)上面我們畫的判別式鏈狀模型圖,我們唯一需要做的就是加入前一時刻y與當前時刻y的特征函數(shù)就可以啦~所以假設函數(shù)就很簡單的變?yōu)榱?#xff1a;
?
?
只是看起來有點長而已,而本質上還不是用特征函數(shù)描述了我們畫的線狀圖嘛~
仔細觀察,可以發(fā)現(xiàn)相比較點狀模型,鏈狀模型考慮了全部時間點,對全部時間點下的每個舊y與當前y,以及每個當前x與當前y做了求和,進而通過配分函數(shù)Z算出了整個序列的條件概率!注意對比邏輯回歸的假設函數(shù),邏輯回歸的各個時間點是相互獨立的,而這個鏈狀模型則是統(tǒng)一考慮所有時間點,因此是基于整個序列去做每個單詞的詞性預測。
?
這個看似復雜,實則至簡的鏈狀模型就是“線性鏈條件隨機場(CRF)”。實際上,線性鏈的條件隨機場也是使用最廣泛的條件隨機場,幾乎成了條件隨機場的代名詞。
?
這個模型的訓練方法與隱馬爾可夫模型是一樣的,都是基于最大化似然函數(shù)的方法,方法已經(jīng)在《HMM(下)》中講解啦,在此不再贅述。當然啦,小夕只講了最理想的情況,也就是訓練集中既有X(觀測序列),也有Y(隱狀態(tài)序列)的情況。對于無法得到隱狀態(tài)序列的情況,可以使用《EM算法》來迭代訓練,在這里叫做BaumWelch算法,有興趣的同學自行了解,這里不再展開啦。
?
誒?還有一個問題!雖然CRF的假設函數(shù)可以直接得到當前序列的每種可能的詞性標注序列的概率,但是如果要枚舉出所有可能的詞性序列再找最大概率的那個詞性序列的話,顯然是指數(shù)爆炸的。對此有維特比算法進行優(yōu)化,也已在《HMM(下)》中詳細講解過啦。在此不再贅述。值得一提,維特比算法的本質即動態(tài)規(guī)劃。
?
看,是不是感覺一切都是一通百通了呢?這么看來條件隨機場真的是沒有新奇的東西,僅僅是用特征函數(shù)的老辦法來將人人都能想到的前后兩個時刻的y連起來,就結束了,結束了,束了,了。。
?
總結
以上是生活随笔為你收集整理的从点到线:逻辑回归到条件随机场的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度推荐系统2019年度阅读收藏清单
- 下一篇: 推荐一个可交互的 Attention 可