推荐:http://spaces.ac.cn/archives/3491/
http://www.matrix67.com/blog/archives/5044
http://www.hankcs.com/nlp/new-word-discovery.html
其实很多人都已经知道这个算法了,是由Matrix67牛人提出来的,实现的方式也有很多人解决了。我只是写个最简单的介绍和实现方式给自己做做笔记罢。该算法最主要是基于互信息和左右熵的计算规则,而这两个概念都是出自信息论的范畴,其一者称内部凝和度,其二者称外部自由度或者边界自由度。
这里有三个阈值:
第一是最小互信息,因为互信息越大说明相关度越大,将n-gram分好的词计算互信息,如果低于阈值,则说明不能成词。
第二是最小熵值,因为熵也是越大说明周边词越丰富,计算其左熵和右熵的最小值,如果最小值低于阈值,则说明不能成词。
第三个是最少出现次数,为什么有这个数呢?假设前后两个词是完全相关的,出现400次,总共8000词,那么互信息=log((400/8000)/(400/8000)*(400/8000)),约掉之后剩下log(8000/400)。但是一个词如果从头到尾出现了一次,但是并不是单词,则互信息为=log((1/8000)/(1/8000)*(1/8000))=log(8000/1),那么它的互信息会更大。取最少出现次数也会出现问题,就是一些低频率的词不能发现。
我拿了三体去做了新词发