有哪些比较好的中文分词方案?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有哪些比较好的中文分词方案?相关的知识,希望对你有一定的参考价值。

中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块。不同于英文的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词,分词效果将直接影响词性、句法树等模块的效果。当然分词只是一个工具,场景不同,要求也不同。在人机自然语言交互中,成熟的中文分词算法能够达到更好的自然语言处理效果,帮助计算机理解复杂的中文语言。竹间智能在构建中文自然语言对话系统时,结合语言学不断优化,训练出了一套具有较好分词效果的算法模型,为机器更好地理解中文自然语言奠定了基础。在此,对于中文分词方案、当前分词器存在的问题,以及中文分词需要考虑的因素及相关资源,竹间智能自然语言与深度学习小组做了些整理和总结。中文分词根据实现原理和特点,主要分为以下2个类别:

1、基于词典分词算法也称字符串匹配分词算法。该算法是按照一定的策略将待匹配的字符串和一个已建立好的“充分大的”词典中的词进行匹配,若找到某个词条,则说明匹配成功,识别了该词。常见的基于词典的分词算法分为以下几种:正向最大匹配法、逆向最大匹配法和双向匹配分词法等。基于词典的分词算法是应用最广泛、分词速度最快的。很长一段时间内研究者都在对基于字符串匹配方法进行优化,比如最大长度设定、字符串存储和查找方式以及对于词表的组织结构,比如采用TRIE索引树、哈希索引等。

2、基于统计的机器学习算法这类目前常用的是算法是HMM、CRF、SVM、深度学习等算法,比如stanford、Hanlp分词工具是基于CRF算法。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果。NianwenXue在其论文《Combining Classifiers for Chinese Word Segmentation》中首次提出对每个字符进行标注,通过机器学习算法训练分类器进行分词,在论文《Chinese word segmentation as character tagging》中较为详细地阐述了基于字标注的分词法。常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性。

参考技术A

中文分词算法大概分为两大类。

a.第一类是基于字符串匹配,即扫描字符串,如果发现字符串的子串和词相同,就算匹配。

这类分词通常会加入一些启发式规则,比如“正向/反向最大匹配”, “长词优先” 等策略,这类算法优点是速度块,都是O(n)时间复杂度,实现简单,效果尚可。也有缺点,就是对歧义和未登录词处理不好。歧义的例子很简单"长春市/长春/药店" "长春/市长/春药/店".未登录词即词典中没有出现的词,当然也就处理不好。ikanalyzer,paoding等就是基于字符串匹配的分词。

b.第二类是基于统计以及机器学习的分词方式,这类分词基于人工标注的词性和统计特征,对中文进行建模,即根据观测到的数据(标注好的语料)对模型参数进行估计,即训练。在分词阶段再通过模型计算各种分词出现的概率,将概率最大的分词结果作为最终结果。常见的序列标注模型有HMM和CRF。这类分词算法能很好处理歧义和未登录词问题,效果比前一类效果好,但是需要大量的人工标注数据,以及较慢的分词速度。

参考技术B

1. 好词典很重要m不论什么样的分词方法, 优秀的词典必不可少, 越拿老掉牙的词典对越新的文本进行分词, 就越会分成一团糟. 怎样构建一个优秀的词典, 快速发现新新词汇.。可以看有几篇文章,讲的非常透彻明白 : 互联网时代的社会语言学:基于SNS的文本数据挖掘。

 2. 算法跟着需求走,建议根据不同的需求选用不同的算法, 例如, 类似知乎头部搜索的 AutoComplete 部分, 讲究的是速度快, 兴趣相关( 优先找和你账户相关, 和可能感兴趣的内容 ), 分词算法反而在其次了. 而像全文搜索这样大段大段的长文字.。我觉得则更注重的是精准, 应该选一个像CRF这样的算法。

以上是关于有哪些比较好的中文分词方案?的主要内容,如果未能解决你的问题,请参考以下文章

lucene 中文分词?

中文分词的常见项目

基于BiLSTM-CNN-CRF的中文分词(一)

后端程序员之路 19结巴分词

如何利用Python对中文进行分词处理

java 中文分词为啥用 ik