正在加载
请稍等

菜单

Home 码农菜园 算法编程 中文分词一些思路的总结
Home 码农菜园 算法编程 中文分词一些思路的总结

中文分词一些思路的总结

算法编程 by   阅读量 6,473

中文分词是中文自然语言处理的第一步,也是最为核心的基础,分词的好坏和准确率直接影响到后续进行的其他处理和分析。常用的中文分词工具包括jieba分词哈工大分词Stanford分词等,但是除了会使用这些工具外,掌握相关的模型和思想更为重要。

1 mmseg

每次从一个完整的句子里,按照从左向右的顺序,识别出多种不同的3个词组合,然后根据下面的4条消歧规则,确定最佳的备选词组合。

  • 备选词组合的长度之和最大;
  • 备选词组合的平均词长最大;
  • 备选词组合的词长变化最小;
  • 备选词组合中,单字词的出现频率统计值最高。

选择备选词组合中的第1个词,作为1次迭代的分词结果,剩余的2个词继续进行下一轮的分词运算。

采用这种办法的好处是,为传统的前向最大匹配算法加入了上下文信息,解决了其每次选词只考虑词本身,而忽视上下文相关词的问题。

2 基于字符串匹配

即扫描字符串,如果发现字符串的子串和词库中的词相同,即算作匹配。这类方法通常会加入一些启发式规则,例如正向/反向最大匹配、长词优先、总词数最少等策略,优点是速度快、实现简单、效果尚可,缺点是对歧义和未登录词处理不好。

2.1 标准Trie树

在Trie树中,每个节点代表单个字符,子节点表示在父节点之后可能出现的字符,例如“电”节点可能包括“灯”、“线”、“路”、“话”等子节点,所以Trie树构建的其实就是所有词语的一个字典。

所有的中文单词用反向方式存储需要55893个节点,用正向方式存储需要55109个节点,词尾用词比较分散,词首用词比较集中。词的尾字意义更专一,因此反向方式具有更好的消歧效果。

2.2 三叉Trie树

三叉Trie树是二叉搜索树和Trie树的结合,详情请阅读这个:Trie树和Ternary Search树的学习总结

3 基于概率统计以及机器学习

这类分词基于人工标注的词性和统计特征,对中文进行建模和训练。在分词时通过模型计算各种分词出现的概率,将概率最大的分词结果作为最终结果,常见的序列标注模型有N-gramHMMCRF。这类分词算法能较好地处理歧义和未登录词问题,但是需要大量人工标注数据并且分词速度较慢。

4 jieba分词

jieba分词的思路如下,即扫描全部可能的成词分支,并根据统计概率选择最大者。

  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG);
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合;
  • 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法(基于动态规划的思想计算HMM模型的最优解)。

参考

21 2016-07

2条评论

  1. 匿名说道:

    “掌握相关的模型和思想”—— 能有值得推荐的教科书就更好啦

发表评论