普通的分類問題是把 (x,y) 看做乙個樣本,序列分類問題是把(x1,…,xt, y1,…,yt) 整體看做乙個樣本。 比如以前用 svm,輸入x輸出y是標量,表示類別;現在用crf,輸入x輸出y是個序列,表示不同位置/時刻的類別。通過訓練迭代出各個特徵函式的類別。
crf通過迭代各特徵函式的權重使得對狀態序列的所有位置的詞的所有特徵函式加權求和後最大。
下面概率分布函式,表示了給定x序列的情況下,y序列的概率分布
**時可參照維特比演算法,公式如下:
安裝
tar -zxvf crf+±0.58.tar.gz
基本環境:
gcc:
sudo yum -y install gcc
sudo yum -y install gcc-c++
pip:
curl 「 -o 「get-pip.py」
sudo python get-pip.py
python-devel:
sudo yum install python-devel
----------基本環境具備可直接安裝-------------
step1 cd crf+±0.58/
step2 ./configure
step3 sudo make && sudo install
安裝python介面(非必須)
sudo vim /etc/ld.so.conf
include /usr/local/lib
sudo /sbin/ldconfig -v
ln -s /usr/local/lib/libcrfpp.so.* /usr/lib64/
sudo python setup.py install
測試
採用crf++自帶的測試例子來確認安裝是否成功,採用如下步驟
step1 cd ./crf+±0.58/example
step2 cd chunking/
step3 訓練:sudo …/…/crf_learn -c 4.0 template train.data model -t(-t的目的是記錄生成的模型細節到txt文字)
step4 測試: sudo …/…/crf_test -m model test.data
乙個特徵函式集
crf++ 可以根據模板自動生成特徵函式集,其提供兩種模板(unigram, bigram)
unigram生成的特徵函式:函式: f(s, o),:
表示只與當前位置對應的標籤相關的特徵(可能兼顧其在句子中的整體狀態),生成所有可能標註對應的特徵函式。提供的模板例子:
u01:%x[-1,0]
u02:%x[0,0]
u05:%x[-2,0]/%x[-1,0]/%x[0,0]
……
如u00:%x[-1, 0] , 及序列「crf」,標籤集合b、m、e
當前位置「r」:則可生成 :
func1=if(output=b and feature= 『u00:c』) return 1 else return 0
func2=if(output=m and feature= 『u00:c』) return 1 else return 0
func3=if(output=e and feature= 『u00:c』) return 1 else return 0
func1=if(output=b and feature= 『u00:r』) return 1 else return 0
func2=if(output=m and feature= 『u00:r』) return 1 else return 0
func3=if(output=e and feature= 『u00:r』) return 1 else return 0
…
unigram 生成的特徵函式個數 = |標籤數| x |詞的個數|
bigram:函式:f(s』, s, o)其生成的特徵函式考慮兩個狀態的所有可能標籤。
如模板:
u00:%x[0,0]
u-1:%x[-1,0]/%x[0,0]
u+1:%x[0,0]/%x[1,0]
b
如u00:%x[-1, 0] , 及序列「crf」,標籤集合b、m、e,當前位置「r」:則可生成 :
func1 = if (prev = b and after = b and feature=b01:「r」) return 1 else return 0
func1 = if (prev = b and after = m and feature=b01:「r」) return 1 else return 0
func1 = if (prev = b and after = e and feature=b01:「r」) return 1 else return 0
……bigram: |標籤數| x |標籤數| x |詞的個數|
使用crfpp訓練
語料:
訓練集:
cat 語料 | awk 『』 > 處理後的語料
訓練:crf_learn -t good/template.bi crfpp_uni_book_train model_560w_bi
維特比演算法實際使用動態規劃解crf條件隨機場的**問題,即用動態規劃(dynamic programming)求概率最大狀態路徑(最優路徑)。這時一條路徑對應乙個狀態序列。
我們只需要從時刻t=1開始,遞推地計算在時刻t狀態為i的各條部分路徑的最大概率,直至得到時刻t=t狀態為i的各條路徑的最大概率。時刻t=t的最大概率即為最優路徑的概率p*,最優路徑的終結點i*t也同時得到。
之後,為了找出最優路徑的各個節點,從終結點it開始,由後向前逐步求得節點it-1,……,i1,得到最優路徑i=(i1, i2, i3,……,it),這就是維特比演算法。
在條件隨機場**問題中,crf**問題就成為了求非規範化概率最大的最優路徑問題。
CRF 及CRF 安裝與解釋
conditional random field 條件隨機場,一種機器學習技術 模型 crf由john lafferty最早用於nlp技術領域,其在nlp技術領域中主要用於文字標註,並有多種應用場景,例如 本文主要描述如何使用crf技術來進行中文分詞。1.crf把分詞當做字的詞位分類問題,通常定義字...
條件隨機場(CRF)及CRF 安裝使用
這個,終於到了要解決命名實體識別的問題,搞自然語言處理,貌似這個繞不開的。crf,傳統的幹這活的利器,聽名字就是高大上。既然繞不開,那就整整吧。crf是用來標註和劃分序列結構資料的概率化結構模型。言下之意,就是對於給定的輸出,標識序列y和觀測序列x,條件隨機場通過定義條件概率p y x 而不是聯合概...
CRF 安裝教程
2 將壓縮包放到自定義目錄,執行以下命令 1 tar zxvf crf 0.58.tar.gz 2 cd crf 0.58 3 configure 4 make 5 su 6 make install 3 進入子目錄python中,執行下面的命令安裝python的crfpp python setup...