一、中文分词技术
1、常见的两类中文分词技术
中文分词技术常见的有两大类:机械分词技术、基于统计的序列标注技术。
机械分词技术操作简单、方便,比较省心,但是对于歧义词以及未登录词的效果并不是很好;
统计模型的序列标注方法,对于识别未登录词拥有较好的识别能力,而且分词精度也比较大,同时这个方法可以不分中文、英语,着重看在语言前后顺序。
以下是思维导图的形式展示两大区别:
2、深度学习在分词、找词中的应用
(1)word2vec词向量
虽然word2vec只有三层神经网络,但是已经取得非常好的效果。通过word2vec,可以将一个词表示为词向量,将文字数字化,更好的让计算机理解。使word2vec模型,我们可以方便的找到同义词或联系紧密的词,或者意义相反的词等。
(2)RNN(Recurrent Neural Networks,循环神经网络)——seq2seq
在自然语言处理中,上下文关系非常重要,一个句子中前后词并不独立,不同的组合会有不同的意义,比如”优秀”这个词,如果前面是”不”字,则意义完全相反。RNN则考虑到网络前一时刻的输出对当前输出的影响,将隐藏层内部的节点也连接起来,即当前时刻一个节点的输入除了上一层的输出外,还包括上一时刻隐藏层的输出。RNN在理论上可以储存任意长度的转态序列,但是在不同的场景中这个长度可能不同。比如在词的预测例子中:
1,“他是亿万富翁,他很?”;
2,“他的房子每平米物业费40元,并且像这样的房子他有十几套,他很?”。
从这两个句子中我们已经能猜到?代表“有钱”或其他类似的词汇,但是明显,第一句话预测最后一个词时的上线文序列很短,而第二段话较长。如果预测一个词汇需要较长的上下文,随着这个距离的增长,RNN将很难学到这些长距离的信息依赖,虽然这对我们人类相对容易。在实践中,已被证明使用最广泛的模型是LSTM(Long Short-Term Memory,长短时记忆)很好的解决了这个问题。
LSTM最早由Hochreiter及 Schmidhuber在1997年的论文中提出。首先LSTM也是一种RNN,不同的是LSTM能够学会远距离的上下文依赖,能够存储较远距离上下文对当前时间节点的影响。
所有的RNN都有一串重复的神经网络模块。对于标准的RNN,这个模块都比较简单,比如使用单独的tanh层。LSTM拥有类似的结构,但是不同的是,LSTM的每个模块拥有更复杂的神经网络结构:4层相互影响的神经网络。在LSTM每个单元中,因为门结构的存在,对于每个单元的转态,使得LSTM拥有增加或减少信息的能力。
(来源文章:基于Deep Learning的中文分词尝试)
(3)深度学习库
Keras(http://keras.io)是一个非常易用的深度学习框架,使用python语言编写,是一个高度模块化的神经网络库,后端同时支持Theano和TensorFlow,而Theano和TensorFlow支持GPU,因此使用keras可以使用GPU加速模型训练。
Keras中包括了构建模型常用的模块,如Optimizers优化方法模块,Activations激活函数模块,Initializations初始化模块,Layers多种网络层模块等,可以非常方便快速的搭建一个网络模型,使得开发人员可以快速上手,并将精力放在模型设计而不是具体实现上。常见的神经网络模型如CNN,RNN等,使用keras都可以很快搭建出来,开发人员只需要将数据准备成keras需要的格式丢进网络训练即可。如果对keras中自带的layer有更多的需求,keras还可以自己定制所需的layer。
二、常见的中文分词引擎的介绍
1、11款中文分词引擎大比拼
测试了11家中文分词引擎(各家分词系统链接地址),同时从分词准确度、歧义词切分、未登陆词(新涌现的通用词、专业术语、专有名词)三个方面进行论证。
BosonNLP:http://bosonnlp.com/dev/center
IKAnalyzer:http://www.oschina.net/p/ikanalyzer
NLPIR:http://ictclas.nlpir.org/docs
SCWS中文分词:http://www.xunsearch.com/scws/docs.php
结巴分词:https://github.com/fxsjy/jieba
盘古分词:http://pangusegment.codeplex.com/
庖丁解牛:https://code.google.com/p/paoding/
搜狗分词:http://www.sogou.com/labs/webservice/
腾讯文智:http://www.qcloud.com/wiki/API%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3