自由度+凝固度+统计的新词发现

偶然翻到了2012年的一篇文章,介绍了一种很好玩的新词发现的算法。关键词:自由度、凝固度、n-gram。

自由度:
———表示了一个词组的左右两边的词的固定程度。例如怕上火,下一句是喝王老吉,好像怕上火下一句很少接其他的词,那就是它的自由度不高,而一个真正的词必定可以和很多词配合,所以’怕’+‘上火’就不能构成一个新词。实际上我们统计’怕上火’的左右邻词和邻词的出现次数,并以总的出现次数作为分母计算每个邻词的出现概率,最后用信息熵分别统计左右的熵值,注意是左右分开算。然后选择左右中小的熵值作为最终自由度,意为但凡有一边不自由都不能被单独当成一个词,否则’巧’‘克’'力’这三个字就要形成’巧克’和’克力’两个词了。
自由度的阈值要设很大,因为左右邻词太丰富,信息熵加和就大我设置在40左右。

凝固度:
———表示了’怕’和’上火’它俩同时使用的程度,如果’怕’只和’上火’搭配着用,那它俩就凝固度高,就是一个词。计算凝固度要先计算P(怕上火)、P(怕)和P(上火),这个概率是基于训练集总词数的出现概率。凝固度N(‘怕’,‘上火’) = P(怕上火)/(P(怕)*P(上火)),如果只有’怕上火’这一种组合存在,那三个值应该一样,最后结果会等于1。如果除了怕上火,还有怕老婆等等,那P(怕)会比其他两个P大,凝固度就会变小。
所以给凝固度设定阈值的时候就要围绕着1~2.5设置。

**阈值可以自己随便设,不需要参照上面的。

写代码时可以灵活设置,例如’巧克力’这个词必须三个单字组合才行,如果只两两组词,那’巧克力’是永远不会被发现的。所以有必要设置一个最大组合数的阈值,将他设为4说不定还能找出四字词语,针对这个改动,自由度还是计算左右邻词,不变,凝固度要改动一下,拿’精’‘忠’‘报’'国’为例,前期已经统计出了[‘精’,‘精忠’,‘精忠报’,‘精忠报国’,‘忠’,‘忠报’…‘报国’,‘国’]的出现频率,所有根据这些可以计算总凝固度 N(‘精’,‘忠报国’)+N(‘精忠’,‘报国’)+N(‘精忠报’,‘国’)。

我用这个模型做了无先验词库的(从单个字开始的)新词发现,说白了就是统计意义上的分词,并在b站新番的弹幕数据上做了测试。
结果,死肥宅、男主、还有一些污言秽语都给分出来了。可惜数据量有点少,有很多不准的词,停用词也很难搞。
不过也好应对:
1.拿一个已有词库比对,如果新词里的某一部分在词库里,那说明这个新词其实可以分成两个词,然后再考虑要不要作为新词。这一条只适用于双字词库,否则’死肥宅’就被拆成’死’‘肥’'宅’了。
2.先建一个停用词库,如果新词里有停用词,就不作为新词。这样会误伤一些词,所以有停用词最好还是人工筛一下吧。

扩展:
——前两天游乐王子的口音火了,就多了个新词’雨女无瓜’,可以猜到肯定有很多人去搜索,如果手里有这些搜索数据,经过这个模型,就能发现这个新词,微博就可以把这个词作为热搜放到热搜榜上,就可以做个热搜系统。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值