喬長兵
(江蘇省郵電規劃設計院有限責任公司,南京210006)
在中文信息處理中進行一些相關的研究,比如信息抽取,指代消解等,首要進行的工作就是分詞。而分詞過程又是非常耗時的,執行時間過長導致效率低下。
利用條件隨機場(Conditional Random Field:CRF)[1]模型來進行分詞處理是最近研究的熱點。它沒有馬爾可夫模型那樣嚴格的獨立假設,同時克服了最大熵馬爾可夫模型的標記偏置的缺點;但卻存在訓練速度比較慢的缺點。
為了更加方便的進行分詞研究和自然語言處理,提高分詞處理的執行效率,作者將工作流引入到具體的分詞處理中,設計實現了基于CRF模型的分詞工作流。通過將分詞流程分解成若干個執行過程,并將這些執行過程包裝成網格服務,最終將服務部署到網格中的資源節點上。
條件隨機場是一種條件概率模型,它定義了整個標簽序列的聯合概率,而不是為每一個狀態都規定一個概率分布,各狀態是非獨立的,彼此之間可以交互,因此可以更好的模擬現實世界的數據。
為了便于構建CRF模型,首先必須使用一個標準化過程,將原始語料轉換成標準的形式。這里使用的標準語料形式規定語料庫中每行只包含一個字,與這個字相關的信息用制表符間隔依次標在字的后面。其次再進行特征提取,使之生成CRF模型工具所能識別的訓練語料和測試語料,其格式為:每行包括一個字以及與字相關的一些特征和標記,字與特征之間、特征與特征之間與特征與標記之間都用制表符間隔開。然后對訓練語料進行訓練,訓練生成一個CRF模型,其訓練過程中加入了一些如迭代次數等的訓練參數。利用訓練所生成的CRF模型,對測試語料進行測試,獲得一個預測結果。
根據上面的分析,可以得出基于CRF模型的分詞處理流程圖。如圖1所示。分詞處理大約由四個步驟組成,每個步驟具體描述如下:

預處理主要負責的工作有:將原始語料文本的編碼方式統一轉換成GBK編碼;加入特征并使之生成特定格式的文本文件,作為整個處理流程的中間文件;然后標準化該中間文件,使得CRF模型識別,即生成Train.tagged作為訓練語料,Test.tagged作為測試語料。
訓練模型:即CRF模型,它接收預處理生成的訓練語料文件Train.tagged文件以及系統的參數文件option.txt。Train.tagged文件的大小一般有幾十到幾百兆,造成執行時間特別長,一般需要幾個小時的時間,效率非常低,option.txt參數文件為CRF模型提供相關的參數信息,用來決定迭代次數,迭代次數越多,執行時間也越長。訓練之后會生成相應的Model文件。
測試模型:它接收測試文件Test.tagged、系統參數文件option.txt和訓練模型生成的Model文件。處理之后生成相應的初步分詞結果。
后處理:它負責將經過CRF模型處理的初步分詞結果進行篩選,篩選的過程就是根據自己定義的特征將一些明顯不符合特征的分詞結果去除,使分詞結果更加合理。經過后處理過程,將獲得最終的分詞結果。
借助參考文獻[2]提出的一種可擴展的網格服務工作流語言——GSWL(Grid Service Workflow Language),描述CRF分詞工作流,借助強大的標簽功能來描述各成員服務之間的數據依賴關系和控制依賴關系。具體的描述文檔片段如下所示。
<!--定義工作流的名字-->
<definitions name="GSWLforSegWord"scope="session">
<!--列出工作流的服務提供者列表 -->
<serviceProvider name="PreTxt"type="PreService"/>
<serviceProvider name="CRFTrain"type="CRFTrainService"/>
<serviceProvider name="CRF"type="CRFService"/>
<serviceProvider name="Opt"type="OptService"/>
<!--列出工作流中包含的活動 -->
……
<!--數據流模型 -->
<dataModel dataInTo="OutputDataA"dataOut-From="OutputDataD">
……
</dataModel>
……
一方面,訓練模型中用到的算法時間復雜度高,隨著迭代次數和特征數目的增加,執行時間也相應增加;另一方面,訓練模型需要處理幾百兆的數據信息,執行時間將變得十分漫長。同樣的,測試模塊和后處理模塊都需要處理大型的數據文件。
數據流模型中 <dataLink label=”link1”>和<dataLink label=”link2”>的Self_Sched屬性設定為true。因此,在調度執行 CRFTrainServie服務和CRFService服務時要執行GSPSS算法,將大的文本文件分解成若干個小的文本文件,并協調網格中所有可用的功能相同的服務資源來并行執行。
根據上面的分析,將分詞處理過程描述成一個網格服務工作流應用。CRF分詞工作流的設計如圖2所示。

