不同命名實體識別模型效果對比

2021-10-24 08:03:50 字數 3537 閱讀 6142

本篇用乙個demo,對比各個ner模型的效果。

本demo只識別公司實體(company)和職位實體(company),篩選含有公司和職位的資料,作為訓練和驗證資料。

訓練資料:4089條。 驗證資料:546條。

本demo無單個字的實體情況,採用bio標籤體系,本demo共有5個標籤,o,b-com,i-com,b-pos和i-pos。

b-com和i-com表示公司實體標籤,b-pos和i-pos表示職位實體標籤。

字向量模型:我們自己訓練的模型,採用中文維基百科資料作為訓練語料。

採用召回率、精準率和f1-score來評價模型好壞。

需要注意的是,這裡統計recall和precision的時候,物件是命名實體,而不是單個標籤。比如:

每個模型都盡我最大努力,調到最優了。

1、一層bilstm + crf:

模型引數:batch_size: 64, epoch: 200, loss: adam, rate: 0.01, num_unit: 256, dropout: 0.1

驗證結果:

(1)公司類實體:

召回率:0.73,精準率:0.76,f1:0.74

(2)職位類實體:

召回率:0.75,精準率:0.82,f1:0.78

2、兩層bilstm + crf:

模型引數:batch_size: 64, epoch: 200, loss: adam, rate: 0.01, num_unit: 220, dropout: 0.0

驗證結果:

(1)公司類實體:

召回率:0.70,精準率:0.72,f1:0.71

(2)職位類實體:

召回率:0.73,精準率:0.79,f1:0.76

3、三層bilstm + crf:

模型引數:batch_size: 128, epoch: 200, loss: adam, rate: 0.01, num_unit: 200, dropout: 0.1

驗證結果:

(1)公司類實體:

召回率:0.69,精準率:0.74,f1:0.71

(2)職位類實體:

召回率:0.71,精準率:0.76,f1:0.74

4、四層bilstm + crf:

模型引數:batch_size: 128, epoch: 200, loss: adam, rate: 0.01, num_unit: 150, dropout: 0.0

驗證結果:

(1)公司類實體:

召回率:0.68,精準率:0.73,f1:0.70

(2)職位類實體:

召回率:0.73,精準率:0.80,f1:0.76

5、attention + bilstm + crf:

模型引數:batch_size: 64, epoch: 200, loss: adam, rate: 0.01, num_unit: 200, dropout: 0.1

驗證結果:

(1)公司類實體:

召回率:0.70,精準率:0.73,f1:0.72

(2)職位類實體:

召回率:0.75,精準率:0.81,f1:0.78

6、w2v + 一層bilstm + crf:

模型引數:batch_size: 64, epoch: 200, loss: adam, rate: 0.01, num_unit: 200, dropout: 0.1

驗證結果:

(1)公司類實體:

召回率:0.74,精準率:0.78,f1:0.76

(2)職位類實體:

召回率:0.78,精準率:0.84,f1:0.81

7、w2v + 兩層bilstm + crf:

模型引數:batch_size: 64, epoch: 200, loss: adam, rate: 0.01, num_unit: 200, dropout: 0.1

驗證結果:

(1)公司類實體:

召回率:0.74,精準率:0.76,f1:0.75

(2)職位類實體:

召回率:0.79,精準率:0.81,f1:0.80

8、w2v + attention + bilstm + crf:

模型引數:batch_size: 64, epoch: 200, loss: adam, rate: 0.01, num_unit: 200, dropout: 0.1

驗證結果:

(1)公司類實體:

召回率:0.73,精準率:0.78,f1:0.76

(2)職位類實體:

召回率:0.74,精準率:0.82,f1:0.78

9、bert + crf:

模型引數:batch_size: 32, epoch: 500, loss: sgd, rate: 0.01, max_len: 64, encoder_layer: 11

驗證結果:

(1)公司類實體:

召回率:0.66,精準率:0.72,f1:0.69

(2)職位類實體:

召回率:0.72,精準率:0.78,f1:0.75

10、bert + bilstm + crf:

模型引數:batch_size: 32, epoch: 500, loss: sgd, rate: 0.01, max_len: 64, encoder_layer: 11, num_units: 128, dropout: 0.1

驗證結果:

(1)公司類實體:

召回率:0.74,精準率:0.78,f1:0.76

(2)職位類實體:

召回率:0.78,精準率:0.84,f1:0.81

(1)與一層bilstm相比,多層的bilstm或者增加attention層,並沒有帶來效果上的提公升,而且訓練的速度還會變慢。一層bilstm+crf完全可以調出乙個不錯的結果。應該作為首選模型。

(2)本demo中,w2v + bilstm + crf和bert + bilstm + crf的效果略好於bilstm+crf。

(3)結合前兩點,ner模型的調優應該放在embedding層中。至於原因嗎,本人也只是猜測,bilstm層用來捕捉底層特徵,然後crf層做統計算概率。底層特徵越豐富,區分度越好,bilstm捕捉的特徵效果就會越好。底層特徵不好,加再多層bilstm或者attention,也是事倍功半。

(4)本人在實際專案中,用bert做ner,很多時候效果並不理想,而且經常會遇到不收斂的情況,不要痴迷於bert。

(5)ner模型的效果很多時候是達不到工業標準的,不要迷信那些**或者比賽,動不動就90%以上的準確率。在實際專案中,會有非常多的長尾問題,必須要結合領域詞典。

以上demo僅供參考

git:

ai命名實體識別模型 不同命名實體識別模型效果對比

本篇用乙個demo,對比各個ner模型的效果。本demo只識別公司實體 company 和職位實體 company 篩選含有公司和職位的資料,作為訓練和驗證資料。訓練資料 4089條。驗證資料 546條。本demo無單個字的實體情況,採用bio標籤體系,本demo共有5個標籤,o,b com,i c...

ai命名實體識別模型 命名實體識別

crf中有兩類特徵函式,分別是狀態特徵和轉移特徵,狀態特徵用當前節點 某個輸出位置可能的狀態中的某個狀態稱為乙個節點 的狀態分數表示,轉移特徵用上乙個節點到當前節點的轉移分數表示。其損失函式定義如下 crf損失函式的計算,需要用到真實路徑分數 包括狀態分數和轉移分數 其他所有可能的路徑的分數 包括狀...

命名實體識別

簡單的分詞器 如二元分詞器 無法識別oov,所以需要運用一些規定的規則來輔助識別 如 在識別音譯人名時,可以設定規則 一旦發現某詞是人名,而該詞後面跟隨人名詞時,將他們合併 針對不同情況,需要設計相應的標註集 拿人名識別舉例 輸入資料集進行訓練後,會將人名拆分為碎片,模擬人名的錯誤切分.接著,檢查拆...