word2phrase解读

Reading time ~1 minute

word2vec的源码中,自带着另一个工具word2phrase,之前一直没有关注,可以用来发现短语. 代码写的很精练,不到300行,那么我们可以看一下,这不到300行的代码是如何实现短语发现的。

一、参数

  • train: 训练文件(已经分好词的文件)
  • debug: 是否开启调试模式 (debug=2,在训练时会有更多的输出信息)
  • output: 输出文件
  • min-count: 最小支持度,小于该值的词将不会被采用,缺省为5
  • threshold: 超过该得分,才形成短语,该值越高,形成的短语也会越少。(default:100)

二、词汇表

struct vocab_word {
    long long cn;    //
    char *word;    //
};

每个词汇由vacab_word构成,由这些词汇形成一个大的词汇表:vacab_hash。(最大条目:500M个)

三、模型训练 TrainModel()

内部原理很简单:是一个分词后2-gram的模型,统计出现频次. 本质是利用互信息(mi)计算内聚程度。(内部做了一些内存优化=>牺牲了一点点准确性,如果想更准,不如自己写map-reduce或spark)

公式为:

score = (pab - min_count) / (real)pa / (real)pb * (real)train_words;

可以简化为:

互信息只是简单的多个log2而已.

如果你有做过新词发现等经验,就知道这并不是一个比较优的方法,目前流行的做法是:互信息+min(左右邻字信息熵). 这里的字换成词即是短语发现.

bitcoin中的矿池运营与破产

# 1.泊松分布与挖矿问题[泊松分布](http://baike.baidu.com/link?url=G_p2pcziH7dsjuum83USwOumJgO7TK41ZxuGTdI03jLF_Ugd4Q5KkpITcTSAeIuMao5royrH86GBvJS8DKh0R...… Continue reading

word2vec中的Hierarchical Softmax

Published on February 02, 2016

word2vec中的subsampling

Published on January 25, 2016