= 基于统计语言模型的蒙古文词切分 = '''作者''': [[侯宏旭]]^1,2,3^ [[刘群]]^1^ [[那顺乌日图]]^2^ [[牧仁高娃]]^2^ [[李锦涛]]^1^ '''单位''':(1[[中国科学院计算技术研究所]]智能信息处理重点实验室 [[北京]] 100190; 2[[内蒙古大学计算机学院]] [[内蒙古]][[呼和浩特]]010021; 3[[中国科学院研究生院]] [[北京]] 100190) '''摘要''':通过对[[蒙古文]][[词切分]]技术的分析,里用[[规则]]作为切分的基础, 提出了一种[[统计]]和规则相结合的蒙古文词切分的方法,这种方法利用了蒙古语[[统计语言模型]]作为[[排歧]]依据。使用的语言模型有基于[[词性]]的语言模型和SKIP-N语言模型。其词切分[[准确率]]比基于规则的系统有了较大的提高。 '''关键词''':[[蒙古语]]; [[词切分]]; [[语言模型]]; [[词干]][[词缀]] '''中图分类号''':TP391 == 1 引言 == 蒙古语属于[[黏着型语言]]。蒙古语的[[构词]]、[[构形]]都是通过在[[词干]]后面缀接不同的[[词尾]]来实现的。而且还可以不断缀接,因此蒙古语[[词法形态]]变化丰富而且复杂[1,2]。 在基于[[语料库]]的[[机器翻译]]系统中,我们需要将原始的语料库切分成具有词干词缀信息以及词性信息的语料库[3]。 蒙古语[[词类]]包含“[[无词形变化的词]]”和“[[有词形变化的词]]”。其中有[[词形]]变化的词又可以分为“[[体词]]”和“[[动词]]”,体词包含[[名词]]、[[形容词]]、[[代词]]、[[数词]]等。体词主要有[[数]]、[[格]]、[[领属]]、[[级]]等范畴,而动词关系到[[时]]、[[态]]、及[[形动词]]、[[副动词]]等变化形式[4]。 {{attachment:figure1.png}} 蒙古语构形的附加成分承载着大量的[[语法]]信息,如果把蒙古语词只作为一个整体来处理,就损失了大量的语法、[[语义]]信息[5-7]。而且由于收录词的形态变化而派生的新词,蒙古语[[词典]]的规模也会变得非常大。例如,在词典中,如果要列出“IR_E”(后面都采用[[拉丁转写]]表示蒙古文词)的所有形式,那可能要列出几百种变化,而且即使如此也不一定能穷举出所有的变化。因此,在传统的[[语言学词典]]中只收录一个条目,即“IREHU”这个[[原始现在形动词形式]]。如果没有好的蒙古语词切分工具,这样的词典在机器翻译中恐怕没有任何用处。因此,如果我们把蒙古语词切分成词干、词缀,并且在每一个构成成分后面[[标注]]其属性,那么词典中只需要有“IR_E”这个词干,系统就可以得到所有以它为词干的词的含义了。 蒙古语词切分在某些方面和汉文的[[分词]]有些相像,但是也具有其特点[8]。我们利用[[规则]]作为切分的基础可以大大简化词切分的复杂度。 == 2 基于规则和词典的词切分 == 对蒙古文词切分研究得不多,目前比较有成效的方法是基于规则和词典相结合的方法[1,2]。 === 2.1 词典方法 === 在基本的词切分系统中,我们通过查词典的方式查到一个词是由哪些词干和词缀构成的,这种方法就是基于词典的词切分方法。 表1 词切分词典的片段 ||词||切分1||切分2|| ||YAGAHIGSAN||YAGAHI/Vt+GSAN/Ft11||YAGAHIGSAN/Db|| ||SAYIHAN||SAYIHAN/Ac|||| ||NER_E||NER_E/Nt||NERE/Ve1|| ||BVI||BVI/Sb||BVI/Ve2|| ||SARAGVL||SARAGVL/Ac|||| ||NVTVG-TV||NVTVG/Nt-TV/Fc21|||| 在基于词典的词切分中,词典中列出了所有可能的词切分方案。所以词典的词切分可以达到非常高的准确率。但是,词典也有缺点。 1)词典方法不能穷举所有词的所有变化形式 词典方法只能给出常用词的切分形式。如果要列出所有的词的话,词典将会非常庞大,所需要的人力物力也是不能支持的。 2)词典方法仍然存在[[二义性]] 从上表的例子里面我们可以看到,还是有很多都具有两种或者以上的切分方法。这样的切分方法还需要其它方法进行[[排歧]]。 === 2.2 基于规则的方法 === 由于基于词典的方法对于[[未登录词]]的处理无能为力,因此我们希望通过另外的方法解决这一问题。 事实上,词的切分还是有规律可循的。例如,假设我们不知道“0CIBA”的切分方法,但是我们知道词缀中有“BA”,这样我们就可以猜测“0CIBA”是否可以切分成“0CI”+“BA”。这样我们就可以建立这样的规则: **BA=>* +BA 这样的情况确实存在,因此我们可以通过[[查询]]词缀表,找到所有可能的词缀,进行切分。 但是,实际情况并没有这么简单,把词切分成词干、词缀的时候会发生词形的变化。例如,前面提到的“来 IREGSEN”在切分成词干/词缀形式的时候变成了“IR_E +GSEN”,即前面的部分发生了变化。 因此我们对前面的规则形式进行修改,例如: **EGSEN=> *_E +GSEN 这样的话就可以在完成词切分的同时还原了词干的词性。这样,我们编写了400多条词切分规则。这些规则是在[1,9]文中提到的规则基础上修改得到的。 利用这些规则,我们可以用它生成所有可能的切分。但是这些切分并不一定都是合法的。 基于规则的切分同样存在两个问题: 1)切分的错误 并不是所有符合规则的切分都是合乎蒙古语构形法的,例如“0CIBA”可以切分成“0CI/Ve +BA/Fs14”或“0CI/Ne +BA/Fs14”(斜线后面的是词干或词缀的[[词性标记]])。其中,+BA/Fs14是一个动词后缀,只能跟在动词后面。也就是说,虽然0CI既可能是动词(Ve)也可能是名词(Ne),但是在这里,只能切分成“0CI/Ve +BA/Fs14”。 那么,如何解决这个问题呢? 一种方法是通过建立新的规则,来去除这样的问题。例如建立一个词性限定规则 **BA=〉*/V+BA/Fs14 这里我们可以看到由于限定条件“*/V”决定,这样的切分后,词干部分必须是动词(V)。 2)切分的二义性 并不是因为采用了规则以后就可以完全排除二义性。在规则库中,我们可以看到这样两条规则: @@ *VHAN|*UHEN → *VV|*UU/!+HAN|HEN/Fa1 @@ *HAN|*HEN → *N/!+HAN|HEN/Fa1 这里可能会出现两个规则都适用的问题。 解决方案是采用最大匹配,这样,我们每次只匹配长度最大的那个规则。即如果后缀是“VHAN”的时候,我们只匹配第一条规则,而放弃第二条。 但是这样还是不能完全解决问题。在实际应用中,我们发现,事实上同一个词还是可能存在两个以上合法的切分结果。例如,YAGAHIGSAN既可能是动词“YAGAHI/Vt+GSAN/Ft11”,也可能是副词“YAGAHIGSAN/Db”。 我们需要添加规则来去除这样的二义性,但是由于这样将是依赖于上下文的,我们就需要建立更复杂的上下文模型因此,和基于词典的词切分模型一样,我们需要一些其它的手段去排除这样的歧义。 === 2.3 基于词典和基于规则方法的缺点 === 综合前面对基于词典和基于规则方法的分析我们可以看到,无论是哪种方法,都存在以下共同的问题: 1)无法涵盖所有的切分情况 2)对[[歧义]]的情况很难处理 在[1,7]中提到,在一个1870个词的测试语料上的测试结果是[[准确率]]大约86%,而且这些词中仅有0.02%是未登录词。可以想象,如果对随机篇章中的内容进行切分,准确率还会降低。 == 3 基于统计语言模型的词切分 == 由于无论使用哪种方法,我们都需要采用进一步的手段来修正切分的结果。在这里我们将使用[[统计语言模型]][10]。 统计语言模型中最常用的模型是[[n元语法]],我们这里也使用n元语法及其改进形式来进行蒙古语的切分。 === 3.1 蒙古语语言模型 === 通过对蒙古语言模型构建方法的研究,我们发现,可以从以下三个层面构建不同的语言模型: 1)[[词]]的语言模型 语言模型的训练以词的基础,其基本单位是词。 2)[[词干]]/[[词缀]]的语言模型 语言模型训练的基础是词干和词缀。利用这样的方法建立的语言模型可以反映词干词缀的关系。 3)基于[[字母]]的语言模型 在字母级别上建立的语言模型。这样的模型可以用作[[文字识别]]上的校对。 从这里我们可以看到,如果要在词切分中利用语言模型,我们需要在词干词缀上建立语言模型。 但是,事实上,单纯使用n元语言模型有一个缺点是仅能表达相邻n个词(实际上,在基于蒙古文词干、词缀的模型上是更小的词干、词缀)的依赖关系,对于更长距离的依赖无法表示,因此,我们在此基础上又增加了两种语言模型。 其中一个是SKIP-N模型[3]。SKIP-N模型是利用相隔n个单词的依赖关系训练得到的。另一个就是[[词性]]的语言模型。 === 3.2 SKIP-N语言模型 === 通常使用的n元语言模型在表达长距离的依赖关系的时候存在明显的不足。尤其是,当蒙古文词被切分成若干片段后,这样的长距离依赖更加明显。因此,我们提出了一种SKIP-N语言模型[11],用于描述这种更长距离的依赖关系。 SKIP-N语言模型实际上是[[二元语言模型]]的一种变化形式,其引入了距离变量k,用于描述相距k个词的长距离依赖关系。由于随着k的增大,SKIP-N语言模型的计算量增加很快,在实验中,我们设定k为9。该语言模型采用了[[Katz平滑]]技术[12]进行[[平滑]]。 经过实验我们可以看到,针对蒙古文的词切分问题,SKIP-N语言模型是非常有效的。 === 3.3 基于词性的语言模型 === 事实上,我们发现除了词语上的关联关系外,蒙古语的词在进行切分以后还存在词性上的关联关系。正如前面的例子中看到的“0CIBA”为什么只能切分成“0CI/Ve +BA/Fs14”是因为“Fs14”是一个动词的后缀,只能跟在动词词干后面。也就是说,“Ve”词性和“Fs14”词性有一定的关联关系。 因此,我们提取出[[训练语料]]中的词性信息,在其上训练了一个词性的语言模型。词性语言模型的训练语料是从全部训练语料中去掉词,只保留词性得到的。利用这个训练出[[三元语言模型]]。 通过一些初步的实验,我们采用了两种不同的词性语言模型,一个是严格的词性模型,另一个是忽略词干二级词性的模糊词性模型: * 严格的词性模型 Rb Sf Rb Zx Fc21 Nn Fc11 Nt * 模糊的词性模型 Rb Sf Rb Zx Fc21 N Fc11 N 实验中的模糊的词性模型去掉了了名词(N)、动词(V)这些词干词性的二级词性。经过试验,我们发现,采用模糊的词性模型得到的切分效果要更好,因此,后面的试验数据中给出的词性模型就是以模糊的词性模型建立的。 === 3.4 词切分算法 === 基于语言模型的词切分算法的核心是语言模型。工作可以分成两个部分,一个是生成所有可能的切分,第二是评价生成的结果,选出最终的分词结果。 我们的方法是通过切分规则表来生成所有可能的切分。需要注意的是,这里的规则和前面提到的基于规则的词切分方法中的规则不同。这里的规则要求要比基于规则的方法更宽泛,也就是说,我们不必去关心切分后的结果是否正确,我们只需要给出所有的可能性就可以了。具体的哪些正确、哪些不正确由语言模型确定。从复杂度上来看是用规则作为切分依据的方法能够生成的切分情况最少,复杂度最低。有了候选的词切分结果以后,我们就可以利用语言模型来评价了。 这里的三个语言模型分别为: *P1:基于词干/词缀的n元语言模型; *P2:基于词干/词缀的SKIP-N语言模型; *P3:词性的语言模型。 这里,有三个权值。权值可以通过最小错误率训练[13]得到。 == 4 实验结果 == 由于基础数据的不足,我们实验中制作了一个3万8千句的蒙古语[[单语语料]],约含33万蒙古语词。 ||原始语料:|| ||AI ! TERE NIGENTE NIGE VDAG_A SILGALTA-DV HIRI TENGCEGSEN UGEI B0LJAI , BI TEGUN-DU SEREMJI OGBEL SAYIN .|| ||TEDE B0L MINU SAYIN NAYIJI MON , TEGUSUGSEN-U DARAG_A BI MON TEDEN-TEI HARILCAJV BAYIBAL SAYIN .|| ||NAYIJI-YIN GER-TU NIGE H0N0N_A .|| ||切分后的语料:|| ||AI/Is ! TERE/Rj NIGENTE/Dc NIGE/Mu VDAG_A/Qn SILGALTA -DV/Fc21 HIRI/Ne TENGCE/Ve +GSEN/Ft11 UGEI/Ve B0L/Ve +JAI/Fs11 , BI/Rb TEGUN -DU/Fc21 SEREMJI/Ne OG/Vt +BEL/Fn71 SAYIN/Ac .|| ||TEDE/Rb B0L/Ve MI/Nt +N/Fn3 +U/Zv2 SAYIN/Ac NAYIJI/Nt MON/Sb , TEGUSUGSEN -U/Fc11 DARAG_A/Oa BI/Rb MON/Sb TEDEN -TEI/Fc61 HARILCA/Ve +JV/Fn1 BA/Cw +YI/Fc32 +BAL/Fn71 SAYIN/Ac .|| 图1 训练语料的例子 我们另外选择了500个蒙古文[[句子]]作为[[测试集]],并人工编写了这些句子的[[参考答案]]。每个句子有一个参考答案。 ||测试集:|| ||NAYIJI-YIN J0BALANG-IYAN T0GACIHV-YI S0N0SBA .|| ||NAYIJI-YIN-IYAN SANAG_A SEDHIL-I 0YILAGABA .|| ||NAYIJI-DV NIGVCA-BAN HELEJU OGBE .|| ||NIGE NIGVCA-YI ILECILEN_E .|| ||参考答案:|| ||NAYIJI -YIN/Fc11 J0BALANG -IYAN/Fx11 T0GACIHV -YI/Fc31 S0N0S/Vt +BA/Fs14 .|| ||NAYIJI -YIN -IYAN/Fx11 SANAG_A/Ne SEDHIL -I/Fc31 0YILA/Vt +G/Fb31 +A/Zv1 +BA/Fs14 .|| ||NAYIJI -DV/Fc21 NIGVCA -BAN/Fx11 HELE/Nt +JU/Fn1 OG/Vt +BE/Fs14 .|| ||NIGE/Mu NIGVCA -YI/Fc31 ILECILE/Vt +N_E/Fs21 .|| 图2 词切分的测试集和参考答案 评价方法采用[[准确率]]和[[召回率]]以及[[F1值]]。其定义为: 准确率: <> 召回率: <> F1值: <> 其中<>为正确切分的单元个数,<>为切分出的单元个数,<>为参考答案中切分出的单元个数。切分的单元为词干或词缀。 以下是使用不同方法的实验结果: 表2 蒙古语词切分实验结果 || ||准确率||召回率||F1值|| ||参考系统||0.86|||||| ||(1)仅规则||0.525||0.666||0.587|| ||(2)规则+三元语言模型||0.878||0.852||0.865|| ||(3)规则+三元语言模型+严格词性的语言模型||0.902||0.851||0.876|| ||(4)规则+三元语言模型+模糊词性语言模型||0.914||0.865||0.889|| ||(5)规则+三元语言模型+模糊词性语言模型+SKIP-N语言模型||0.939||0.867||0.902|| 实验结果中的参考系统是[9]给出的一个基于规则和词典的系统,由于文中并未给出召回率的数值,我们只能比较准确率。需要说明的是,由于我们无法得到[9]的测试环境,因此两者的测试环境有一定的差别,数值比较只能作为参考。 实验中我们首先采用了规则进行粗切分,采用的规则是在原规则系统上的400多条规则中添加了几条不确定的切分规则。原来的规则要求切分必须是正确的,而新加的规则不保证切分得到的结果一定正确,只是给出所有的可能性,其中可能有正确的切分结果,而排歧通过语言模型进行。 ||@@ *AYI& → *AI/!+&/!|| ||@@ *EYI& → *EI/!+&/!|| ||@@ *0YI& → *0I/!+&/!|| ||@@ *VYI& → *VI/!+&/!|| ||@@ TVNGG* → TVN/V+G*/*|| ||@@ *L0→*L/*+0/Zv2|| 图3 部分切分规则 三元语言模型采用了SRI开发的[[SRILM]]语言模型工具包。我们在训练语料上训练了三元语言模型,采用了modified Kneser-Ney[[平滑]]算法。 词性语言模型是从训练语料中提取词性信息,形成词性文件,然后再用SRILM训练出一个词性层面的三元语言模型。 SKIP-N语言模型采用我们自行编写的语言模型的训练程序。 第三、四、五个系统分别是加上不同的语言模型后得到的结果。第三个系统和第四个系统分别采用了严格词性的语言模型和模糊词性的语言模型,从结果来看模糊词性的语言模型效果要更好一些。从实验结果我们可以看到,利用语言模型可以得到较满意的词切分结果。 == 5 结论 == 虽然我们的词切分结果达到了94%的准确率,但是,这对于一个词切分系统来说还不够。我们还需要其它的手段提高准确率。这主要通过增加训练集的规模来进行。目前采用的训练集的大小只有38000句,仍然属于比较小的,我们会在今后不断扩大语料库。另一个是我们希望通过结合统计方法和词典来提高准确率,目前,我们并没有利用词典信息。今后我们将会在方法上研究其它统计方法,例如利用[[条件随机场]]等模型进一步改进算法,提高准确率。另一方面,考虑到蒙古语的独特特点,我们希望能够通过研究更好的蒙古语语言模型架构来改进蒙古语语言模型的计算,并以此提高蒙古文词切分的准确率。 == 参考文献 == [1] [[那顺乌日图]],蒙古文词根、词干、词尾自动切分系统,[[内蒙古大学学报(人文社会科学版)]],1997年第2期, 53-57 [2] [[华沙宝]], 对蒙古文语料库的词类标注系统——AYIMAG, [[内蒙古大学学报(人文社会科学版)]], 1999年05期, 33-37 [3] [[侯宏旭]]等,2005年度863机器翻译评测方法研究与实施,[[中文信息学报]],2006, 20(z1):7-18 [4] [[巴达玛敖德斯尔]], 面向信息处理的蒙古语词语分类体系研究, [[中央民族大学学报(哲学社会科学版)]], 2004年03期, 94-100 [5] [[那顺乌日图]], 关于面向信息处理的蒙古语语义研究, [[内蒙古大学学报(人文社会科学版)]], 2002年05期, 44-49 [6] [[华沙宝]], 蒙古文网络信息技术处理的对策, [[民族语文]], 2002年06期, 60-62 [7] [[侯宏旭|Hou Hongxu]], et al. An EBMT System Based on Word Alignment, Proceeding of [[International Workshop of Spoken Language Translation]], 2004, 47-49. [8] [[张华平|Zhang Huaping]], [[俞宏逵|YU Hongkui]], [[熊德意|Xiong Deyi]], [[刘群|Liu Qun]], HHMM-based Chinese Lexical Analyzer ICTCLAS, Second [[SIGHAN workshop]] affiliated with 41th [[ACL]], [[札幌|Sapporo]] [[日本|Japan]], July, 2003, 184-187. [9] [[叶嘉明]],基于规则的蒙古语词法分析研究与实现,[[硕士论文]],[[北京大学]],2005. [10] [[刘群]],[[詹卫东]],[[常宝宝]],[[刘颖]],一个汉英机器翻译系统的计算模型与语言模型,第三届[[全国智能接口与智能应用学术会议]],[[吴泉源]],[[钱跃良]]主编,[[智能计算机接口与应用进展]],[[电子工业出版社]],1997.8, 253-258. [11] [[侯宏旭]],[[刘群]],[[刘志文]]. Skip-N蒙古文统计语言模型[J]. [[内蒙古大学学报(自然科学版)]],2008,39 (2): 220-224. [12] [[Katz S M]]. Estimation of probabilities from sparse data for the language model component of a speech recognizer. [[IEEE Transactions]] on ASSP, 1987, 35(3):400-401 [13] [[Och F]], Minimum Error Rate Training in Statistical Machine Translation, Proc. of the 41st [[Annual Meeting of the Association for Computational Linguistics of the ACL]], [[日本|Japan]], [[札幌|Sapporo]], July 2003, 160-167.