终于开了NLP的坑了(`・д・´),这次聊聊词向量是怎样生成的。现在有很多现成的模型,cbow,skip-gram,glove等,在python不同的库里面就可以调用(比如fasttext,genism等)。当然啦,这种百度搜索就能找到怎么import,怎么调参的内容我在这就不多叙述了。这次主要在数学层面上用实例讲讲词向量到底是怎么生成的。
遇到这个问题的时候,网上有个很经典的 《word2vec的数学原理》上面一文解释得很详细,但小白入门会看得很蒙逼,不知道初始向量值是怎么来的,全局来调用是怎样运行的。所以我就希望写一篇文章,举一些例子,去阐述这个词向量到底是怎样产生的。
《word2vec的数学原理》传送门 ( ・ˍ・) word2vec数学原理
这次我们主要以基于hierarchical softmax的cbow模型讲讲。这个模型有输入层,映射层,输出层(这些层具体怎么操作后面)首先我们有一些分好词的语料库。一般泛泛而谈的话,这两者区别在于cbow是一个词预测周围的词,skip-gram是周围的词去预测中心词。
下面我们列简单的几句话看怎么产生词向量。
日本的/新垣结衣/演技/好
演员/新垣结衣/演技/在线
初始化
在这个模型中,我们得设定好,我们生成的向量是几维的,窗口取多大。
解释:
维数:就是指词向量的维数,一般不能低于32维,毕竟如果语料库大,需要涵盖的信息多
窗口:就是取某个词的前后n个作为这个词的文本。比如我取n=1,词=‘新垣结衣’ÿ