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

2021-10-14 04:26:50 字數 3437 閱讀 5448

本篇用乙個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命名實體識別模型 命名實體識別

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

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

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

命名實體 中文命名實體識別簡介

一切具有特定屬性集合的物體都可以稱為實體。一般包括三大類 實體類 時間類 數字類 七小類 人名 機構名 地名 時間 日期 貨幣和百分比 1 確定實體的邊界,即確定哪些詞屬於實體。2 確定實體的類別,即確定實體屬於人名或者機構名等。1 各類命名實體沒有嚴格的命名規範 2 中文命名實體沒有類似英文明確的...