本文選用crf++工具包在windows上實作中文實體識别。任務是提取時間、人物、地點及組織機構名。
檔案下載下傳:
工具包下載下傳:
官網:http://chasen.org/~taku/software/CRF++/#features
百度網盤:https://pan.baidu.com/s/1apZx8wd3xXGgMs_WUQeuSg
提取碼:o7fh
語料檔案下載下傳
百度網盤:https://pan.baidu.com/s/1w-f_FJt3cZUWGenQzUPE3g
提取碼:7dru
語料檔案是人民日報1998中文标注語料庫,工具包是crf+±0.58。
資料處理
-
資料編碼格式
原始資料檔案編碼格式是gbk,需要将編碼格式改為utf-8
-
tags對應關系
/t 表示時間
/nr表示人名
/ns表示地名
/nt表示組織機構名
- 名字中的姓和名進行合并,如 江/nr 某某/nr 合并為 江某某/nr。
- 需要将語料轉換為對應的标注,并将形如[華北/ns 電管局/n]nt進行合并,合并為華北電管局/nt
- 對時間進行合并,如12月/t 31日/t 合并為 12月31日/t
- 對特殊字元進行轉換,對文中的全角字元轉為半角字元。
- 特殊位置處理 ,對帶有/的詞處理,對未标注的詞進行處理
- 用的是BMEWO做标注體系
以上處理流程在代碼中均有顯示。
代碼位址:
百度網盤:https://pan.baidu.com/s/1c6rYRZK7Q1C2iNUyoK7FHQ
提取碼:2195
配置檔案
配置temple檔案,内容如下:
# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-2,0]/%x[-1,0]/%x[0,0]
U06:%x[-1,0]/%x[0,0]/%x[1,0]
U07:%x[0,0]/%x[1,0]/%x[2,0]
U08:%x[-1,0]/%x[0,0]
U09:%x[0,0]/%x[1,0]
# Bigram
B
模型訓練
在解壓的工具下,建立檔案夾test,将crf_test.exe、crf_learn.exe、libcrfpp.dll同時拷貝到test下,将temple檔案、train.data檔案拷貝到test檔案下,打開cmd檔案,進入test檔案夾,執行下列指令:
crf_learn -p 8 template train.data model
- -f, –freq=INT使用屬性的出現次數不少于INT(預設為1)
- -p, –thread=INT線程數(預設1),利用多個CPU減少訓練時間
訓練過程如下:
- ter:疊代次數 terr:标記錯誤率
- serr:句字錯誤率
- obj:目前對象的值。當這個值收斂到一個确定值的時候,訓練完成
- diff:與上一個對象值之間的相對差
訓練完成如圖:
測試
執行下列指令:
crf_test -m model test.data > test.txt
檢視test.txt檔案即可,為最終的生成辨別。這篇文章主要帶大家簡單粗暴實作流程,真正的優化過程見後續内容。