本篇文章假設你已有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得分(這裡應該也可以利用維特比演算法),然後取:
做為**結果輸出。
原文:
BiLSTM CRF在命名實體識別中作用
lstm作用 lstm又叫長短時記憶網路,用來記憶文章的上文關係。crf作用 通過前面出現的幾個詞 下乙個可能出現的詞。bilstm crf作用 先說一下lstm,lstm模型神經元資訊只能從前向後傳遞,也就意味著,當前時刻的輸入資訊僅能利用之前時刻的資訊。然而對於序列標註任務來說,當前狀態之前的狀...
ai命名實體識別模型 命名實體識別
crf中有兩類特徵函式,分別是狀態特徵和轉移特徵,狀態特徵用當前節點 某個輸出位置可能的狀態中的某個狀態稱為乙個節點 的狀態分數表示,轉移特徵用上乙個節點到當前節點的轉移分數表示。其損失函式定義如下 crf損失函式的計算,需要用到真實路徑分數 包括狀態分數和轉移分數 其他所有可能的路徑的分數 包括狀...
命名實體識別
簡單的分詞器 如二元分詞器 無法識別oov,所以需要運用一些規定的規則來輔助識別 如 在識別音譯人名時,可以設定規則 一旦發現某詞是人名,而該詞後面跟隨人名詞時,將他們合併 針對不同情況,需要設計相應的標註集 拿人名識別舉例 輸入資料集進行訓練後,會將人名拆分為碎片,模擬人名的錯誤切分.接著,檢查拆...