分词算法 SmoothNLP

背景

使用熵信息和概率,通过熵信息提高左右邻字丰富程度,通过概率提高内部凝聚程度。

为什么考虑左右邻丰富程度

其中W_neighbor为字符组合左/右邻字的集合。 举个例子,同样是在文本中出现6000+次的“副总裁”和“人工智”,字符组合的左熵都在6左右,但“副总裁”的右邻字包括 { 张,王,说, … } 等147个词,而“人工智”的右邻字只有 { 能,障 } 两种,显然“人工智”不能称作一个词。可以看算法模型中的图。所以说,并不是左右邻字越丰富,就越可以看做是一个词。

为什么考虑内部凝聚程度

比如“演唱者”出现117次,“的演唱”出现275次,从出现频数来看,“的演唱”更像是一个词。但是实际来向演唱者才是一个词。因此考虑每一个字的概率,加入互信息中,得到最终的结果。

为什么需要同时考虑左熵(LE)和右熵(RE)

因此我们在度量一个字符组合的左右邻字丰富程度时,也要注意到LE和RE的差距。比如取二者的最小值,或者将LE与RE差的绝对值(|LE-RE|)纳入考虑范围。

模型

(1)首先得到ngram,例如bi-gram, tri-gram,得到n-gram后,可以依据频率做一个划分,频率较高的词拿出来当作目标词进行考虑, 相当于是bi(两个词), tri(三个词), n-gram(n个词),计算概率是可以在这些词中进行计算。
(2) 计算左熵和右熵(我觉得这里可以先依据停用词做一个划分),左熵和右熵要同时考虑。计算熵时,例如目标词“资源”(2-gram),然后在(3-gram)中,找资源的左邻字和,右邻字。这里在查找过程中,使用字典树(前缀树)的算法。

计算熵:构建好字典树之后,就可以计算左熵和右熵。计算完左熵和右熵之后,通过公式进行融合计算。

分词算法 SmoothNLP_第1张图片
求右熵:目标词:人工智,然后求人工智的熵,通过熵,我们计算关于人工智能,人工智障出现的和,反映信息的度量。
2表示的基。第一个表示在“”人工智"前提下不同字的熵和。
分词算法 SmoothNLP_第2张图片
上述这一块可以反应出,为什么使用熵可以反应出这个信息。数量越多,熵值是越大的,即拥有丰富的邻字信息。

(3)计算互信息
(4)熵与互信息的融合

左右邻丰富度:
L ( W ) = log ⁡ L E ⋅ e R E + R E ⋅ e L E ∣ L E − R E ∣ L(W)=\log \frac{L E \cdot e^{R E}+R E \cdot e^{L E}}{|L E-R E|} L(W)=logLERELEeRE+REeLE
词的凝聚度:
A M I = 1 n log ⁡ p ( W ) p ( c 1 ) ⋯ p ( c n ) A M I=\frac{1}{n} \log \frac{p(W)}{p\left(c_{1}\right) \cdots p\left(c_{n}\right)} AMI=n1logp(c1)p(cn)p(W)
融合后:
 score  = A M I + L ( W ) \text { score }=A M I+L(W)  score =AMI+L(W)

附录

信息熵

在这里插入图片描述

互信息

互信息被用来描述词的内聚程度
分词算法 SmoothNLP_第3张图片

在这里插入图片描述

相关参考资料

开源讲解链接:https://zhuanlan.zhihu.com/p/80385615
https://baike.baidu.com/item/%E4%BA%92%E4%BF%A1%E6%81%AF/7423853?fr=aladdin (百度百科互信息)

你可能感兴趣的