什麼是crf

什麼是crf

利用crf++進行實體識別的流程

  1. 肯定標籤體系;
  2. 肯定特徵模板文件;
  3. 處理訓練數據文件;
  4. 模型訓練。

肯定標籤體系

 

大部分狀況下,標籤體系越複雜準確度也越高,但相應的訓練時間也會增長。所以須要根據實際狀況選擇合適的標籤體系。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

  1. 同一實體內不一樣字間的類型不一樣,則以字類數較多者爲
  2. 實體開頭的字一定爲B-???格式
  3. 實體的開始和結尾都有特定的特徵能夠遵循(如停用詞、動詞等做爲分界等)
  4. 固定實體後跟實體應爲B-???格式(如省名後)
  5. 5. 實體間間隔較小時可能合併爲同一實體

結合分詞及詞性標註進行改進

看來單從字的角度着眼已然不夠,因而試圖利用分詞和詞性標註信息。利用工具對文本進行分詞標註,每一行的token仍然是以單字爲特徵,中間加入詞性的信息以下圖所示。針對這樣的信息構建新的模板,利用中間一列的信息,能夠提升準確率。設計

大神實驗結果對照表

crf++的使用方法

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++進行實體識別的一些思路,要真正理解還須要多去實踐。

References

統計學習方法.李航

CRF++的簡單使用 - Felomeng的技術博客 - CSDN博客

條件隨機場(CRF)識別命名實體 - Felomeng的技術博客 - CSDN博客

達觀數據如何打造一箇中文NER系統 - 知乎專欄

CRF++模型格式說明-碼農場

相關文章
相關標籤/搜索