陌路茶色/

word2vec实现原理

本系列争取将现有语言模型的实现原理全部过一遍,力求明了。

本篇文章讲述word2vec的实现原理,目前只讲解skip-gram + negative sampling的方法,已分别使用spark和pytorch实现。【当然可以说是搬运。。。】

Word2vec

关于基础请参考word2vec,讲的相当详细了。

skip-gram

如下图所示,cbow和skip-gram的语料是这样生成的:
屏幕快照 2019-12-10 下午9.55.45.png

negative sampling

构建table如下所示:

#负采样tabel初始化
def init_sample_table(self):
    self.sample_table = []
    sample_table_size = 1e8 # M
    pow_frequency = numpy.array(list(self.word_frequency.values()))**0.75 #对频次取0.75的幂次,弱化频次对采样的影响
    words_pow = sum(pow_frequency)
    ratio = pow_frequency / words_pow #每个词对应的占比
    por=0
    k=0
    for i in range(int(sample_table_size)):
        if ((i+1)*1.0)/(sample_table_size*1.0)>por:
            por+=ratio[k]
            k+=1
        self.sample_table.append(k-1)

    self.sample_table = numpy.array(self.sample_table)

参考LINE,line的论文以及源码对word2vec的理解都有很大的帮助。

推荐阅读

留下一条评论

暂无评论