中文分词常见方法_mandagod的博客_中文分词
另外,我们收集了如下部分分词工具,供参考:
中科院计算所NLPIR http://ictclas.nlpir.org/nlpir/
ansj分词器 https://github.com/NLPchina/ansj_seg
哈工大的LTP https://github.com/HIT-SCIR/ltp
清华大学THULAC https://github.com/thunlp/THULAC
斯坦福分词器 https://nlp.stanford.edu/software/segmenter.shtml
Hanlp分词器 https://github.com/hankcs/HanLP
结巴分词 https://github.com/yanyiwu/cppjieba
KCWS分词器(字嵌入+Bi-LSTM+CRF) https://github.com/koth/kcws
ZPar https://github.com/frcchang/zpar/releases
IKAnalyzer https://github.com/wks/ik-analyzer
以及部分分词器的简单说明:
哈工大的分词器:主页上给过调用接口,每秒请求的次数有限制。
清华大学THULAC:目前已经有Java、Python和C++版本,并且代码开源。
斯坦福分词器:作为众多斯坦福自然语言处理中的一个包,目前最新版本3.7.0, Java实现的CRF算法。可以直接使用训练好的模型,也提供训练模型接口。
Hanlp分词:求解的是最短路径。优点:开源、有人维护、可以解答。原始模型用的训练语料是人民日报的语料,当然如果你有足够的语料也可以自己训练。
结巴分词工具:基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG);采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合;对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法。
字嵌入+Bi-LSTM+CRF分词器:本质上是序列标注,这个分词器用人民日报的80万语料,据说按照字符正确率评估标准能达到97.5%的准确率,各位感兴趣可以去看看。
ZPar分词器:新加坡科技设计大学开发的中文分词器,包括分词、词性标注和Parser,支持多语言,据说效果是公开的分词器中最好的,C++语言编写。
关于速度:
由于分词是基础组件,其性能也是关键的考量因素。通常,分词速度跟系统的软硬件环境有相关外,还与词典的结构设计和算法复杂度相关。比如我们之前跑过字嵌入+Bi-LSTM+CRF分词器,其速度相对较慢。另外,开源项目 https://github.com/ysc/cws_evaluation 曾对多款分词器速度和效果进行过对比,可供大家参考。
最后附上公开的分词数据集
测试数据集
1、SIGHAN Bakeoff 2005 MSR,560KB
http://sighan.cs.uchicago.edu/bakeoff2005/
2、SIGHAN Bakeoff 2005 PKU, 510KB
http://sighan.cs.uchicago.edu/bakeoff2005/
3、人民日报 2014, 65MB
https://pan.baidu.com/s/1hq3KKXe
在使用bert_wwm的时候 要基于句子的分词 结巴的分词是 有一些的问题的因为不是针对某一领域的 所以要制作某一领域内的词表。
先来一个示例:
import jieba
print("|".join(jieba.lcut("滴滴代驾不靠谱,在司机端总是接不到单子。")))
print("|".join(jieba.lcut("今天空车返回,在路上遇到行政执法,平台不派单")))
jieba.load_userdict("/Users/didi/Downloads/关键词提取/dict.txt")
print("|".join(jieba.lcut("滴滴代驾不靠谱,在司机端总是接不到单子。")))
print("|".join(jieba.lcut("今天空车返回,在路上遇到行政执法,平台不派单。")))
结巴内置的词表在哪里呢?
在结巴的库里面 :/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/jieba
把自己定义的词加进去就好了