大部分狀況下,標籤體系越複雜準確度也越高,但相應的訓練時間也會增長。所以須要根據實際狀況選擇合適的標籤體系。html
特徵模版是一個文本文件,其內容以下所示,其中每行表示一個特徵。以下模板使用了unigram特徵,而且僅以字符自己做爲特徵而不考慮其餘特徵。除當前字符外,還使用了其先後3個字,以及上下文的組合做爲特徵。CRF++會根據特徵模版生成相關的特徵函數。關於特徵模版的詳細解釋能夠查看官網文檔,而且對於特徵的選擇和設計能夠靈活配置。網絡
#Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U5:%x[-2,0]/%x[-1,0]
U6:%x[-1,0]/%x[0,0]
U7:%x[0,0]/%x[1,0]
U8:%x[1,0]/%x[2,0]
CRF模型的訓練數據是一行一個token,一句話由多行token組成,以下圖所示。函數
a) 訓練命令:crf_learn template_file train_file model工具
其中template_file是模板文件,train_file是訓練語料,都須要事先準備好;model是CRF++根據模板和訓練語料生成的文件,用於解碼。性能
b) 測試命令:crf_test -m model_file test_file > result_file學習
其中 model_file是剛纔生成的model文件,test_file是待測試語料,「>result_file」是重定向語句,指將屏幕輸出直接輸出到文件result_file中。測試
結合規則進行改進.net
看來單從字的角度着眼已然不夠,因而試圖利用分詞和詞性標註信息。利用工具對文本進行分詞標註,每一行的token仍然是以單字爲特徵,中間加入詞性的信息以下圖所示。針對這樣的信息構建新的模板,利用中間一列的信息,能夠提升準確率。設計
CRF++是著名的條件隨機場開源工具,也是目前綜合性能最佳的CRF工具。Windows版的無須安裝,直接解壓便可使用。3d
訓練語料至少應具備兩列,列間由空格或製表位間隔,且全部行(空行除外)必須具備相同的列數。句子間使用空行間隔。
如:
i. 有兩列特徵的
太 Sd N
短 Sa N
而 Bu N
已 Eu N
。 Sw N
以 Sp N
家 Bn N
鄉 En N
的 Su N
ii. 只有一列特徵的
太 N
短 N
而 N
已 N
。 N
以 N
家 N
鄉 N
的 N
a) 特徵選取的行是相對的,列是絕對的,通常選取相對行先後m行,選取n-1列(假設語料總共有n列),特徵表示方法爲:%x[行,列],行列的初始位置都爲0。例如:
i. 之前面語料爲例
「 Sw N
北 Bns B-LOC
京 Mns I-LOC
市 Ens I-LOC
首 Bn N
假設當前行爲「京」字這一行,那麼特徵能夠這樣選取:
隨着深度學習的興起,RNN、LSTM、BILSTM等模型已經被證實在NLP任務上有着良好的表現。相比傳統模型,RNN可以考慮長遠的上下文信息,而且可以解決CRF特徵選擇的問題,能夠將主要的精力花在網絡設計和參數調優上,但RNN通常須要較大的訓練數據,在小規模數據集上,CRF表現較好。在學術界,目前比較流行的作法是將BILISTM和CRF進行結合,借鑑兩個模型各自的優勢,來達到更好的效果。
本文只是大概介紹了crf++進行實體識別的一些思路,要真正理解還須要多去實踐。
統計學習方法.李航
CRF++的簡單使用 - Felomeng的技術博客 - CSDN博客