命名實體識別的後處理 百家姓輔助字典

2021-10-23 12:33:48 字數 1694 閱讀 2793

使用深度學習模型去做命名實體識別任務時,可能會出現效果不好等現象,此時可以使用一些規則對**模型進行後處理,從而提高模型的表現。比如在姓名實體識別過程中可以加入百家姓字典輔助。

stop_name字典可以自己整乙個,每行是乙個姓氏

import codecs  

import sys

def stop_words

(path)

:with

open

(path,

'r',encoding=

'utf-8'

,errors=

'ignore'

)as f:

return

[l.strip()

for l in f]

def stop_name

(input_file,output_file)

: input_data = codecs.

open

(input_file,

'r',

'utf-8'

) output_data = codecs.

open

(output_file,

'w+'

,'utf-8'

) ss =

sub =

#按行讀取**

for line in input_data.

readlines()

: word_list = line.

strip()

.split()

iflen

(word_list)==0

: pass

else

: word = word_list[0]

true_lab = word_list[1]

pred_lab = word_list[2]

sub.

(word)

sub.

(true_lab)

sub.

(pred_lab)

ss.(sub)

sub =

#使用規則過濾

for i in

range

(len

(ss)):

if ss[i][2

]=='b-per' and ss[i][0

] not in

stop_words

('stop_name.txt'):

ss[i][2

]='o'if ss[i][2

]=='i-per' and ss[i-1]

[2]==

'o':

ss[i][2

]='o' #寫入文件

for word in ss:

name =

' '.

join

(word)

output_data.

write

(name+

'\n'

) input_data.

close()

output_data.

close

()

效果如下

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

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

命名實體識別

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

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

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