這兩天想瞭解一下中文分詞的一些技術,因此就研究了一把,也就是瞭解了一些皮毛,記錄下來,首先申明我是外行,請勿用專業標準來要去我。
中文分詞,主要是三個流派,一是詞典派,一是統計派,一是規則派。比如“我愛北京天安門”,詞典派就是去查詞典,詞典中中有“我”,“愛”,“北京”和“天安門”,就分出來了,簡單吧。詞典派的演算法一般是最大匹配演算法,比如“毛澤東北京華煙雲”,正向最大匹配就是“毛澤東 北京 華煙雲”,逆向最大匹配是“毛澤 東北 京華煙雲”。還可以雙向“毛澤東 北 京華煙雲”。還有其他演算法。統計派呢,就複雜點了,中心思想就是“由字組詞”,研究字組詞的機率,比如“我”,單獨出現的機率是“50%”,“我愛”組合出現的機率是“10%”,那麼“我愛”就不是一個詞。比如“北京”,“北京”在很多文章中老放在一起,那麼就應該在一起,是一個地名。一個是規則派,規則派我沒怎麼看,好像單獨出現效果不好,一般大家都不用它。
說起優劣,詞典派演算法簡單,無非是查查查,效能也好,普通電腦,一秒幾百K甚至上M都可能。詞典派的一個主要問題是,詞典中沒有咋辦,沒有就沒法分啊,而且互連網上大家創造力驚人,新詞層出不窮。而統計派,在識別新詞方面,尤其是人名、地名、機構、日期、數量詞方面特別管用,你詞典中能把所有人名都放進去麼,而且,詞典大了,有歧義啊。統計派,和RPG遊戲類似,得滿滿來培養,就是訓練,而且分詞的時候效能也不大好。
分詞演算法,網上也挺多,如果兼顧效能、準確性,還是c++寫的比較好。
中科院的ICTCLAS分詞。
這是官方的源碼下載網站
http://ictclas.org/Down_OpenSrc.asp
有C#版本,是呂振宇做做的,分析文章列表如下:
http://www.cnblogs.com/zhenyulu/category/85598.html
做.NET的朋友可以訂閱呂老師的部落格,在.NET方面很有研究。
JAVA版本的,是張新波做的,下面是分析文章:
http://blog.csdn.net/sinboy/category/207165.aspx
把文章看完,把代碼看完,你就是專家了。ICTCLAS的分詞,只支援GBK(GB2312)字元集,所以如果是UTF-8的,您還得自己轉一下,本來我想改寫成支援UTF-8的,沒時間搞了。
下面是分完的結果:
---------------------------------------------------
視頻/n :/w 證監會/j 發布/v 創業/vn 板/n IPO/nx 辦法/n 5/m 月/n 1/m 日/q 起/f 實施/v 媒體/n 來源/n :/w 第一/m 財經/n 《/w 早市/n 導航/vn 》/w 新華/nz 網/n 北京/ns 3/m 月/n 31/m 日/q 電/n (/w 記者/n 趙/nr 曉輝/nr 、/w 陶/nr 俊潔/nr )/w 中國證監會/n 31/m 日/d 發布/v 《/w 首/d 次/a 公開/a 發行/v 股票/n 並/c 在/c 創業/nz 板/a 上/f 市/n 管理/v 暫行/b 辦法/n 》/w ,/w 辦法/n 自/a 5/m 月/n 1/m 日/d 起/f 實施/u 。/w 這/r 意味著/v 籌備/v 十/m 餘/m 年/a 之/a 久/a 的/b 創業/nz 板/a 有望/v 於/d 5/m 月/n 1/m 日/d 起/f 正式/a 開啟/v 。/w 辦法/n 共/d 分/v 為/p 6/m 章/q 58/m 條/q ,/w 對/p 擬/v 到/v 創業/v 板/ng 上市/v 企業/n 的/u 發行/vn 條件/n 、/w 發行/v 程式/n 、/w 資訊/n 披露/vn 、/w 監督/vn 管理/vn 和/c 法律/n 責任/n 等/u 方面/n 進行/v 了/u 詳細/a 規定/n 。/w 根據/p 規定/n ,/w 到/v 創業/v 板/ng 上/f 市/n 的/u 企業/n 應當/v 是/v 依法/d 設立/v 且/c 持續/vd 經營/v 三/m 年/q 以上/f 的/u 股份/n 有限公司/n ,/w 最近/t 兩/m 年/q 連續/a 盈利/n ,/w 最近/t 兩/m 年/q 淨利潤/n 累計/v 不/d 少於/v 1000/m 萬/m 元/q ,/w 且/c 持續/vd 增長/v ;/w 或者/c 最近/t 一/m 年/q 盈利/n ,/w 且/c 淨利潤/n 不/d 少於/v 500/m 萬/m 元/q ,/w 最近/t 一/m 年/q 營業/vn 收入/n 不/d 少於/v 5000/m 萬/m 元/q ,/w 最近/t 兩/m 年/q 營業/vn 收入/n 增長率/n 均/d 不/d 低於/v 30%/m 。/w 企業/n 發行/v 後/f 的/u 股本/n 總額/n 不/d 少於/v 3000/m 萬/m 元/q 。/w
ICTCLAS:235.109000 ms
---------------------------------------------------
寫完了,又發現一個資料挺全的部落格,刀劍笑的:
http://blog.csdn.net/jyz3051/category/356808.aspx?PageNumber=1
還有一個分詞是,李沫南寫的,libmmseg。
李沫南這個傢伙,如果我沒記錯的話,我和他共事過,想不到研究分詞,還能遇到故人。
http://www.coreseek.com/
我簡單介紹一下:sphinx。sphinx是俄羅斯人寫的開源的針對資料庫的一款索引產品。如果想做中小規模的站內搜尋,用它就沒錯了。特色是比Mysql的全文索引快(廢話),另外純天然的支援資料庫(可以內嵌到Mysql中做為一個引擎)。想研究的朋友可以看這裡:http://www.sphinxsearch.com/ 。再插一句話,本來對於sphinx我是寫過一篇教程的,但是csdn伺服器抽風,所以就沒了,我也不寫了。
還是回到分詞吧,libmmseg分詞方法可以看下面的部落格文章,此部落格也是李沫南的部落格。
http://nzinfo.spaces.live.com/Blog/cns!67694E0B61E3E8D2!344.entry
下面是分完的結果
---------------------------------------------------
$ mmseg -d /home/lhb/workspace/mmseg/dict/ /home/lhb/soft/text/01.txt
/x 視頻/x :/x 證監會/x 發布/x 創業/x 板/x IPO/x 辦法/x /x 5/x 月/x 1/x 日/x 起/x 實施/x /x /x 媒體/x 來源/x :/x 第一/x 財經/x 《/x 早市/x 導航/x 》/x
/x /x 新華/x 網/x 北京/x 3/x 月/x 31/x 日/x 電/x (/x 記者/x 趙/x 曉/x 輝/x 、/x 陶/x 俊/x 潔/x )/x 中國/x 證監會/x 31/x 日/x 發布/x 《/x 首次/x 公開/x 發行/x 股票/x 並/x 在/x 創業/x 板/x 上市/x 管理/x 暫行/x 辦法/x 》/x ,/x 辦法/x 自/x 5/x 月/x 1/x 日/x 起/x 實施/x 。/x 這/x 意味著/x 籌備/x 十/x 餘年/x 之/x 久/x 的/x 創業/x 板/x 有望/x 於/x 5/x 月/x 1/x 日/x 起/x 正式/x 開啟/x 。/x
/x /x 辦/x 法共/x 分為/x 6/x 章/x 58/x 條/x ,/x 對/x 擬/x 到/x 創業/x 板/x 上市/x 企業/x 的/x 發行/x 條件/x 、/x 發行/x 程式/x 、/x 資訊/x 披露/x 、/x 監督/x 管理/x 和/x 法律/x 責任/x 等/x 方面/x 進行/x 了/x 詳細/x 規定/x 。/x
/x /x 根據/x 規定/x ,/x 到/x 創業/x 板/x 上市/x 的/x 企業/x 應當/x 是/x 依法/x 設立/x 且/x 持續/x 經營/x 三/x 年/x 以上/x 的/x 股份/x 有限公司/x ,/x 最近/x 兩/x 年/x 連續/x 盈利/x ,/x 最近/x 兩/x 年/x 淨利潤/x 累計/x 不/x 少於/x 1000/x 萬元/x ,/x 且/x 持續/x 增長/x ;/x 或者/x 最近/x 一/x 年/x 盈利/x ,/x 且/x 淨利潤/x 不/x 少於/x 500/x 萬元/x ,/x 最近/x 一/x 年/x 營業/x 收入/x 不/x 少於/x 5000/x 萬元/x ,/x 最近/x 兩/x 年/x 營業/x 收入/x 增長率/x 均/x 不/x 低於/x 30/x %/x 。/x 企業/x 發行/x 後/x 的/x 股本/x 總額/x 不/x 少於/x 3000/x 萬元/x 。/x
Word Splite took: 22 ms.
---------------------------------------------------
ICTCLAS和libmmseg的優劣,前者效果要好一些,後者速度快一些。前者效果好的原因是對於人名、地名有一些規則在裡頭。後者呢,這些好像沒有。速度方面,後者比前者快一個數量級吧。另,前者的UTF-8支援需要額外處理。
對於統計派,也有一些資料可以參考。
趙海的首頁:
http://bcmi.sjtu.edu.cn/~zhaohai/index-cn.html
趙海的部落格
http://cwseg.spaces.live.com/
現在統計派都比較流行CRF(Conditon Random Field)條件隨機場/域的方法,看字都認識,合起來就不知道啥意思了。
據說HMM(Hidden Markov Model 馬爾可夫模型),MEMM(最大熵馬爾科夫模型)過時了。關於這幾個概念,可以參考:http://wshxzt.ycool.com/post.1769559.html。
工具包和使用上,下面連結:
CRF 理論、工具包的使用及在NE 上的應用
基於CRF的中文分詞
當然還有一些,上google搜CRF就可以了。
一款好的分詞,估計需要用到綜合的辦法,詞典是必須的,新詞識別也是必須的,歧義消除也是必須的,因此就要博採眾長,才能再效能、準確率、召回率上找到平衡。
寫完這篇文章,發現了一幫哥們基於CRF++做的分詞開源項目,bamboo,哈哈
http://groups.google.com/group/nlpbamboo
http://code.google.com/p/nlpbamboo/
有興趣可以研究一下哦,那裡聚了不少人。
1)下載bamboo,編譯安裝後,
2)下載已經訓練過的模型
http://code.google.com/p/nlpbamboo/downloads/list
下載index.tar.bz2,解壓到/opt/bamboo/index下
你要是想自己跑,可以下載
| people-daily-bamboo-edition.txt.gz |
人民日報98年一月語料庫(bamboo修改版), 將“姓”和“名”合并為一個切分單位. |
Dec 02 |
3.0 MB |
470 |
3)$cd /opt/bamboo/bin/
lhb@lhb-vm-desktop:/opt/bamboo/bin$ ./bamboo -p crf_seg < /home/lhb/soft/text/01.txt
parsing '-'...
----------------------------------------
視頻 : 證監會 發布 創業板 IPO 辦法 5月 1日 起 實施 媒體 來源 : 第一 財經 《 早市 導航 》
新華網 北京 3月 31日 電 ( 記者 趙曉輝 、 陶俊潔 ) 中國 證監會 31日 發布 《 首 次 公開 發行 股票 並 在 創業板 上市 管理 暫行 辦法 》 , 辦法 自 5月 1日 起 實施 。 這 意味著 籌備 十 餘 年 之 久 的 創業板 有望於 5月 1日 起 正式 開啟 。
辦法 共 分為 6 章 58 條 , 對 擬 到 創業板 上市 企業 的 發行 條件 、 發行 程式 、 資訊 披露 、 監督 管理 和 法律 責任 等 方面 進行 了 詳細 規定 。
根據 規定 , 到 創業板 上市 的 企業 應當 是 依法 設立 且 持續 經營 三 年 以上 的 股份 有限公司 , 最近 兩 年 連續 盈利 , 最近 兩 年 淨利潤 累計 不 少於 1000萬 元 , 且 持續 增長 ; 或者 最近 一 年 盈利 , 且 淨利潤 不 少於 500萬 元 , 最近 一 年 營業 收入 不 少於 5000萬 元 , 最近 兩 年 營業 收入 增長率 均 不 低於 30% 。 企業 發行 後 的 股本 總額 不 少於 3000萬 元 。
consumed time: 284 ms
---------------------------------------
基於CRF++訓練的方法,見我的另外一篇:CRF++分詞指南