命名實體識別 BiLSTM——CRF


本篇文章假設你已有lstm和crf的基礎。

BiLSTM+softmax
lstm也可以做序列標注問題。如下圖所示:

 


雙向lstm后接一個softmax層,輸出各個label的概率。那為何還要加一個crf層呢?
我的理解是softmax層的輸出是相互獨立的,即雖然BiLSTM學習到了上下文的信息,但是輸出相互之間並沒有影響,它只是在每一步挑選一個最大概率值的label輸出。這樣就會導致如B-person后再接一個B-person的問題。而crf中有轉移特征,即它會考慮輸出label之間的順序性,所以考慮用crf去做BiLSTM的輸出層。

BiLSTM+crf的基本思想
BiLSTM+crf的結構如圖所示:

 


對於每一個輸入我們得到一個預測label序列定義這個預測的得分為:
其中Pi,yi為第i個位置softmax輸出為yi的概率,Ayi,yi+1為從yi到yi+1的轉移概率,當tag(B-person,B-location。。。。)個數為n的時候,轉移概率矩陣為(n+2)*(n+2),因為額外增加了一個開始位置和結束位置。這個得分函數S就很好地彌補了傳統BiLSTM的不足,因為我們當一個預測序列得分很高時,並不是各個位置都是softmax輸出最大概率值對應的label,還要考慮前面轉移概率相加最大,即還要符合輸出規則(B后面不能再跟B),比如假設BiLSTM輸出的最有可能序列為BBIBIOOO,那么因為我們的轉移概率矩陣中B->B的概率很小甚至為負,那么根據s得分,這種序列不會得到最高的分數,即就不是我們想要的序列。

BiLSTM+crf的訓練
訓練思想很巧妙。
首先我們需要訓練的參數為:
1.BiLSTM中的參數
2.轉移概率矩陣A
對於每個訓練樣本X,求出所有可能的標注序列y的得分S(X,y)(注意這里應該不用遍歷所有可能的y,維特比算法應該用得上),對所有得分進行歸一化:

這里分子上的y是正確標注序列(因為我們是一個有監督學習)
下面引出損失函數(雖然我感覺這不應該稱為“損失”),對真實標記序列y的概率取log:

那么我們的目標就是最大化上式(即真實標記應該對應最大概率值),因為叫損失函數,所以我們也可以對上式取負然后最小化之,這樣我們就可以使用梯度下降等優化方法來求解參數。在這個過程中,我們要最大化真實標記序列的概率,也就訓練了轉移概率矩陣A和BiLSTM中的參數。

BiLSTM+crf的預測
當模型訓練完畢后,就可以去測試了。
預測的時候,根據訓練好的參數求出所有可能的y序列對應的s得分(這里應該也可以利用維特比算法),然后取:
做為預測結果輸出。

原文:https://blog.csdn.net/bobobe/article/details/80489303


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM