最大概率法分词中词频惩罚因子的作用探究
来源:互联网 发布:粤知一二中的女孩猫猫 编辑:程序博客网 时间:2024/05/16 05:56
在最大概率法分词的程序中,由于每个词出现的次数分布非常不均匀,而且我们要计算每个词出现的概率,对于出现次数比较少的词概率就很小,求句子中词的概率之积的时候,需要将好多非常小的数作乘法,可能会将超出计算机所能表示的数的最小范围。为了便于计算,常常要将每个词的概率求对数后在进行计算,但是由于对概率求对数后变为负值,因此要求对应的相反数。所以一个词出现的次数越多,最后求得对应的值越小,我们将这个值称为这个单词的代价。单词出现的次数越多,该单词的代价越低;否则代价越高。
第一部分 公式推导
cost(S) = - log(s/M) (公式1)
为了不至于词的频数悬殊过大,我们对所有的词都乘以一个惩罚因子k,使词的频数同步的扩张或缩小,观察k的取值对于分词准确率的影响。因此,公式(1)就变为:
cost(S) = - log(ks/M) (公式2)
现在来分析分词的过程:
如果对于一个汉字串(例如:年前),可以分为一个词(即:年前),也可以分为两个词(即:年/前),现在来分析什么情况下会分为两个词。在上面的例子中,假定用A、B、C分别代表如下内容:A为“年”,B为“前”,C为“年前”。并且“年”和“前”出现的概率极低,“年前”出现概率较高。那么,上面的例子中,汉字串有没有可能被切分为两个词呢?如前所述,最终分词算法会选择一种费用最低的切分方式。如果该字串要分为两个词,则必须要满足:
cost(A) + cost(B) < cost(C) (公式3)
其中A和B为拆分后的字串,C为未拆分的字串。若用a、b、c分别代表A、B、C的频数,将公式2代入公式3,则有:
- log(ka/M) – log(kb/M) < - log(kc/M) (公式4)
将公式4展开:
- [ log(k) + log(a) – log(M) ] + - [ log(k) + log(b) – log(M) ] < - [ log(k) + log(c) – log(M) ]
整理:
log(M) – log(a) – log(b) – log(k) < - log(c)
即:
log(Mc/abk) < 0
也就是:
Mc < abk
亦即:
abk > Mc (公式5)
从公式5可以看出,在a、b、c和M的大小固定的情况下,只要k的值大于某一个数,公式5就成立,从而公式4和公式3成立。也就是说,当k的值大于一个确定的值的时候,汉字串会被拆为A/B两部分。
更复杂一点,对于下面的例子:“2日出生于”,只考虑其中的四个汉字,可以有下面两种切分方式:“日/出生/于”和“日出/生于”。如果要切分为三个词,必须满足如下的公式:
- log(ka/M) – log(kb/M) – log(kc/M) < - log(kp/M) – log(kq/M) (公式6)
展开,整理得:
abck > Mpq (公式7)
从公式7可以看出,即便是a、b、c远远低于于p、q的频数,只要k的取值合适,总会有公式7成立,继而公式6成立。因此上面的例子是有可能切分为三个词的。
观察公式7,将公式两边都乘以k*k,得到:
abckkk > Mpqkk (公式8)
ak*bk*ck > M*pk*qk (公式9)
你看出了什么规律?当对所有的单词的频数都乘以一个固定值的时候,频数较少的词也有可能是总体费用较低的。
更一般的情况,将公式9延伸到更多的词,说明了什么?
结论:
(1)随着k值增大,程序有将句子切分为更多的较短的词的倾向。即使这些较短的词出现的频率并不多,但是词的长度短意味着可以切出的词的数量多。由于k的存在,每个词都会获得一定比例的权重加成,积少成多,众多的词的累积效应最终会超过出现次数较多但是较长的词。通俗来说就是,双拳难敌四手,哈哈。
第二部分 实例验证
对语料选取200个句子进行测试,分别取惩罚系数k为表中所列数字,测试结果如下:
1.对上表的内容进行验证:
(1)当k的值为0.1、0.3、0.5、0.8和1.0时,有如下切分错误。当k的值为5.0和10.0时,错误消失。组合型歧义: 半年 正确切分: 半/年 错误切分: 半年
组合型歧义: 身为 正确切分: 身/为 错误切分: 身为
(2)当k的值为0.1时,有如下切分错误。当k的值为0.3、0.5、0.8、1.0、5.0和10.0时,错误消失。
组合型歧义: 不是 正确切分: 不/是 错误切分: 不是
(3)当k的值为0.1、0.3时,有如下切分错误。当k的值为0.5、0.8、1.0、5.0和10.0时,错误消失。
交集型歧义: 地表现在 正确切分: 地/表现/在 错误切分: 地表/现在
2.对上表内容的分析:
(1)组合型歧义
通过分析发现,出错的组合型歧义都是类似于下面的形式,应该是将词语切开而实际上没有切开,通过增大k值,使一些类似的错误得到解决,但仍然有大部分没有解决。理论上来讲,只要k增大到一定程度,这些错误都可以解决,但是同时还有可能有其他的副作用,得不偿失。
组合型歧义: 半年 正确切分: 半/年 错误切分: 半年
(2)未登录词语
出错的未登录词语都是如下的形式,不该切分而进行了切分。是由于随着k值的增大,把词语切为单字的代价已经小于保留为词语的代价了。加之这些词本身的频数又不太大,因此受k值的影响特别明显。上表中当k=5和k=10时未登录词急剧增加就是这个原因。
未登录词语: 罗织 正确切分: 罗织 错误切分: 罗/织
(3)交集型歧义
某些特殊的交集型歧义是可以通过改变k值来解决的,比如上面的例子(正确和错误切分方式词的数目不一样)。但是多数的交集型歧义形式为如下(正确和错误切分方式词的数目一样):
交集型歧义: 彩笔画 正确切分: 彩笔/画 错误切分: 彩/笔画
假设有如下公式:
cost(A) + cost(B) < cost(C) + cost(D)
- log(ka/M) – log(kb/M) < - log(kc/M) - log(kd/M)最终化简为:
a + b > c + d (公式10)
观察公式10,该公式和k值无关,因此不能通过改变k值的方式来消除这样的交集型歧义。
7 0
- 最大概率法分词中词频惩罚因子的作用探究
- 最大概率法分词
- 最大概率法分词及性能测试
- 最大概率法分词及性能测试
- 正向(逆向)最大匹配和最大概率法分词的错误分析
- 分词学习(2),最大概率分词
- 基于Tire树和最大概率法的中文分词功能的Java实现
- 基于Tire树和最大概率法的中文分词功能的Java实现
- 关于惩罚因子C
- 松弛变量与惩罚因子
- 分词统计词频
- 最大匹配法分词
- Jieba分词包(三)——基于词频最大切分组合
- Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子
- Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子
- Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子
- 十四、探究中文分词的艺术
- 利用结巴分词的Python版本实现分词并统计词频
- 重拾算法(2)——线索二叉树
- (28)表格隔行变色,并且鼠标移入高亮显示,鼠标移出显示原来的颜色
- TCP 的那些事儿(上)
- Java 访问修饰符
- vm采用birdged配置好不能上网的问题
- 最大概率法分词中词频惩罚因子的作用探究
- TCP 的那些事儿(下)
- 出错处理函数abort、exit、atexit、strerror. . .
- go语言_异步编程_example.01
- Libevent参考手册:evbuffer:缓冲IO实用功能
- 手机应用通知栏的创造
- select、poll、epoll的比较
- 是地方了就是发链接
- 是地方了就是发链接