1. 程式人生 > >論文閱讀筆記:《Contextual String Embeddings for Sequence Labeling》

論文閱讀筆記:《Contextual String Embeddings for Sequence Labeling》

文章引起我關注的主要原因是在CoNLL03 NER的F1值超過BERT達到了93.09左右,名副其實的state-of-art。考慮到BERT訓練的資料量和引數量都極大,而該文方法只用一個GPU訓了一週,就達到了state-of-art效果,值得花時間看看。

一句話總結:使用BiLSTM模型,用動態embedding取代靜態embedding,character-level的模型輸出word-level的embedding. 每個詞的embedding和具體任務中詞所在的整句sequence都有關,算是解決了固定embedding在一詞多義方面的短板,綜合了上下文資訊。

文章重點內容記錄:

目前三種主流embedding:

A. 經典embedding

B. character-level 基於特定任務的embedding,不需要預訓練,與任務的訓練過程同步完成

C. 基於上下文的,由深度LSTM各層hidden state的線性組合而成的embedding

 

本文模型特點:

A. 模型以character為原子單位,在網路中,每個character都有一個對應的hidden state. -- 這個特點對需要多一步分詞的中文來說可能有避免分詞錯誤導致下游function繼續錯誤的弊端。

B. 輸出以word為單位的embedding, 這個embbeding由前向LSTM中,該詞最後一個字母的hidden state 和反向LSTM中該詞第一個字母的hidden state拼接組成,這樣就能夠兼顧上下文資訊。具體說明見下圖:

 

實驗結果:

表格中PROPOSED表示文中提出的embedding, word代表經典預訓練embedding, char表示任務相關的embedding,可以看出本文的動態embedding + 經典預訓練embedding的組合最有效,char-embedding加不加基本沒有影響。

模型訓練相關引數:

語料庫:英文 - 10億詞語料庫  德文-5億詞語料庫

訓練過程: 1個GPU跑了一週

 

時間效能:

10個單詞左右句子產生embedding需要10ms左右,20個單詞句子基本就漲到20ms,對生產環境來說勉強可以接受。

 

正在嘗試訓一版中文動態embedding, 稍晚會補充結果。

 

如果有理解不到位的地方,歡迎指正。

原創文章,轉載請註明出處。