放牧代码和思想
专注自然语言处理、机器学习算法
    Why join the Navy if you can be a pirate?

Bigram分词中的等效词串

目录

Bigram语言模型中,分析的是连续两个词的组合概率。问题来了,“1人”和“2人”该怎么操作呢?这两个句子会被当成两种组合“1@人”和“2@人”,如果分别统计共现频次,会导致一个严重的问题,那就是对数词限定太死了,只在1人和2人的情况下能够统计到正确的频次,其他数词完全找不到共现词串,最后只能靠平滑处理来凑合一个频次。现实生活中“1000人”“一千人”这样的词组使用得还是相当频繁的,这会对分词器造成严重的影响。

测试用例

测试用例很简单,就拿“1人”举个例子。

民间分词器的缺陷

在一些民间分词器中,我并没有看到类似的处理,如ansj,在计算“1”到“人”的共现频次的时候,ansj只是机械地将两个词送到词典里去找,得出共现频次为0的答案。(当然,ansj中后续会有一个词性转换频率可以弥补这个错误,这是后话了)

类似的情况还会发送在地名、人名、时间等词语上,需要动脑筋解决它。

ICTCLAS的“预编译”过程

ICTCLAS中有一个预处理过程,就是为数词等生成一个等效词串,比如“1000”->“未##数”,然后统计共现频次以及计算转换概率,在找到最佳路径之后将其还原为原来的词。比如这里的1就被“编译为”未##数,查词典的时候需要查询的是“未##数@人”:

这样查出来的频次就不是0了,提高了分词的精确度。

字典中的“预编译字串”

事实上字典中有相当数量的预编译字串,就连ansj抄过来的字典中也有不少:

[未##地, 始##始, 未##它, 未##团, 未##数, 未##专, 未##时, 未##串, 末##末, 未##人]

ICTCLAS中也有不少:

HanLP自然语言处理工具包

本文代码已集成到HanLP中开源,下载地址:https://github.com/hankcs/HanLP

支持中文分词(N-最短路分词、CRF分词、索引分词、用户自定义词典、词性标注),命名实体识别(中国人名、音译人名、日本人名、地名、实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本推荐,依存句法分析(基于神经网络的高性能依存句法分析器、MaxEnt依存句法分析、CRF依存句法分析)。提供Lucene插件,兼容Lucene4.x。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » Bigram分词中的等效词串

分享到:更多 ()

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机