ngram模型中文語料实验stepbystep.docx

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ngram模型中文語料实验stepbystep

/rocketfan/archive/2011/01/02/1924065.htmlngram模型中文语料实验step by step(1)-分词与统计/rocketfan/archive/2011/01/02/1924065.html/rocketfan/archive/2011/01/02/1924065.htmlngram模型是统计语言的最基本的模型了,这里将给出用中文语料做实验建立ngram模型的个人总结,主要参考sun拼音2.0的代码以及有点意思拼音输入法,会参考。我会尽量逐步完成所有的实验总结。分词与统计对于中文语料和英文不同需要我们先进行分词,当然如果是切分好空格隔开的语料就简单许多。假设是普通的语料,sun拼音的做法是采用正向最大匹配分词,并且去掉可能有歧义的部分,当然这些都是首先依赖于词典。利用词典文本建立一个存储字典中词的索引结构。可以选择hash map,map,trie树等结构,这里选择double array trie作为索引结构。我这里采用的是GBK的编码方式对于每一个字给予一个trie树种的编码,同时对于每一个词典中的词给予一个唯一的int型的编号,我们在后续统计三元组以及建立ngram模型的时候采用都是词的编号而不是词本身,这主要是为了节省空间,方便数据结构写硬盘以及排序,当然用string其实也是可以的。我们的词典中会保证有所有的GBK单字作为词。基于1步骤词典的最大匹配分词,这里为了简单只考虑中文,而英文,标点等等都作为分割符号。为了简单没有采用句子开始符号和结尾符号而是采用统一的分割符号。10表示分隔符号,用9表示歧义。与sun拼音不同的是这里采用直接逐句分词添加到统计模块的做法而不是对于整个文本分词写文件再读文件再统计三元组的做法。这样可以方便处理比如直接从数据库中的用户查询作为语料。统计的时候可以采用map/hash_map+sort的方法(其实就是单机版的map_reduce),保证最后三元组是排好序的从而方便ngram模型的建立。如果语料较大可以考虑利用hadoop统计。关于歧义部分的识别处理,参考 “有点意思拼音输入法”在processSingleFile()中,逐句读取语料库,例如,为人民办实事的精神,然后进行调用SIMDict::matchLongest()进行最长匹配。因为辞典中有“为人民”这个词条,因此分割到的第一个词是“为人民”,其长度为3,然后调用getAmbiLen(),来分析是否有交集歧义,并返回最大交集歧义的长度。下面是每次迭代的情况:人民, 办实事的精神 - i=1, len=2, word_len=3, 对“人民办实事”进行最长匹配,分割到的词为“人民”,其长度为2,民办, 实事的精神 - i=2, len=2, word_len=4, 对“民办实事”进行最长匹配,分割到的词为“民办”,其长度为2,因为i与len的合超过了最初传入的word_len,则设置word_len为4,继续迭代。可以看出,此时歧义已经检测到了。办实事, 的精神 - i=3, len=3, word_len=6实事, 的精神 - i=4, len=2, word_len=6事, 的精神 - i=5, len=1, word_len=6, 最后歧义的长度为6退出循环,返回得到的长度,即6如果指定了ambiguous-id,则会将这6个字符作为一个AMBI-ID(由参数-a指定),输出到分词的结果中。然后跳过这6个字符,继续进行分词。当句子结束时,如果使用二进制格式输出,则会输出一个句子结束的ID(由参数-s指定)。最后得到的结果是:$ echo 为人民办实事的精神 | ./mmseg -d ../raw/dict.utf8 -f text -s 10 -a 9ambi为人民办实事/ambi?的 精神那么,我们最终得到的分词结果中,所有的交集歧义都作为作为一个词AMBI-ID,相当于我们忽略了这部分信息(这个比例并不低)。这样在我们后面的统计中,绝大部分的3元组都可以保证是有意义和有价值的。进而训练得到的统计语言模型,能够排除交集歧义的影响。然后,可以这个模型,使用slmseg,重新对语料库进行分词,并计算新的语言模型。这一次,原来忽略的带有歧义的信息,我们也加以利用。实验结果。测试文本小明读了一本书。小红读了一本书。美丽的心灵,美丽的世界,美丽的心灵最 伟大 的 足球 运动员 !为人民办实事的精神分词结果 (注意结果和字典有很大关系:)不考虑去除歧义的最大匹配切分:(10) 小明(95986) 读(696) 了(1740) 一(3322) 本书(10966) 。(10) 小红(95813) 读(696) 了(1740) 一(3322) 本书(10966) 。(10)?(10) 美丽(61

您可能关注的文档

文档评论(0)

fv45ffsjjI + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档