當前位置:
首頁 > 最新 > 雙向循環神經網路+條件隨機場進行分詞

雙向循環神經網路+條件隨機場進行分詞

前言

目前 NLP 領域的很多任務基本都會朝深度學習、注意力模型、半監督等方向發展,而且確實也取得了更好的效果,而有些也會把深度學習和傳統機器學習結合起來,都能有不錯的性能提升。這裡講一個用深度學習和機器學習結合來做分詞。

關於分詞

分詞就是將一句話按照最合理的單詞分開,英語一般就沒有這個麻煩,因為英語詞語都是空格隔開的,而中文就需要做額外處理。分詞任務一般是nlp其他任務的基礎,分詞分得好不好將直接對後面的其他任務產生很大的影響。

傳統做法

在此之前,先了解分詞的一般做法:

基於詞典正向最大匹配法,很簡單的從左往右的規則匹配,類似的還有逆向最大匹配法。

基於詞典最小切分法,通用是規則匹配,它使句子儘可能少單詞數量。

基於n元文法的分詞法,主要是通過大量語料統計單詞或字的轉換概率,並通過動態歸劃的演算法算出最後最優的分詞序列。

隱馬爾科夫模型分詞法,主要通過大量語料的觀測序列和狀態學習到參數,然後對觀測序列進行隱含狀態推測,也是需要解碼的過程,解碼完成及分詞完成。

條件隨機場分詞法,通過大量語料學習到參數,這裡需要設計很多特徵函數和轉移函數,條件隨機場分詞準確率很高,它比隱馬爾可夫的精度高很多,因為條件隨機場考慮了上下文。

關於LSTM

關於CRF

CRF是一種概率無向圖模型,也是處理序列的小能手,具體可以看前面的文章《機器學習之條件隨機場(CRF)》。

LSTM+CRF

LSTM 和 CRF 我們都了解了,單獨使用它們都挺好理解,但如何將它們結合起來是我們更關注的。

其實如果沒有 CRF 參與其實也是可以完成任務的,我們說單向 LSTM 網路因為沒考慮上下文,所以引入了雙向 LSTM 網路,此時每個詞經過詞嵌入層再進入前向和後向循環神經網路,這時輸出能得到標籤的概率。如下圖,

這裡寫圖片描述

在沒有 CRF 參與的時候可能會存在一個小缺陷,它沒辦法約束標籤的特徵,比如某標籤到另外一標籤的轉換概率。如果有標籤的特徵就能進一步提高學習能力。

這裡寫圖片描述

所以最終的網路結構圖如下,第一層為詞嵌入層,第二層為雙向循環神經網路層,正向網路的輸出和反向網路的輸出分別作為輸入輸到一個隱含層,最後再輸入到 CRF 層。

這裡寫圖片描述

分詞標籤

我們可以設定狀態值集合S為(B, M, E,S),分別代表每個狀態代表的是該字在詞語中的位置,B代表該字是詞語中的起始字,M代表是詞語中的中間字,E代表是詞語中的結束字,S則代表是單字成詞。

核心代碼

https://github.com/sea-boat/nlp_lab/tree/master/bilstm_crf_seg


處理字元首先就是需要創建包含語料中所有的詞的辭彙,需要一個從字元到辭彙位置索引的詞典,也需要一個從位置索引到字元的詞典。


第一次創建辭彙後我們需要將它保存下來,後面在使用模型預測時需要讀取該辭彙,如果不保存而每次都創建的話則可能導致辭彙順序不同。


創建需要的佔位符,分別為輸入佔位符、標籤佔位符、序列長度佔位符、dropout佔位符和學習率佔位符。

創建嵌入層,

創建向前 LSTM 網路和向後 LSTM 網路,

將兩個方向的網路輸出連接起來並輸入到一個隱含層,得到預測結果,

最後再添加一個 crf 層,

定義損失函數,

使用 adam 優化器來優化。

--------------------------------------

跟我交流,向我提問:


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 遠洋號 的精彩文章:

雙向循環神經網路及TensorFlow實現

TAG:遠洋號 |