《机器学习背后那些美妙的数学 之 中文分词》
Posted 机器学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《机器学习背后那些美妙的数学 之 中文分词》相关的知识,希望对你有一定的参考价值。
子曰:“温故而知新,可以为师矣。”
之前我们一起学习了《统计语言模型》,很好奇这个模型在我们日常工作的哪些地方会用到,今天我们就一起来看看吧~
可以利用统计语言模型进行自然语言处理,而这些语言模型是建立在词的基础上的,因为词是表达语义的最小单位。
最容易想到的分词方法,也是最简单的办法,就是查字典。这种方法最早由北京航天航空大学的梁南元教授提出。“查字典”的办法,其实就是把一个句子从左向右扫描一遍,遇到字典里的词就标识出来,遇到复合词(比如:“清华大学”)就找到最长的词匹配,遇到不认识的字串就分割成单词,于是简单的分词就完成了。
这个最简单的方法能解决70%-80%以上的分词问题,但是它毕竟太简单,遇到稍微复杂一点的问题就无能为力了。20世界80年代,哈尔滨工业大学的王晓龙博士把查字典的方法理论化,发展成为最少词数的分词理论。这个方法存在一些问题,如:
1)二义性的分割。比如,对短语“发展中国家”,正确的分词是“发展-中-国家”,而从左到右查字典的办法将它分割成“发展-中国-家”。
2)并非所有的最长匹配都一定是正确的。比如,“北京大学城书店”的正确分词是“北京-大学城-书店”,而不是“北京大学-城-书店”。
这些情况其实是可以用统计语言模型解决的。
统计语言模型分词的方法,可以用几个数学公式简单的概括如下:假定一个句子S可以有几种分词方法,为了简单起见,假定有以下三种:
A1, A2, A3,…, Ak
B1, B2, B3,…, Bm
C1, C2, C3,…, Cn
其中,A1,A2,…,B1,B2,…,C1,C2…都是汉语的词,上述各种分词结果可能产生不同数量的词串,我们用k,m,n表示三个句子分词时词的数目。那么最好的一种分词方法应该保证分词后这个句子出现的概率最大(感觉好有道理啊!!!)。也就说如果A1, A2,A3, …, Ak是最好的分法,那么其概率满足:
P(A1, A2, A3,…, Ak) > P(B1, B2, B3, …, Bm)
而且
P(A1, A2, A3,…, Ak) > P(C1, C2, C3, …, Cn)
因此,我们的目的就很明确了,利用上一篇文章中的语言模型计算出每种句子出现的概率(原来用在这里~如果不记得了,可以戳上一篇《机器学习背后那些美妙的数学》复习一下),并找出其中概率最大的,就能够找到最好的分词方法。所以,现在的问题就剩下如何找出概率最大的分词方法了。
如果穷举所有的可能的分词方法,并计算出每种可能性下句子的概率,那么计算量会很大。因此,可以把它看成是一个动态规划(Dynamic Programming)的问题,并利用维特比(Viterbi)算法快速找到最佳分词(这个算法在后面等小编学完再详细介绍吧~)。
总结一下,其实,分词的过程我们可以通过下图来理解:
学完利用统计语言模型的分词的方法之后,小编不禁好奇当初实习的时候用到的Python中的结巴(jieba)分词背后的核心分词算法又是什么样的。了解了下,大概过程如下:
1)基于前缀词典(Trie树结构)实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG);
2)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合,使用了维特比(Viterbi)算法;
3)对于未登录词,采用了基于汉字成词能力的HMM模型(Hidden Markov Model, 隐马尔可夫模型)。
貌似一不小心又引入了不认识的模型和算法,隐马尔可夫模型和维特比(Viterbi)算法,原谅小编的知识浅薄,不能一次学完~~~看来下次又不用愁写啥啦,那下次我们就一起学习《隐马尔可夫模型》吧,今天就到这啦~~~
以上是关于《机器学习背后那些美妙的数学 之 中文分词》的主要内容,如果未能解决你的问题,请参考以下文章
[bzoj5020] [THUWC 2017] 在美妙的数学王国中畅游