新词发现

挖掘新词的传统方法是,先对文本进行分词,然后猜测未能成功匹配的剩余片段就是新词。这似乎陷入了一个怪圈:分词的准确性本身就依赖于词库的完整性,如果词库中根本没有新词,我们又怎么能信任分词结果呢?此时,一种大胆的想法是,首先不依赖于任何已有的词库,仅仅根据词的共同特征,将一段大规模语料中可能成词的文本片段全部提取出来,不管它是新词还是旧词。然后,再把所有抽出来的词和已有词库进行比较,不就能找出新词了吗?有了抽词算法后,我们还能以词为单位做更多有趣的数据挖掘工作。

算法

Matrix67提出了一种基于信息熵的新词发现算法,成词的标准有两个:

  • 内部凝固度
  • 自由运用程度

所谓内部凝固度,用来衡量词搭配(collocation)是否合理。比如,对于“的电影”、“电影院”这两个搭配,直观上讲“电影院”更为合理,即“电影”和“院”凝固得更紧一些。在计算语言学中,PMI (Pointwise mutual information)被用来度量词搭配与关联性,定义如下:

pmi(x,y)=logP(x,y)P(x)P(y) p m i ( x , y ) = l o g P ( x , y ) P ( x ) P ( y )

若PMI高,即两个词共现(co-occurrence)的频率远大于两个词自由拼接的乘积概率,则说明这两个词搭配更为合理一些。针对一个词有多种搭配组合,比如“电影院”可以由“电影”+“院”构成,也可以由“电”+“影院”构成,Matrix67取其所有pmi最小值(去掉log)作为内部凝固度:

solid(cm1)=minP(cm1)P(cji)=P(cm1)maxP(cji) s o l i d ( c 1 m ) = m i n P ( c 1 m ) ∏ P ( c i j ) = P ( c 1 m ) m a x ∏ P ( c i j )

其中, cm1=c1c2cm c 1 m = c 1 c 2 ⋯ c m 表示长度为m的字符串, P(cm1) P ( c 1 m ) 表示词 cm1 c 1 m 的频率。

光看文本片段内部的凝合程度还不够,我们还需要从整体来看它在外部的表现。考虑“被子”和“辈子”这两个片段。我们可以说“买被子”、“盖被子”、“进被子”、“好被子”、“这被子”等,在“被子”前面加各种字;但“辈子”的用法却非常固定,除了“一辈子”、“这辈子”、“上辈子”、“下辈子”,基本上“辈子”前面不能加别的字了。“辈子”这个文本片段左边可以出现的字太有限,以至于直觉上我们可能会认为,“辈子”并不单独成词,真正成词的其实是“一辈子”、“这辈子”之类的整体。

所以,Matrix67提出了自由运用程度,用以衡量一个词的左邻字与右邻字的丰富程度。正好信息熵可以完美地诠释了这种丰富程度,熵越大则丰富程度越高。“被子”和“辈子”这两个片段的左邻字熵 le l e 与右邻字熵 re r e 分别如下:

le(被子) = 3.67453
re(被子) = 3.8740
le(辈子) = 1.25963
re(辈子) = 4.11644

可以看出,“被子”的左邻字熵与右邻字熵都较高,而“辈子”的左邻字熵较小,即左邻字非常贫乏。因此,“被子”较“辈子”更有可能成词。自由运用程度的定义如下:

free(cm1)=min{le(cm1),re(cm1)} f r e e ( c 1 m ) = min { l e ( c 1 m ) , r e ( c 1 m ) }

给频数、内部凝固度与自由运用程度哥设定一个阈值,提取出来符合阈值的候选词,去掉词典中存在的词即为新词了。

参考资料

  1. http://www.matrix67.com/blog/archives/5044
  2. http://www.cnblogs.com/en-heng/p/6699531.html
  3. 代码:https://github.com/Moonshile/ChineseWordSegmentation
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值