用CRF作命名實體識別(一)

用CRF作命名實體識別(二)
用CRF作命名實體識別(三)
用BILSTM-CRF作命名實體識別html

博客園的markdown格式可能不太方便看,也歡迎你們去個人簡書裏看markdown

摘要

本文主要講述了關於人民日報標註語料的預處理,利用CRF++工具包對模型進行訓練以及測試工具

目錄

  • 明確咱們的標註任務
  • 語料和工具
  • 數據預處理
    1.數聽說明
    2.數據預處理
  • 模型訓練及測試
    1.流程
    2.標註集
    3.特徵模板
    4.CRF++包的使用說明
  • 總結與展望

正文

1.明確咱們的標註任務

這篇文章主要是介紹用CRF模型去提取人民日報語料的時間、人物、地點及組織機構名,也就是提取TIME、PERSON、LOCATION、ORGANIZATION四種實體。訓練咱們直接使用CRF++工具包。學習

2.語料和工具

人民日報1998中文標註語料庫
CRF++安裝包測試

3.數據預處理

3.1 數聽說明

首先打開下載的人民日報標註語料的文件,要轉爲utf-8格式。咱們須要提取的實體是時間、人名、地名、組織機構名,根據語料庫的詞性標記說明,對應的詞性分別爲/t、/nr、/ns、/nt。code

3.2 數據預處理

語料庫裏的姓名標註是將姓和名分開標註的,所以須要合併姓名htm

合併姓名前:
'19980101-01-001-002/m中共中央/nt總書記/n、/w國家/n主席/n江/nr某某/nr'
合併姓名後:
'19980101-01-001-002/m中共中央/nt總書記/n、/w國家/n主席/n江某某/nr'

須要將中括號裏的內容合併blog

合併中括號前:
'[中國/ns  政府/n]nt  順利/ad  恢復/v  對/p  香港/ns  行使/v  主權/n  ,/w '
合併中括號後:
'中國政府nt順利/ad恢復/v對/p香港/ns行使/v主權/n,/w'

時間合併utf-8

合併時間前:
'1999年/t  12月/t  澳門/ns  的/u  迴歸/vn  必定/d  可以/v  順利/ad  實現/v  。/w'
合併時間後:
'1999年12月/t澳門/ns的/u迴歸/vn必定/d可以/v順利/ad實現/v。/w'

全角字符統一轉爲半角字符
人民日報語料有些地方不是兩個空格的,例如11042行 '副教授/n 嘆/Vg 道/v ,/w 成/v', 中的「嘆/Vg」 和「道/v」之間是單空格,須要變成雙空格。不然代碼運行會報錯get


4.模型訓練及測試

4.1流程

流程圖

4.2 標註集

用的是BMEWO作標註體系
B表明實體的首部,M表明實體的中部,E表明實體的尾部,W表明單個的實體,O表明非實體

新   O
世   O
紀   O
—   O
—   O
一   B_TIME
九   M_TIME
九   M_TIME
八   M_TIME
年   E_TIME
新   B_TIME
年   E_TIME
講   O
話   O
(   O
附   O
圖   O
片   O
1   O
張   O
)   O

中   B_ORGANIZATION
共   M_ORGANIZATION
中   M_ORGANIZATION
央   E_ORGANIZATION
總   O
書   O
記   O

CRF++訓練的數據格式如上圖所示

4.3 特徵模板

特徵模板template以下

# 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

4.4 CRF++包的使用說明

下載工具包以後,打開文件夾

下載後的文件夾

1.在此處新建一個文件夾chinese

2.咱們複製crf_learn.exe,crf_test.exe和libcrfpp.dll這三個文件到咱們新建的chinese文件夾裏面,而後再把以前生成的CRF++數據格式的數據文件train.data放到chinese裏面,再把咱們本身定義的特徵模板文件放到chinese文件夾裏面(一共五個文件)

3.在chinese裏面打開cmd

敲入如下代碼,這即是開始訓練模型

crf_learn -a MIRA template train.data model

template就是咱們上面定義的特徵模板

訓練好以後會產生一個model文件

4.本身寫幾個測試文本,並將其轉爲CRF++的數據格式,注意標籤要所有同樣,以下圖所示

揚   B
帆   B
遠   B
東   B
作   B
與   B
中   B
國   B
合   B
做   B
的   B
先   B
行   B

希   B
臘   B
的   B
經   B
濟   B
結   B
構   B
較   B
特   B
殊   B
。   B

一樣把這個測試數據的文件test.data放到chinese文件夾裏面


5.在chinese裏面打開cmd

敲入如下代碼,這即是開始模型預測

crf_test -m model test.data >> output.txt

打開output.txt文件你就會看到預測的結果

揚   B   O
帆   B   O
遠   B   O
東   B   O
作   B   O
與   B   O
中   B   B_LOCATION
國   B   E_LOCATION
合   B   O
做   B   O
的   B   O
先   B   O
行   B   O

希   B   B_LOCATION
臘   B   E_LOCATION
的   B   O
經   B   O
濟   B   O
結   B   O
構   B   O
較   B   O
特   B   O
殊   B   O
。   B   O

5.總結與展望

如今僅僅只是粗暴的把這個流程實現了一遍,測試的效果並非很好,有部分的人名沒有識別出來,還須要再添加特徵,以及更改template特徵模板,這些還在學習。CRF的原理也不是很懂,也須要去完整的學習一下。後續還會更新

歡迎掃碼關注

相關文章
相關標籤/搜索