對crf++的template的理解 ©seven_clear


這是以前的一篇草稿,當初沒寫完,今天發出來,但總覺得水平有限,越學越覺得自己菜,寫的博客水准低,發完這篇以后就謹慎發博了,畢竟自己菜,不能老吹B,下面是原稿。

好久沒更了,本來年前想寫篇關於爬蟲的總結來,結果在家懶癌發作,開學了也沒“擠”出時間來。今天主要是心情好,寫下自己學到的一點知識,長了一點人生的經驗。

前兩周看了HMM和CRF的知識,因為最近做的東西要用到,這兩天在用crf++,目前最新的好像是0.58版,再新的沒找到資源,貌似0.54之后就只有發布的exe了,0.53版的還有源碼,感興趣的同學可以看看源碼(我打算最近兩天看)。用一個東西首先要看它的官方文檔,對一些命令什么的看過之后,卡在了一個地方——template,文檔上只說template里是訓練時生成特征函數的,並解釋了一下形如U00:%x[-2,0]的含義,但是,對於我們這種菜雞,根本理解不了啊。問題主要有三個(首先假設我們有如下的template:)

# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-2,0]/%x[-1,0]/%x[0,0]
U06:%x[-1,0]/%x[0,0]/%x[1,0]
U07:%x[0,0]/%x[1,0]/%x[2,0]
U08:%x[-1,0]/%x[0,0]
U09:%x[0,0]/%x[1,0]

# Bigram
B

1)U00~U04組合起來是什么意思;2)形如U05~U09那樣的是什么意思;3)模版怎么寫

知道問題就可以有目的的搜索,搜索結果大致是怎么理解crf++中的模版、用crf++進行中文標注、crf++模版格式等等,看了一堆,主要收獲就是形如U09 是聯合概率,剩下的都是和官網文檔差不多,大多數文章相似度很高(哈哈哈),也算小小的解決了第二個問題,別的我依然蒙蔽。

今晚找老大聊了聊,老大解決了我的疑惑,又學到了一點人生的經驗。下面說一下我得理解。

首先假設我們知道CRF(s因為有的加了)的概念,知道計算P(y|X)的公式

然后我們在模型中使用某特征(暫且叫字符n-gram特征),其具體特征形式化描述為

下標表示距離當前考察字符的相對位置,上一句意思就是對位置i,還要考察其前面兩個字符和后面兩個字符來計算其 Φ,比如: 我是中國人,考察中的時候還要考察我 是 國 人,模版寫出來就是我們的U00~U04。

上面理解了,U05-U09就好理解了,它們其實就是像U00-U04這樣的特征的組合,還是上面那個例子,U08表示 是/中。U08、U09這樣的叫bigram(和下面的Bigram不同,一般而言比Bigram靈活一點),U05-U07叫trigram。其實在crf++代碼是現中根據模板生成的特征也不過是一些字符串和對應的編號,然后通過學習得到特征函數的權重。

關於模板怎么寫,這取決於你,一般來說會有一個窗口(即考慮當前token前幾個后幾個),大小自定義,源碼里好像限制窗口最大為17,如果你的特征有多列,可能要多寫些像U00-U04這樣的模板不同的地方在於[,]里的第二項還有像U05-U09這樣的組合特征模板,下面的Bigram特征一般沒用,用的話也是最簡單的B。

其實現在看來當初的疑問很簡單,大家都是事后諸葛亮,但還是希望亡羊補牢為時未晚。學東西還是要學透,不然笨鳥還是笨鳥,最后連飛都飛不動了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM