中文分詞系統(tǒng)介紹
7.5 中文分詞系統(tǒng)介紹
7.5.1 分詞系統(tǒng)的評(píng)價(jià)標(biāo)準(zhǔn)
分詞系統(tǒng)的最主要的工作是進(jìn)行分詞。對(duì)于分詞而言,不僅要求所研制的軟件在分詞的正確率和速度方面滿足一定的要求,而且要像開(kāi)發(fā)大型傳統(tǒng)軟件那樣,在各個(gè)階段不斷地進(jìn)行評(píng)價(jià),其目的主要是檢查它的準(zhǔn)確性和實(shí)用性,分詞系統(tǒng)的評(píng)價(jià)主要有以下幾個(gè)方面:
(1)分詞正確率
書面漢語(yǔ)的文本可以看成是字符序列,分詞的正確率直接影響更高一級(jí)的處理?,F(xiàn)有的分詞系統(tǒng)切分錯(cuò)誤主要集中在歧義字段和專有名詞(如人名、地名、機(jī)構(gòu)名和未登錄詞等)。為了獲得更高的切分正確率,應(yīng)該進(jìn)行整體測(cè)試、歧義測(cè)試和專業(yè)詞測(cè)試,最終結(jié)果應(yīng)為三種測(cè)試的加權(quán)值。
(2)切分速度
切分速度是指單位時(shí)間內(nèi)所處理的漢字個(gè)數(shù)。在分詞正確率基本滿足要求的情況下,切分速度是另一個(gè)很重要的指標(biāo),特別對(duì)于算法不單一、使用輔助手段,諸如聯(lián)想,基于規(guī)則,神經(jīng)網(wǎng)絡(luò),專家系統(tǒng)等方法更應(yīng)注意這一點(diǎn)。通常中文信息處理的文本數(shù)量是相當(dāng)大的,因此必須考慮方法是否能使系統(tǒng)總開(kāi)銷合理。在人機(jī)交互方式下處理歧義問(wèn)題的策略和人機(jī)接口的設(shè)計(jì),有時(shí)會(huì)嚴(yán)重地影響切分速度,這也是應(yīng)該考慮的因素。
(3)功能完備性
自動(dòng)分詞方法除了完成分詞功能外,還應(yīng)具備詞庫(kù)增刪、修改、查詢和批處理等功能。
(4)易擴(kuò)充和可維護(hù)性
這是提供數(shù)據(jù)存儲(chǔ)和計(jì)算功能擴(kuò)充要求的軟件屬性,包括詞庫(kù)的存儲(chǔ)結(jié)構(gòu),輸入/輸出形式的變化等方面的擴(kuò)展和完善。這項(xiàng)指標(biāo)與系統(tǒng)清晰性、模塊性、簡(jiǎn)單性、結(jié)構(gòu)性、完備性以及自描述性等軟件質(zhì)量準(zhǔn)則有直接的聯(lián)系,對(duì)于研究實(shí)驗(yàn)性質(zhì)的軟件是非常重要的,因?yàn)檫@類軟件需要不斷提高與改進(jìn),使之適應(yīng)中文信息處理的各種應(yīng)用。
(5)可移植性
可移植性是指方法能從一個(gè)計(jì)算機(jī)系統(tǒng)或環(huán)境轉(zhuǎn)移到另一個(gè)計(jì)算機(jī)系統(tǒng)或環(huán)境的容易程度。一個(gè)好的分詞方法不應(yīng)該只能在一個(gè)環(huán)境下運(yùn)行,而應(yīng)該稍作修改便可在另一種環(huán)境下運(yùn)行,使它更便于推廣。
另外,對(duì)于中文分詞系統(tǒng)而言,由于漢語(yǔ)的復(fù)雜性和特殊性,中文分詞系統(tǒng)還存在兩個(gè)指標(biāo)性的能力評(píng)價(jià)標(biāo)準(zhǔn):歧義切分能力和未登錄詞的識(shí)別能力。
由于可能存在歧義,分詞并不是一個(gè)簡(jiǎn)單地從輸入串中發(fā)現(xiàn)合法詞的過(guò)程。一個(gè)句子經(jīng)常對(duì)應(yīng)幾個(gè)合法詞序列,因此,漢語(yǔ)分詞中的一個(gè)重要問(wèn)題就是在所有這些可能的序列中選出一個(gè)正確的結(jié)果。歧義切分是自動(dòng)分詞中不可避免的現(xiàn)象,是自動(dòng)分詞中一個(gè)比較棘手的問(wèn)題。對(duì)歧義切分字段的處理能力,嚴(yán)重影響到漢語(yǔ)自動(dòng)分詞系統(tǒng)的精度。實(shí)踐表明,只用機(jī)械匹配進(jìn)行分詞,其精度不可能高,雖然有時(shí)也能滿足一些標(biāo)準(zhǔn)不高的需要,但不能滿足中文信息處理高標(biāo)準(zhǔn)的要求。
未登錄詞辨別,未登錄詞包括中外人名、中國(guó)地名、機(jī)構(gòu)組織名、事件名、貨幣名、縮略語(yǔ)、派生詞、各種專業(yè)術(shù)語(yǔ)以及不斷發(fā)展和約定俗成的一些新詞語(yǔ)。它是種類繁多,形態(tài)組合各異,規(guī)模宏大的一個(gè)領(lǐng)域。對(duì)這些詞語(yǔ)的自動(dòng)辨識(shí),是一件非常困難的事。
7.5.2 各中文分詞系統(tǒng)概述
目前使用較廣泛的中文分詞系統(tǒng)有中國(guó)科學(xué)院開(kāi)發(fā)的ICTCLAS,哈爾濱工業(yè)大學(xué)開(kāi)發(fā)的哈工大分詞系統(tǒng),北京航空航天大學(xué)開(kāi)發(fā)的漢語(yǔ)自動(dòng)分詞使用系統(tǒng)CASS(Chinese Automatic Segmenting System),清華大學(xué)開(kāi)發(fā)的SEG-SEGTAG,復(fù)旦大學(xué)開(kāi)發(fā)的復(fù)旦分詞系統(tǒng),杭州大學(xué)改進(jìn)MM算法開(kāi)發(fā)的MM系統(tǒng),北京大學(xué)計(jì)算語(yǔ)言研究所開(kāi)發(fā)的北大分詞系統(tǒng),以及Microsoft Research漢語(yǔ)句法分析器中的自動(dòng)分詞系統(tǒng)。
中科院ICTCLAS(Institute of Computing Technology,Chinese Lexical Analysis System)是一個(gè)基于多層隱馬爾可夫模型的漢語(yǔ)詞法分析系統(tǒng)。該系統(tǒng)的功能有:中文分詞;詞性標(biāo)注;命名實(shí)體識(shí)別;新詞識(shí)別;同時(shí)支持用戶詞典。分詞正確率高達(dá)97.58%(最近的973專家組評(píng)測(cè)結(jié)果),基于角色標(biāo)注的未登錄詞識(shí)別能取得高于90%召回率,其中中國(guó)人名的識(shí)別召回率接近98%,分詞和詞性標(biāo)注處理速度為31.5KB/s。
哈工大統(tǒng)計(jì)分詞系統(tǒng)能夠利用上下文識(shí)別大部分生詞,解決一部分切分歧義。經(jīng)測(cè)試,此系統(tǒng)的分詞錯(cuò)誤率為1.5%,速度為236字/秒。
CASS系統(tǒng)由總控程序、自動(dòng)分詞程序、設(shè)施管理程序、分詞詞典和知識(shí)庫(kù)等五大部分組成。自動(dòng)分詞算法程序選用正向增字最大匹配法ASM(+1,+ 1,+1)實(shí)現(xiàn),該算法的嵌套調(diào)用,可以識(shí)別出各種多義切分字段,包括任意多重的交集型多義字段。這個(gè)算法經(jīng)過(guò)相應(yīng)的運(yùn)行控制,可以實(shí)現(xiàn)其他各種分詞算法。其機(jī)械分詞速度為200字/秒以上,知識(shí)庫(kù)分詞速度150字/秒(沒(méi)有完全實(shí)現(xiàn))。
清華大學(xué)SEG分詞系統(tǒng)提供了帶回溯的正向、反向、雙向最大匹配法和全切分-評(píng)價(jià)切分算法,由用戶來(lái)選擇合適的切分算法。其特點(diǎn)則是帶修剪的全切分-評(píng)價(jià)算法。經(jīng)過(guò)封閉試驗(yàn),在多遍切分之后,全切分-評(píng)價(jià)算法的精度可以達(dá)到99%左右。清華大學(xué)SEGTAG系統(tǒng)著眼于將各種各類的信息進(jìn)行綜合,以便最大限度地利用這些信息提高切分精度。系統(tǒng)使用有向圖來(lái)集成各種各樣的信息。通過(guò)實(shí)驗(yàn),該系統(tǒng)的切分精度也可達(dá)到99%左右,能夠處理未登錄詞比較密集的文本,切分速度約為30字/秒。
復(fù)旦分詞系統(tǒng)FDASCT由四個(gè)模塊構(gòu)成。預(yù)處理模塊,利用特殊的標(biāo)記將輸入的文本分割成較短的漢字串,這些標(biāo)記包括標(biāo)點(diǎn)符號(hào)、數(shù)字、字母等非漢字符,還包括文本中常見(jiàn)的一些字體、字號(hào)等排版信息。歧義識(shí)別模塊,使用正向最小匹配和逆向最大匹配對(duì)文本進(jìn)行雙向掃描,如果兩種掃描結(jié)果相同,則認(rèn)為切分正確,否則就判別其為歧義字段,需要進(jìn)行歧義處理;歧義字段處理模塊,此模塊使用構(gòu)詞規(guī)則和詞頻統(tǒng)計(jì)信息來(lái)進(jìn)行排歧。最后,此系統(tǒng)還包括一個(gè)未登錄詞識(shí)別模塊,實(shí)驗(yàn)過(guò)程中,對(duì)中文姓氏的自動(dòng)辨別達(dá)到了70%的準(zhǔn)確率。系統(tǒng)對(duì)文本中的地名和領(lǐng)域?qū)S性~匯也進(jìn)行了一定的識(shí)別。
杭州大學(xué)改進(jìn)的MM分詞系統(tǒng)的詞典采用一級(jí)首字索引結(jié)構(gòu),詞條中包括了“非連續(xù)詞”(形如C1□* Cn)。系統(tǒng)精度的實(shí)驗(yàn)結(jié)果為95%,低于理論值99.73%,但高于通常的MM,RMM,DMM方法。
北京大學(xué)研究所分詞系統(tǒng)由北京大學(xué)計(jì)算語(yǔ)言學(xué)研究所研制開(kāi)發(fā),術(shù)語(yǔ)分詞和詞類標(biāo)注相結(jié)合的分詞系統(tǒng)。系統(tǒng)的分詞連同標(biāo)注的速度在Pentium 133Hz/16MB內(nèi)存機(jī)器上的達(dá)到了每秒3千詞以上,而在Pentium II/64MB內(nèi)存機(jī)器上速度高達(dá)每秒5千詞。
微軟研究院的自然語(yǔ)言研究所從20世紀(jì)90年代開(kāi)始開(kāi)發(fā)了一個(gè)通用型的多國(guó)語(yǔ)言處理平臺(tái)NLPWin,據(jù)報(bào)道,NLPWin的語(yǔ)法分析部分使用的是一種雙向的Chart Parsing,使用了語(yǔ)法規(guī)則并以概率模型做導(dǎo)向,并且將語(yǔ)法和分析器獨(dú)立開(kāi)。實(shí)驗(yàn)結(jié)果表明,系統(tǒng)可以正確處理85%的歧義切分字段,在Pentium 400PC上的速度為900~1200字/秒。
7.5.3 中科院分詞系統(tǒng)I CTCLAS
7.5.3.1 系統(tǒng)介紹
中文分詞系統(tǒng)ICTCLAS(Institute of Computing Technology,Chinese Lexical Analysis System)是中科院計(jì)算所的張華平、劉群開(kāi)發(fā)的,系統(tǒng)采用C++語(yǔ)言開(kāi)發(fā)。它是一套獲得廣泛好評(píng)的分詞系統(tǒng),其主要功能包括中文分詞、詞性標(biāo)注、命名實(shí)體識(shí)別、新詞識(shí)別等,同時(shí)支持用戶詞典,也就是說(shuō)用戶可以通過(guò)自定義一個(gè)詞表來(lái)擴(kuò)充ICTCLAS的原有詞庫(kù)。該組件先后經(jīng)過(guò)五年的精心打造,內(nèi)核升級(jí)6次,目前已經(jīng)升級(jí)到了ICTCLAS3.0。ICTCLAS3.0分詞速度單機(jī)996KB/s,分詞精度98.45%,API不超過(guò)200KB,各種詞典數(shù)據(jù)壓縮后不到3M,是當(dāng)前世界上最好的漢語(yǔ)詞法分析器。
該分詞系統(tǒng)的主要思想是先通過(guò)層疊形馬爾可夫模型CHMM(Cascaded Hidden Markov Model)進(jìn)行分詞,通過(guò)分層,既增加了分詞的準(zhǔn)確性,又保證了分詞的效率,共分五層,如圖7-2所示。
分詞的流程大概是:先進(jìn)行原子切分,然后在此基礎(chǔ)上進(jìn)行N最短路徑粗切分,找出前N個(gè)最符合的切分結(jié)果,生成二元分詞表,然后生成分詞結(jié)果,接著進(jìn)行詞性標(biāo)注并完成主要分詞步驟。各部分說(shuō)明如下:
——原始字符串:分詞的基本單元,常常是指一個(gè)句子。它在文章中由各種標(biāo)點(diǎn)符號(hào)拆分,得到基本分詞單元;
——原子切分:將原始字符串打散為單個(gè)漢字等不可再拆分的單元;按照上面所提到的漢字為單個(gè)的字,數(shù)值為連續(xù)的數(shù)字,英文為連續(xù)的英文字符,其他的標(biāo)點(diǎn)符號(hào)為單獨(dú)的一個(gè)字符的思路來(lái)實(shí)現(xiàn)的。
——N最短路徑粗切分:是最短路徑和最大路徑的折中,保留前N個(gè)最優(yōu)路徑,獲得最優(yōu)的前N個(gè)切分結(jié)果,既能達(dá)到一個(gè)比較理想的分詞效果,又能保證分詞的速度。
圖7-2 基于CHMM的漢語(yǔ)詞法分析框架
——簡(jiǎn)單未登錄詞識(shí)別:通過(guò)簡(jiǎn)單的人名、地名等未登錄詞的識(shí)別,優(yōu)化粗分結(jié)果,得到修正的前N個(gè)最優(yōu)切分結(jié)果;
——嵌套未登錄詞識(shí)別:通過(guò)復(fù)雜的地名、機(jī)構(gòu)名識(shí)別,再次優(yōu)化N個(gè)粗分的結(jié)果;
——基于詞類的HMM分詞:基于HMM模型,通過(guò)詞類信息,優(yōu)化粗分結(jié)果;
——詞類的HMM標(biāo)注:基于HMM模型,標(biāo)注詞性,得到最終的詞法分析結(jié)果。
7.5.3.2 ICTCLAS分詞實(shí)驗(yàn)
下面我們使用ICTCLAS系統(tǒng)進(jìn)行一個(gè)簡(jiǎn)單的分詞實(shí)驗(yàn),并對(duì)結(jié)果進(jìn)行分析。
(1)安裝相應(yīng)軟件,配置好環(huán)境變量,在網(wǎng)站上獲取ICTCLAS3.0。
在http://www. i3s.ac. cn下載ICTCLAS3.0分詞組件,其中ICTCLAS30.dll就是所需要的動(dòng)態(tài)鏈接庫(kù)文件,將它復(fù)制到新建的eclipse工程項(xiàng)目的根目錄下。將data文件夾也一并復(fù)制到項(xiàng)目根目錄,data文件夾是ICTCLAS的概率數(shù)據(jù)文件,程序?qū)⒗盟鼇?lái)進(jìn)行輔助分詞。在下載的組件中有一個(gè)Licenses文件夾,運(yùn)行里面的exe程序注冊(cè),獲得注冊(cè)碼,然后將Licenses文件夾中的user. lic文件、組件文件夾中的Configure.xml文件一并復(fù)制到工程的根目錄下,同時(shí)將組件包中的/api/JNI下的文件也復(fù)制到工程中。配置好的Eclipse工程的目錄結(jié)構(gòu)如圖7-3所示。
圖7-3 ICTCLAS3的工程目錄
Userdict. txt是用戶的自定義詞典文件,用戶可以在該文件中加入ICTCLAS詞典中沒(méi)有的新詞來(lái)滿足具體的需求。
ICTCLAS是用C/C++編寫的,因而其編譯后是動(dòng)態(tài)鏈接庫(kù)文件,在Java中調(diào)用時(shí)要在靜態(tài)初始化階段加載它。在ICTCLAS的最新3.0版中,提供了JNI調(diào)用的API,但是要注冊(cè)申請(qǐng)后只能試用一個(gè)月,之后如果再需要使用就要購(gòu)買。因此使用ICTCLAS有一定的限制,在分詞實(shí)驗(yàn)方面還可以使用一些其他的分詞組件,如JE分詞組件,IKAnalyzer等組件。
(2)編寫程序利用JNI調(diào)用ICTCLAS對(duì)一段中文文字進(jìn)行切分
ICTCLAS3.0采用詞庫(kù)的方式來(lái)進(jìn)行分詞,每個(gè)被切分出來(lái)的詞都會(huì)被標(biāo)以詞性。示例步驟及程序見(jiàn)參考示例。
(3)參考示例
在eclipse中配置好相關(guān)環(huán)境,其中中科院提供的ICTCLAS30類的代碼如下:
package ICTCLAS. I3S.AC;
import java. io.*;
public class ICTCLAS30{
/* ICTCLAS30.dll中的函數(shù)接口*/
public native boolean ICTCLAS_Init(byte[]sPath);
public native boolean ICTCLAS_Exit();
public native int ICTCLAS_ImportUserDict(byte[]sPath);
public native byte[]ICTCLAS_ParagraphProcess(byte[]sSrc);
public native boolean ICTCLAS_FileProcess(byte[]sSrc-Filename,
byte[]sDestFilename);
public native float ICTCLAS_GetUniProb(byte[]sWord);
public native boolean ICTCLAS_IsWord(byte[]sWord);
public native byte[]nativeProcAPara(byte[]src);
/*靜態(tài)加載ICTCLAS30.dll*/
static{
System. loadLibrary("ICTCLAS30");
}
}
然后再建一個(gè)測(cè)試類TestICTCLAS30. java:
package cn.edu.whu.sim. ictclas3test;
import ICTCLAS. I3S.AC. ICTCLAS30;
public class TestICTCLAS30{
public static void main(String[]args) throws Exception{
/*實(shí)例化一個(gè)ICTCLAS30對(duì)象*/
ICTCLAS30 testICTCLAS30= new ICTCLAS30();
String argu="";
/*如發(fā)現(xiàn)user. lic文件不合法,初始化將失敗,這里需要注冊(cè)獲得使用許可*/
if(testICTCLAS30.ICTCLAS_Init(argu.getBytes("GB2312"))== false){
System.out.println("Init Fail!");
return;
}
System.out.println("Init Success!");
String str="金穗貸記卡網(wǎng)絡(luò)服務(wù)全新升級(jí)改版,點(diǎn)擊查看更多精彩!";
byte nativeBytes[]=
testICTCLAS30. ICTCLAS_ParagraphProcess(str.getBytes("GB2312"));
String nativeStr= new String(nativeBytes,0,nativeBytes. length,"GB2312");
System.out.println("導(dǎo)入用戶詞典前:"+ nativeStr);
String userdict="userdict. txt";
/* ICTCLAS_ImportUserDict方法導(dǎo)入用戶自定義的詞典,返回詞典中詞條的數(shù)目*/
int Count=
testICTCLAS30. ICTCLAS_ ImportUserDict( userdict.getBytes("GB2312"));
System.out.println("用戶詞典詞條數(shù):"+ Count);
nativeBytes=
testICTCLAS30. ICTCLAS_ParagraphProcess(str.getBytes("GB2312"));
nativeStr= new String(nativeBytes,0,nativeBytes. length,"GB2312");
System.out.println("導(dǎo)入用戶詞典后:"+ nativeStr);
}
}
程序的運(yùn)行結(jié)果為:
Init Success!
導(dǎo)入用戶詞典前:金/b穗/b貸/v記/v卡/n網(wǎng)絡(luò)/n服務(wù)/v全新/b升級(jí)/vi改版/vi,/wd點(diǎn)/qt擊/vg查看/v更/d多/a精彩/a!/wt_
用戶詞典詞條數(shù): 3
導(dǎo)入用戶詞典后:金穗/n貸記卡/n網(wǎng)絡(luò)/n服務(wù)/v全新/b升級(jí)/vi改版/vi,/wd點(diǎn)擊/v查看/v更/d多/a精彩/a!/wt_
上述程序?qū)σ欢沃形倪M(jìn)行了切分和詞性標(biāo)注,實(shí)現(xiàn)了中文的分詞。根據(jù)以上步驟,就可以構(gòu)建用戶詞典對(duì)相關(guān)中文文本文件進(jìn)行分詞實(shí)驗(yàn)并查看其效果。
(4)結(jié)果分析
在用ICTCLAS3.0分詞的程序中,在ICTCLAS30類中加載了DLL,然后在Test測(cè)試類中實(shí)例化一個(gè)ICTCLAS30對(duì)象,對(duì)一段中文進(jìn)行分詞。這里分為兩種情況來(lái)分詞,第一種方法就是默認(rèn)使用ICTCLAS自帶的詞典進(jìn)行分詞,結(jié)果顯示像“貸記卡”、“點(diǎn)擊”這樣的詞沒(méi)有當(dāng)作整體切分出來(lái)。第二種方法中加載了一個(gè)自定義的用戶詞典,包含金穗n、點(diǎn)擊v、貸記卡n這3行自定義的詞條和詞性,結(jié)果顯示加載用戶詞典后這些詞被成功切分出來(lái)。
除ICTCLAS的分詞組件外,Java方面還有很多開(kāi)源的分詞組件,但是中科院的ICTCLAS無(wú)疑是中文分詞方面的權(quán)威,它經(jīng)過(guò)不斷的修訂和內(nèi)核升級(jí)在速度和精度上得到了很大的提升,它獨(dú)特的詞性標(biāo)注在一定程度上提高了分詞的準(zhǔn)確率。
免責(zé)聲明:以上內(nèi)容源自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請(qǐng)告知,我們將盡快刪除相關(guān)內(nèi)容。