天天看點

自然語言處理的中文分詞方法1、CRF++Unigram2、CRFsuite3、結巴分詞4.哈工大ltp平台

中文分詞方法

平台:win7,python,vs2010

1、CRF++

CRF++是著名的條件随機場開源工具,也是目前綜合性能最佳的CRF工具。

一、工具包的下載下傳:

其中有兩種,一種是Linux下(帶源碼)的,一種是win32的,下載下傳

http://download.csdn.net/source/1425683将這兩種版本打成一個包了。

二、安裝:

a) Windows版的無須安裝,直接解壓即可使用;

b) Linux版本的安裝方法是:

1) 解壓到某目錄下

2) 打開控制台,将目前目錄切換到解壓目錄

3)依次輸入指令:

./configure

make

su

make install

注:需要root權限才能成功安裝。

三、訓練語料格式:

a) 訓練語料至少應具有兩列,列間由空格或制表位間隔,且所有行(空行除外)必須具有相同的列數。句子間使用空行間隔。

b) 一些合法的語料示例:

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

假設目前行為“京”字這一行,那麼特征可以這樣選取:

特征模闆

意義

代表特征

%x[-2,0]

-2行,0列

%x[-1,0]

-1行,0列

%x[0,0]

0行,0列

%x[1,0]

1行,0列

%x[2,0]

2行,0列

%x[-2,1]

-2行,1列

Sw

%x[-1,1]

-1行,1列

Bns

%x[0,1]

0行,1列

Mns

%x[1,1]

1行,1列

Ens

%x[2,1]

2行,1列

Sw

%x[-1,0]/%x[0,0]

-1行0列與0行0列的組合

北/京

%x[0,0]/%x[1,0]

0行0列與1行0列的組合

京/市

%x[-2,1]/%x[-1,1]

-2行1列與-1行1列的組合

Sw/ Bns

%x[-1,1]/%x[0,1]

-1行1列與0行1列的組合

Bns/Mns

%x[0,1]/%x[1,1]

0行1列與1行1列的組合

Mns/Ens

%x[1,1]/%x[2,1]

1行1列與2行1列的組合

Ens/Sw

%x[-2,1]/%x[-1,1]/%x[0,1]

-2行1列、-1行1列、0行1列的組合

Sw/Bns/Mns

%x[-1,1]/%x[0,1]/%x[1,1]

-1行1列、0行1列、1行1列的組合

Bns/Mns/Ens

%x[0,1]/%x[1,1]/%x[2,1]

0行1列、1行1列、2行1列的組合

Mns/Ens/Sw

b) 模闆制作:模闆分為兩類:Unigram和Bigram。

其中Unigram/Bigram是指輸出token的Unigram/Bigrams,而不是特征。

c) 以前面示例中的特征為特征,制作為Unigram模闆如下:

Unigram

U00:%x[-2,0]

U01:%x[-1,0]

U02:%x[0,0]

U03:%x[1,0]

U04:%x[2,0]

U05:%x[-2,1]

U06:%x[-1,1]

U07:%x[0,1]

U08:%x[1,1]

U09:%x[2,1]

U10:%x[-1,0]/%x[0,0]

U11:%x[0,0]/%x[1,0]

U12:%x[-2,1]/%x[-1,1]

U13:%x[-1,1]/%x[0,1]

U14:%x[0,1]/%x[1,1]

U15:%x[1,1]/%x[2,1]

U16:%x[-2,1]/%x[-1,1]/%x[0,1]

U17:%x[-1,1]/%x[0,1]/%x[1,1]

U18:%x[0,1]/%x[1,1]/%x[2,1]

說明:

1) 其中#開頭的行不起作為,為注釋;

2) 行與行之間可以有空行;

3) Unigram的特征前使用字母U,而Bigram的特征前使用字母B。後面的數字用于區分特征,當然這些數字不是一定要連續。

五、訓練方法

a) 語料的訓練可以使用指令(在終端或DOS指令行中):crf_learn <模闆> <訓練語料> <模闆檔案>

其中模闆和訓練語料是需要事先準備好的,模闆檔案在訓練完成後生成

注意:

1) 如果提示語料格式錯誤,則注意檢查語料的存儲編碼,有些編碼CRF++是會讀取錯誤的;

2) 檔案路徑要正确,如果檔案沒在目前目錄,那麼要使用絕對路徑。

b) 訓練中一些參數的說明:

ter:疊代次數

terr:标記錯誤率

serr:句字錯誤率

obj:目前對象的值。當這個值收斂到一個确定值的時候,訓練完成

diff:與上一個對象值之間的相對差

六、解碼方法

a) 可以使用crf_test -m <模闆檔案> <測試檔案1> <測試檔案2> ……。

b) 結果會直接輸出到螢幕上面,如果想讓結果儲存到檔案中,那麼使用重定向,在上面指令後面加上一個開關“>”即可:crf_test -m <模闆檔案> <測試檔案1> > <儲存位置>。例如:crf_test -m model test.txt > result.txt

七、評測工具CoNLL 2000的用法

a) 下載下傳:

i. http://download.csdn.net/source/1425687

ii. http://www.cnts.ua.ac.be/conll2000/chunking/output.html

b) 使用它是用來評分,是以要求crf_test一步使用的測試檔案中本身帶有答案,這樣解碼後生成的結果會在答案的後一列。比如原來為:

使 En N

、 Sw N

交 Bni B-ORG

通 Mni I-ORG

部 Eni I-ORG

部 Bn N

那麼解碼後變成:

使 En N N

、 Sw N N

交 Bni B-ORG B-ORG

通 Mni I-ORG I-ORG

部 Eni I-ORG I-ORG

部 Bn N N

CoNLL 2000将把最後一列與倒數第二列進行對比,統計出最後各類的正确率,召回率、F值等。

c) 使用評測工具前要将評測檔案中的所有制表位轉換成空格,否則評測工具會出錯。

d) 評測指令為:perl conlleval.pl < <評測檔案>

2、CRFsuite

python-crfsuite

https://travis-ci.org/tpeng/python-crfsuite.svg?branch=master

python-crfsuite is a python binding to CRFsuite.

Installation

pip install python-crfsuite
           

可以得到python下的CRFsuite子產品

使用的時候直接

import python_crfsuite
           

3、結巴分詞

https://github.com/fxsjy/jieba

“結巴”中文分詞:做最好的Python中文分詞元件 “Jieba”

支援三種分詞模式:

1)精确模式,試圖将句子最精确地切開,适合文本分析;

2)全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;

3)搜尋引擎模式,在精确模式的基礎上,對長詞再次切分,提高召回率,适合用于搜尋引擎分詞。

同樣支援繁體分詞

支援自定義詞典

線上示範

http://jiebademo.ap01.aws.af.cm/

網站代碼:https://github.com/fxsjy/jiebademo

Python 2.x 下的安裝

全自動安裝:easy_install jieba 或者 pip install jieba

通過import jieba 來引用

import jieba
           

不報錯,說明jieba元件安裝成功。

結巴采用的算法:

基于Trie樹結構實作高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG),采用了動态規劃查找最大機率路徑, 找出基于詞頻的最大切分組合對于未登入詞,采用了基于漢字成詞能力的HMM模型,使用了Viterbi算法。

4.哈工大ltp平台

官方連結:

http://www.ltp-cloud.com/

具體使用方法可參考官網簡介

線上示範:

http://www.ltp-cloud.com/demo/