新词发现

新词发现

定义

新词发现就是识别特定预料中不在字典中的词,所以新词又被称为「未登录词」,比如微博语料中的网络流行语,黑产语料中的黑话。

一般的做法是不依赖字典做无监督分词,分好的词减去已知字典,得到的就是新词。这样新词发现就被转换为分词任务,或者说是一个识别预料中的词的任务。

下面介绍几种基于统计的判断是否成词的指标

1、词频

对语料完整切词,比如对于一句话 "明天可能要下雨",以2grams, 3grams, 4grams 的方式切词

2grams切分为:明天,天可,可能,能要,要下,下雨

3grams切分为:明天可,天可能,可能要,能要下,要下雨

4grams切分为:明天可能,天可能要,可能要下,能要下雨

统计上词出现的次数,词频越高,越可能成词。

2、凝固度

有一个两字词 \(xy\)\(P(xy)\) 代表词 \(xy\) 出现的概率,凝固度的计算如下

\[\frac{P(xy)}{P(x)P(y)} \]

假如 \(x\)\(y\) 相互独立,那么 \(P(xy) = P(x) * P(y)\) ,凝固度接近于 1,当 \(xy\) 越容易成词,\(P(xy)\) 相比于 \(P(x) * P(y)\) 会更大,凝固度就更大。

对于三字,四字词呢,一般用多种分割方式的最小值作为多字词的凝固度

\[min\left(\frac{P(xyz)}{P(x)P(yz)}, \frac{P(xyz)}{P(xy)P(z)}\right) \]

一般使用中会对概率比值取对数,就变成点间互信息的概念

\[PMI(xy) = log_{2}\left(\frac{P(xy)}{P(x)P(y)}\right) \]

当然取不取对数,在实际使用中区别不太大,都可以卡一个阈值来判断凝固度是否达标。

基于词频和凝固度实现的新词发现:https://kexue.fm/archives/3913

3、左右熵

熵:代表信息的混乱程度,熵越大,代表越混乱,信息量越大

当前词的左熵是指,当前词的左侧出现的字的熵,也就是当前词都可以应用在哪些字后面,应用越广泛,越像一个词。

比如"被子"这个词,左侧有可能是"叠、盖、买、晒、晾",统计这些前置字出现的频率,计算熵值,结果我们可知"被子"的熵值就挺大的

再比如 "日梦"的左侧出现的字可能大概率就是"白",左熵较小,那么就认为"日梦"可能不容易单独成词,实际情况我们知道"白日梦"更适合做一个词

右熵类似计算

左右熵衡量的是一个词在外部的应用场景是否广泛,熵越大,应用场景越多,越有可能成词。

使用时可以取左右熵的最大值、最小值、均值来用,看具体使用场景

4、词内熵

计算当前词左侧部分的右侧对应的外部熵,熵越大,越不可能成词

比如"被子"这个词,看"被"字右侧还可以是哪些字,计算一个熵出来,就是"被子"这个词左部的右熵

相应的也可以计算右部的左熵

词内熵利用熵信息来衡量不成词的概率,与"凝固度"指标相反

来自一个反作弊博主:https://zhuanlan.zhihu.com/p/25499358

5、业务应用

xxxx

6、分词延伸

新词发现问题可以转化为分词问题。分词问题的两类解法

6.1、基于统计的分词

基于字典的前向匹配法、最少成词法、最大概率法

考虑马尔可夫假设,基于语言模型的分词最大概率法

结论:效果已经较好,提升空间较小

6.2、转换为序列标注问题

考虑n-grams文本标注,标签有n个,以n=4举例

f: 单子词或者多字词的首字

s: 词的第二个字

t: 词的第三个字

other: 词的第四个字

那么分词问题就转化成了序列标注问题,标注的标签就是以上四种,序列标注是比较成熟的问题了,可以用HHM 或者 LSTM来解决。

结论:利用神经网络能识别更深层次的语义信息,还有一定的探索空间

苏剑林基于HMM做的分词:https://kexue.fm/archives/3922

苏剑林基于双向LSTM做的分词:https://kexue.fm/archives/3924

7、参考资料

Matrix67的经典新词发现博客:http://www.matrix67.com/blog/archives/5044

苏剑林三步生成新词:https://kexue.fm/archives/4256;更新版:https://kexue.fm/archives/6920

新词发现相关工具:SmoothNLP、HanLP

posted @ 2021-07-27 10:17  wa007  阅读(482)  评论(0编辑  收藏  举报