使用深度學習模型去做命名實體識別任務時,可能會出現效果不好等現象,此時可以使用一些規則對**模型進行後處理,從而提高模型的表現。比如在姓名實體識別過程中可以加入百家姓字典輔助。
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 中文命名實體沒有類似英文明確的...