conditional
random
field
:條件隨機場,一種機器學習技術(模型)
crf由
john lafferty
最早用於
nlp技術領域,其在
nlp技術領域中主要用於文字標註,並有多種應用場景,例如:
本文主要描述如何使用
crf技術來進行中文分詞。
1. crf
把分詞當做字的詞位分類問題,通常定義字的詞位資訊如下:
2. crf分詞的過程就是對詞位標註後,將b和e之間的字,以及s單字構成分詞
3. crf分詞例項:
上面介紹了crf技術思想以及如何用於分詞,下面將介紹如何在實際開發中使用crf進行分詞工作。目前常見的crf工具包有pocket crf, flexcrf 車crf++,目前網上也有一些它們3者之間的對比報告,個人感覺crf++在易用性,穩定性和準確性等綜合方面的表現最好,同時在公司的專案開發中也一直在使用,因此下面將概述一下crf++的使用方法(具體細節可以到crf++官方主頁去查閱,
1.安裝
編譯器要求:c++編譯器(gcc 3.0或更高)
命令:% ./configure
% make
% su
# make install
注:只有擁有root帳號的使用者才能成功安裝。
77number of features:
32856
freq:
1eta:
0.0001
c(sigma^2):
10iter=0 terr=0.7494725738 serr=1 obj=2082.968899 diff=1
iter=1 terr=0.1671940928 serr=0.8831168831 obj=1406.329356 diff=0.3248438053
iter=2 terr=0.1503164557 serr=0.8831168831 obj=626.9159973 diff=0.5542182244
其中:iter:迭代次數
terr:和tags相關的錯誤率(錯誤的tag數/所有的tag數)
serr:與sentence相關的錯誤率(錯誤的sentence數/所有的sentence數)
obj:當前物件的值。當這個值收斂到乙個確定的值是,crf模型將停止迭代
diff:與上乙個物件值之間的相對差
有兩個主要的引數用於控制訓練條件:
-c float:使用這個選項,你可以改變crf的hyper-parameter。當取乙個極大的c值,crf將可能對訓練資料產生過擬合(overfitting)現象。這個引數將會調節overfitting和underfitting之間的平衡。結果將會對引數帶來有意義的影響。使用者可以通過使用held-out data或者更多的通用模型的選擇方法如十字交叉驗證法(cross validation)獲得最有的值。
-f num:這個引數用於設定特徵的cut-off閾值。crf++訓練時只使用出現次數不少於num次數的特徵進行訓練。預設值為1。當使用crf++訓練大規模資料時,單一特徵的數量將達到數百萬,此時選擇這個引數很有用。
這裡有乙個使用這兩個引數的例子:
% crf_learn -f 3 -c 1.5 template_file train_file model_file
4.測試(解碼)
使用crf_test 命令:
% crf_test -m model_file test_files ...
其中,model_file是crf_learn建立的。在測試過程中,使用者不需要指定template file,因為,mode file已經有了template的資訊。test_file是你想要標註序列標記的測試語料。這個檔案的書寫格式應該與訓練檔案一致。
下面是乙個crf_test輸出的例子:
% crf_test -m model test.data
rockwell
nnp
b b
international
nnp
i i
corp.
nnp
i i
's pos
b b
tulsa
nnp
i i
unit
nn i i
..其中,最後一列是模型估計的tag。如果第三列是標準的tag,則可以通過簡單的比較第三列和第四列之間的差別計算出準確率。
詳細的層次(verbose level)
-v選項:將設定verbose level。預設值為0。通過增加層次,你可以從crf++獲得額外的資訊。
層次1:
你 可以對每個tag使用邊緣概率(marginal probabilities)(這是一種對輸出tag的confidence measure),對輸出使用條件概率(conditional probably)(針對整個輸出的confidence measure)。
例如:% crf_test -v1 -m model test.data| head
# 0.478113
rockwell
nnp
b b/0.992465
international
nnp
i i/0.979089
corp.
nnp
i i/0.954883
's pos
b b/0.986396
tulsa
nnp
i i/0.991966
...其中,第一行的"# 0.478113"即是輸出的條件概率,而且每乙個輸出tag各自含有乙個概率,表示形式如「b/0.992465」。
層次2:
你可以對所有的其他候選求邊緣概率。
例如:% crf_test -v2 -m model test.data
# 0.478113
rockwell
nnp
b b/0.992465
b/0.992465
i/0.00144946
o/0.00608594
international
nnp
i i/0.979089
b/0.0105273
i/0.979089
o/0.0103833
corp.
nnp
i i/0.954883
b/0.00477976
i/0.954883
o/0.040337
's pos
b b/0.986396
b/0.986396
i/0.00655976
o/0.00704426
tulsa
nnp
i i/0.991966
b/0.00787494
i/0.991966
o/0.00015949
unit
nn i i/0.996169
b/0.00283111
i/0.996169
o/0.000999975
..n-best outputs
-n選項:使用這個選項將獲得n-best結果,它根據crf計算出的條件概率排序得到。當選擇了n-best結果,crf++會自動新增一行,形式為「# n prob」,其中n是排序後的輸出結果,從0開始。prob表示output的條件概率。
需要注意的是,如果crf++不能找到足夠的n條路徑是,它將放棄列舉n-best結果。這種情況在所給的句子很短的情況下常出現。
crf++使用前向viterbi和後向a*搜尋相結合的方法。這種結合適應了n-best結果的需求。
下面是乙個n-best結果的例子:
% crf_test -n 20 -m model test.data
# 0 0.478113
rockwell
nnp
b b
international
nnp
i i
corp.
nnp
i i
's pos
b b
...# 1 0.194335
rockwell
nnp
b b
international
nnp
i i
React 簡介入門
一.react是facebook推出的乙個用來構建使用者介面的js庫。最新版本v15.3.2。具備以下特性 1.不是乙個mvc框架 2.不適用模板 3.響應式更新非常簡單 4.html5僅僅是個開始 二.react實現了單向相應的資料流,從而減少了重複 比傳統資料繫結更簡單。三.react元件通過乙...
KOA框架簡介,入門指引
koa 是乙個新的 web 框架,由 express 幕後的原班人馬打造,致力於成為 web 應用和 api 開發領域中的乙個更小 更富有表現力 更健壯的基石 koa git master find type f name js grep v test lib context.js lib resp...
XML入門簡介
xml可以用來描述資料,重點是 資料是什麼 html則是用來顯示資料,重點是 如何顯示資料 在你繼續之前你應該具有下面一些基礎的知識 你最好在學習xml之前就了解上面的內容,因為在xml的學習過程中將用到這些知識。xml是用來存放資料的 xml不是html的替代品,xml和html是兩種不同用途的語...