任务2:常用的分词算法 I

最简单的分词算法是在单词层面的最大匹配算法,最大匹配算法又可以分为前向最大匹配和后向最大匹配,二者大致上是类似的,只是在字符的缩减方向上有所差异。

这个算法得到的结果或者说目的是:最终分得的单词个数越少越好,每个单词的字符长度越长越好;

前向最大匹配 (forward-max matching)
无论是哪种分词算法,都需要有预先保存好的单词字典库
比如说我们要对以下一句话进行分词:

我们经常有意见分歧

字典:
[“我们”,“经常”,“有”,“意见”,“有意见”,“分歧”]

设置最大匹配 max_len=5,首先我们可以得到 [ 我们经常有 ],查找字典中没有这个单词,然后从后面依次减少一个字符去查找:

  • [ 我们经常有 ] --> [ 我们经常 ] -->[ 我们经 ] --> [ 我们 ]

字典中有 [我们] 这个单词,就可以把 “我们” 给切分出来了

我们 / 经常有意见分歧

然后我们再看 [ 经常有意见 ] 按照上面的方法依次查找,最后可以得到:

我们 / 经常 / 有意见 / 分歧

可以发现在最大匹配算法下,“有意见” 切分出来后就不会再继续往下切分了,即使字典中存在 “有” 以及 “意见” 两个单词。

在这里,max_len 可以设置为 5~10,或者先扫描一边字典库,得到字符串长度的分布,再自定义设置也可。

后向最大匹配 (backward-max matching)
与前向最大匹配大同小异,同样以上面这一句话的切分为例,后向最大匹配的顺序是:

  • [ 有意见分歧 ] --> [ 意见分歧 ] --> [ 见分歧 ] --> [ 分歧 ]

这句话最后得到的切分结果与前向最大匹配是一样的,90%的情况下,二者的结果是一样的。

最大匹配算法的缺点

  • 基于贪心的角度,所以得到的结果是局部最优解;
  • 效率比较低,依赖于 max_lenmax_len 越大,所要做的扫描线性增长;
  • 这只是在单词层面的划分,没有考虑语义,也就是上下文的信息,比如说这里的 “有意见” 再划分为 “有” 和 “意见” 明显会更好,这也是最大匹配算法最大的不足。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值