圖2 分詞工作流設計圖
其中,PreService服務對應于流程中的預處理過程,CRFTrainServie服務對應于訓練模型,CRFSer-vice服務則對應測試模型,獲得基于CRF模型的粗分詞結果;OptService服務對應流程中的后處理過程,對前面獲取的分詞結果進行一定的篩選和優化,獲得最終的分詞結果。
在具體實現服務的過程中,使用的開發工具是Magic C++.NET+Eclipse+GT4軟件開發包。算法實現使用C++作為編程語言,服務封裝使用Java編程語言。集成開發環境Magic C++.NET支持遠程基于Unix/Linux/BSD服務器的開發以及本地基于Windows的開發,通過它就可以獲得Linux和Windows下的可執行命令或程序;借助Eclipse+GT4軟件包將命令和程序封裝成網格服務,并最終利用GT4提供的命令將網格服務部署在各個網格節點上。下面以PreService服務為例來說明具體的實現過程。
在Magic C++.NET中,新建工程Preprocess,建立Preprocess.cpp文件,給出該文件的代碼片段,如下所示:
……
//特征化文本
void replace(char*r,char*w)
{
……
}
//轉換成GBK字符編碼
void convert(char*r,char*w)
{
……
}
fclose(rf);
fclose(wf);
}
……
void main()
{
……
}
代碼片段給出了函數convert(char*r,char*w)和函數replace(char*r,char*w)實現的部分代碼,前者用來將原始語料文本的編碼方式統一轉換成GBK編碼,后者用來標準化加入特征后的中間文件。
為了使程序既能在Linux上執行,又能在Windows上執行,通過Magic C++.NET可以很方便的在Linux上生成可執行的 shell命令:../usr/seg/Preprocess,在 Windows 平臺上生成 Preprocess.exe作為可執行文件。
算法實現之后,下一步就是利用Java和GT4提供的API來封裝成網格服務PreService。在Eclipse新建一個GT4工程PreService,實現的關鍵代碼如下所示。
package org.zhhz.gt4.example.impl;
……
import org.globus.wsrf.ResourcePropertySet;
importorg.globus.wsrf.impl.SimpleResourcePropertySet;
……
public class PreService implements Resource,ResourceProperties{
……
/* Constructor.Initializes RPs*/
public PreService()throws RemoteException{
this.propSet=new SimpleResourcePropertySet
(PreServiceQNames.RESOURCE_PROPERTIES);
……
}
……
//判斷操作系統的類別
private boolean checkosversion(){
……
}
//進行預處理
public TxtnameResponse preservice(Txtname tname){
}
return null;
}
……
}
實驗搭建的網格環境為:1個主機作為調度節點,12個性能不同的主機作為資源節點,并且每個節點上都部署了PreService服務、CRFTrainServie服務、CRFService服務和OptSevice服務。其中8個資源節點的性能列表見表1,其他4個節點的操作系統是Linux,CPU 頻率為3.0GHz,內存大小是512兆。
分詞處理采用的語料有兩個,一個是PKU訓練語料和測試語料,該語料來自北京大學語料庫,其規模為110萬詞,編碼方式采用國標碼,語料庫內容主要來源于報紙新聞,其語料格式由被空格標記的詞組成的句子段落構成。另一個語料是SIGHAN的MSRA語料,該語料同樣采用國標碼編碼,且語料格式跟PKU一樣,但語料庫相對大一些。因為分詞處理執行效率比較低,在實驗過程中通常利用高性能的集群環境來處理。
為了證明調度模型的有效性和實用性。作者對分詞處理程序在集群環境中的運行時間與分詞處理工作流在網格中的執行時間進行了比較分析,如圖3所示。

表1 資源節點性能表

圖3 分詞處理程序執行時間與分詞工作流執行時間比較圖
從圖3可以看出,分詞處理程序處理MSRA語料的執行時間略高于處理PKU語料的時間。分詞處理程序的執行時間比分詞工作流的執行時間高很多,工作流的引入,大大提高了分詞應用的執行效率;另一方面執行時間并沒有因為多個節點并行執行而成倍的縮短。
通過結合分詞的應用,作者針對基于條件隨機場分詞程序訓練速度比較慢的缺點,通過在分詞處理應用中引入工作流機制,提出了基于條件隨機場的分詞工作模型。最后實驗結果表明,該模型能有效地提高分詞處理的執行效率,分詞工作流的執行時間遠低于分詞處理程序的執行時間。
[1]Lafferty J,McCallum A,Pereira F.Conditional random fields:probabilistic models for segmenting and labeling sequence data[A].Processing of the International Conference on Machine Learning(ICML -2001)[C].Williams MA,2001:282 -289.
[2]郭文彩.面向服務的網格工作流關鍵技術研究[D].北京:北京科技大學,2005.
[3]XueNW.Chinese word segmentation as character tagging[J].Computational Linguistics and Chinese Language Processing,2003,8(1):29 -48.
[4]John Lafferty,Andrew McCallum,Fernando Pereira.Conditional random fields:Probabilistic models for segmenting and labeling sequence data[C].Proc of ICML,2001:282-289.