当前位置: 主页 > JAVA语言

java中文分词算法-考研英语:基于词的语言模型算法

发布时间:2023-07-13 10:03   浏览次数:次   作者:佚名

1. 原理-分词算法 1.1. 基于词典的分词

1、最大匹配分词算法:寻找最优组合的方式是将匹配到的最长词组合在一起。其缺点是严重依赖词典,无法很好地处理分词歧义和未登录词。优点是由于这种方法简单、速度快、且分词效果基本可以满足需求,因此在工业界仍然很受欢迎。

2、最短路径分词算法:将一句话中的所有词匹配出来,之后寻找从起始点到终点的最短路径作为最佳组合方式

基于Dijkstra算法求解最短路径、N-最短路径分词算法

3、基于n-gram model的分词算法:将基于词的语言模型所统计出的概率分布应用到词图中,求解最大概率的路径

1.2. 基于字的分词

把一个字标记成B(Begin), I(Inside), O(Outside), E(End), S(Single)。

1、生成式模型分词算法:n-gram模型、HMM隐马尔可夫模型、朴素贝叶斯分类等,基于Python的jieba分词器和基于Java的HanLP分词器都使用了HMM

2、判别式模型分词算法:感知机、CRF条件随机场等

1.3. 神经网络分词算法

目前公认效果最好的模型是BiLSTM+CRF

2. 实践部分

参考中文分词:中文有7000多个常用字,56000多个常用词

最好用的java中文分词器_java词法分析程序_java中文分词算法

2.1. 规则、统计分词普通算法

正向最大匹配法

逆向最大匹配法

双向最大匹配算法

Ngram

HMM

1、数据集

 3种匹配算法:25006个词

在这里插入图片描述

 Ngram、HMM:人民日报预料29W句子

在这里插入图片描述

2、效果

评测语料:微软评测语料,共3985个句子

最好用的java中文分词器_java词法分析程序_java中文分词算法

性能比较

在这里插入图片描述

2.2. CRF普通算法

数据集、效果无详细介绍

2.3. BiLSTM+CRF

1、词性标注实例

嫌 疑 人 赵 国 军 。 B-N I-N I-N B-NR I-NR I-NR S-W

其中B表示一个词语的开头,I表示非一个词语的开头,S表示单字成词。

2、数据集

选用人民日报2014年的80万语料作为训练语料

词数:20744

行数:317

在这里插入图片描述

最好用的java中文分词器_java词法分析程序_java中文分词算法

已提供代码将语料转化为(1、)词性标注实例效果

2、效果

Recall: 0.939404

Precision: 0.949798

2.4. BiLSTM+CRF(算法同上)

在人民日报上的分词能达到正确率97%

人民日报训练集,效果未写

2.5. Universal Transformer (Encoder) + CRF

1、词性标注实例

嫌 疑 人 赵 国 军 。 B-N I-N I-N B-NR I-NR I-NR S-W

2、数据集

选用人民日报2014年的80万语料作为训练语料

词数:20744

java中文分词算法_java词法分析程序_最好用的java中文分词器

行数:317

在这里插入图片描述

可代码转化为词性标注实例效果

3、效果

Recall: 0.962784

Precision: 0.960839

2.6. 快速神经网络分词包

版本号:11.1.0支持标点符号分离(因为标点特别多, 未做病句标点分析, 大家可以自由改 2019-05-14) 契形字符, 目前可混合识别12国语言, 可混合分词70国语言(契形+中(简,繁)日,韩,象形, 无标点,歧义,绕口令,带病句快速混分高质量算法研究同时保证1800万+/每秒混分速度和99.9%分词准确率(deta的科研目标是准确率上99.999999% (中文分析错误率小于亿分之一)) 和商业闭源语料库版(65000+中文简体词汇和35万12国词汇). 20190504

在这里插入图片描述

2.7. Jieba分词

涉及算法:

 基于前缀词典实现词图扫描java中文分词算法,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG),采用动态规划查找最大概率路径,找出基于词频的最大切分组合;

 对于未登录词,采用了基于汉字成词能力的 HMM模型,采用Viterbi算法进行计算;

java中文分词算法_最好用的java中文分词器_java词法分析程序

 基于Viterbi算法的词性标注;

 分别基于tfidf和textrank模型抽取关键词;

用法:覆盖jieba中dict.txt语料词典

1、数据集

已分词汇349046个(后面词性可不需要)

在这里插入图片描述

3. 总结

目前分词实践主要有三类情况:

1、规则和统计分词等普通算法,很大程度依赖于词典,准确率约为65%-75%。

2、神经网络算法,准确率在90%以上,但需调研是否能用于其他语言标注的训练。

3、已有分词工具改变其词典java中文分词算法,如jieba分词,准确率未知,算法原理基于规则和统计分词等普通算法。

数据集要求:

中文有7000多个常用字,56000多个常用词,上面实践中最少也标注了上万的词,针对其他的语言可以先标注部分语料进行测试。