写在最前面:
由于我们chinese language的特殊性,不和英文中有天然空格符一样,我们需要将汉字序列切分成单独的词。
分词算法是文本挖掘的基础,通常对整个模型的效果起着较大的决定作用。中文分词算法主要分为基于词表的分词算法、基于统计模型的分词算法、基于序列标注的分析算法。下面我们来一一剖析吧
准备好了吗!迎接疾风吧,数学能让人清醒!!!
目录
1.基于词表的分词算法
1.1正向最大匹配法(FMM)
1.2逆向最大匹配法(BMM)
1.3双向最大匹配法
2.基于统计模型的分析算法
2.1基于N-gram语言模型的分词方法
3.基于序列标注的分词算法
3.1基于HMM的分词方法
3.2基于MEMM的分词方法
3.3基于CRF的分词方法
3.4基于深度学习的端对端的分词方法
概念:对于输入的一个文本序列从左至右,以贪心的算法切分出当前位置上长度最大的词
分词原理:单词的颗粒度越大,所能表示的含义越确切
分词步骤:
哈哈哈,上面肯定看的迷迷糊糊的,大家都这么过来的,文字太多容易视觉疲劳,那我们来举个小小的栗子吧。
比如说待分割的序列s=‘我爱长沙理工大学’,然后我们的word_dict={'喜欢',‘长沙’,‘长沙理工大学’,...}假设其中最长词语的长度是6,接下来步骤就是
于是"我爱长沙理工大学"就分割成了"我/爱/长沙理工大学"
如果比较深入的理解啦1.1中所说的正向最大匹配,那么只要将正向从左至右筛选的顺序换成从右至左筛选就好了。
其实90%(这个数字我乱编的,你可以理解成为大部分的意思)的情况下正向最大匹配法和逆向最大匹配法分词的结果都是一样的,但是也存在不一样的哟,比如说'结婚的和尚未结婚的'通过FMM可能会被分割成'结婚/的/和尚/未/结婚的/',但是通过BMM可能就会被分割成'结婚/的/和/尚未/结婚/的'
双向最大匹配法就是将正向和逆向最大匹配法进行比较得出最后分词结果,在中文信息处理系统中被广泛运用
启发式规则:
1. 如果正反向分析结果词数不同,则取分析数较少的那个
2. 如果分词结果词数相同
wikipedia上有关n-gram的定义:
n-gram是一种统计语言模型,用来根据前(n-1)个item来预测第n个item。在应用层面,这些item可以是音素(语音识别应用)、字符(输入法应用)、词(分词应用)或碱基对(基因信息)。一般来讲,可以从大规模文本或音频语料库生成n-gram模型。 习惯上,1-gram叫unigram,2-gram称为bigram,3-gram是trigram。还有four-gram、five-gram等,不过大于n>5的应用很少见。
如何计算一个句子出现的概率
假设句子s=w1,w2,...wn,那么不妨把s展开表示
p(s) = p(w1,w2,...wn) = p(w1)p(w2|w1)p(w3|w1,w2)***p(wn|w1,...wn-1)
那么问题来了,计算p(w1)简单,p(w2|w1)也能算,p(wn|w1,w2,..wn-1)就额非常费力了,所以我们要很自然的引出马尔科夫链,假设一个词wi出现的概率只与它前面的wi-1词有关,那么
p(s) = p(w1,w2,...wn) = p(w1)p(w2|w1)p(w3|w2)...p(wn|wn-1)
常用于搜索引擎
我要说的第一点就是他是个生成模型,所谓生成模型即是学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。
他是将分词问题做个转换,将分词问题转换为对句子中的每个字打标注,标注这个字要么是一个词的开始B(begin),要么是一个词的中间M(middle),要么是一个词的结束(E),要么是单个字S(single),我们将句子标注好了,那么分词结果也就出来了
X | 我 | 爱 | 长 | 沙 | 理 | 工 | 大 | 学 |
Y | S | S | B | M | M | M | M | E |
基于HMM的分词方法:属于由字构词的分词方法,由字构词的分词方法思想并不复杂,它是将分词问题转化为字的分类问题(序列标注问题)。从某些层面讲,由字构词的方法并不依赖于事先编制好的词表,但仍然需要分好词的训练预料 。
它满足两个假设
由于HMM是一个生成模型,X为观测序列,Y为隐序列,则X,Y的联合分布为
猜猜我要说的第一点是什么,没错,它是个判别式模型!!!,它是直接通过P(Y|X)来建模的
P(i | i',o)通过最大熵分类器建模得到 ,即
其中Z(o,i')为归一化因子,fa(o,i) 是特征函数,需自己定义,而入a为特征函数的权重,需要通过训练得到
求解步骤:
优点:相比于HMM
缺点:Lable Bias Problem(标注偏差问题)
CRF是无向图模型
在这里Z(O)是用来归一化的
P (I|O)表示在给定观测序列O=(O1,O2,...Oi)的情况下,我们用CRF求出的隐序列I = (I1,I2,...Ii)的概率,注意这里I是一个序列,有多个元素
优点:
缺点:
最近,基于深度神经网路的序列标注算法在词性标注、命名实体识别问题上取得了优秀的进展。词性标注、命名实体识别都属于序列标注问题,这些端到端方法可以迁移到分词问题上,免去CRF的特征模板配置问题。但与所有深度学习的方法一样,它需要较大的语料库才能体现优势。
BiLSTM-CRF的网络结构如上图所示,输入层是一个embedding层,经过双向LSTM网络编码,输出层是一个CRF层,经过双向LSTM网络输出的实际上是当前位置对于各词性的得分,CRF层的意义是对词性得分加上前一位置的词性概率转移的约束,其好处是引入一些语法规则的先验信息 。
其实说白了,就是一个深度学习的套路啦,扔进去训练就完事了。
写在后面:其实还有很多细枝末节没有讲清楚,我自己再看也是晕晕的,但是不要怕,多看看,多想想,自然而然也就懂了,各位加油,如有错误,还肯定各大佬批评指正
参考:各路博客以及各路论文以及各路视频网站,只是小小总结一下,感谢巨人的肩膀。