从统计学看NLP之维特比Vertbi(2)

前言

上一篇博客中简单介绍了下维特比算法,但是没有细纠其中的细节,本文将会以一个分词的例子来讲解维特比算法。

分词

分词已经是目前比较成熟的技术了,市面上也有很多优秀的包供大家使用,但是你真的明白了其中的原理吗。分词的方式有基于匹配规则的,也有基于语言模型,深度学习模型来的,但是其原理终究还是离不开上一篇博客介绍的那个流程即预分词+语言模型。

本文将会给大家先简单介绍一下基于匹配规则的分词方式,最大匹配。

最大匹配原理很简单,其包括两种方式,前向最大匹配与后向最大匹配,先以前向为例讲解。

首先我们需要预先定义好一个词典,词典中包含了所有常见的分词。假如我们有一个词典[我们,经常,有,有意见,意见,分歧],当拿到句子我们经常有意见分歧时,我们需要先设置一个超参数maxlen,假设我们这里设置的是5,就会先从句子的左边开始,选择出五个字符我们经常有,然后把选择出来的值和字典进行匹配,看是否能匹配到对应的词,如果没有,就把选择出来的字符串末尾的字符去除只剩下我们经常,再和词典匹配,以此类推直到匹配到对应的词我们,然后再从匹配到词的下一个位置选出5个字符经常有意见继续进行匹配。最终我们就能拿到分词后的结果我们,经常,有意见,分歧

如果是反向最大匹配,那么就是从尾部选择maxlen个字符与字典进行匹配,没有匹配到就把头部的一个字符去除继续匹配,如果是上面的例子那么反向匹配的结果为我们,经常,有意见,分歧

不同的分词方式可能会得到不同的分词结果,还是拿上面的句子为例经常有意见分词,实际上可以分为经常,有意见,分歧经常,有,意见,分歧,这个时候我们就需要考虑到底是哪种分词更好,聪明的你一定发现了,可以使用我们之前介绍的语言模型,哪个概率高最后就选择哪一个的分词。

Vertbi维特比详解

分词和机器翻译都有一样的问题,在语言模型阶段时间复杂度太高,怎么解决呢,这就需要用到维特比算法。

还是举刚才的例子,经常有意见分词,我们的词典与对应的概率如下
词典:[经常,经,有,有意见,意见,分歧,见,意,见分歧,歧]
概率:[0.1,0.05,0.1,0.1,0.2,0.2,0.05,0.05,0.05,0.1]
log(x):[2.3,3,2.3,2.3,1.6,1.6,3,3,3,2.3]

其中概率值指的是对应的词在文本中出现的概率,这个是事先在大量文本中统计出来的。因为概率值是一个小于1的值,如果词典中的词很多,那么每个词的概率值会很小,相乘的结果可能导致下溢,所以加上log函数,log是一个单调递增的函数因此不会影响我们需要的结果。

对于没有在词典中出现的词,我们可以假设他是一个概率值很接近于0的值,这里我们设其log后的值为20

有了词典和概率值后,我们定义一个有向无环图,把对应的句子所有的分词形式标注在图中,并添加上对应的权重。
在这里插入图片描述

最终我们把问题转变为了求最短路径问题,再采用DP算法即可得到最短的路径,根据最短的路径找到对应的词即是我们要的分词结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值