word2vec 过程理解&词向量的获取

网上有很多这方面的资源,详细各位都能够对于word2vec了解了大概,这里只讲讲个人的理解,

目的:通过对于一个神经网络的训练,得到每个词对应的一个向量表达

基于: 这个神经网络,是基于语言模型,即给定T个词的字符串s,计算s是自然语言的概率p(w1,w2,…,wt)而构建的,更直白点,就是通过输入wi的上下相邻的n个词(n-gram方法),来就算输出是wi的概率

方案:CBOM和skip-gram两种,每一种有分别有霍夫曼和nec的2种实现方式,所以总共有4种实现模式。

网络:
CBOM 霍夫曼:
输入:与wi相邻的n个节点的one-hot表达向量维度为V(V为语料库的单词总数)

过程:
step1:n个V维向量与V*m维权重向量Wc相乘,得到n个m维的向量(m就是最后每个词所对应的词向量的维度,自己设定)

step2:n个m维的词向量求和得到一个m维向量作为霍夫曼层的输入

step3:下面就是网上很多资料讲解的一个算P(wi|contenti)的过程了,在此不讲具体的,霍夫曼树是为了是计算P(wi|contenti)的时间复杂度降到log级,树上的每个非叶子节点上都有一个m维的向量参数,与step2得到的输出相乘相加通过一个sigmod的激活函数来算的此节点的概率。

输出: P(wi|contenti)的概率

其中loss是cross-entropy,然后反向传播,更新网络中的参数。

词向量就是step1中的输出,一个词对应一个m维的向量。

CBOM nec:
step1和step2一样,只不过优化计算P(wi|contenti)的时候,没有采用霍夫曼树,而是通过对语料库的数据采样来计算,而不是遍历整个语料库。

skip-gram和CBOW刚好相反,
输入是一个单词
输出其上下相邻单词的概率
词向量也蕴含在one-hot到m维向量的转换中。

强烈建议看一下:
word2vec Parameter Learning Explained

* 除此之外附上几个较为有用的word2vec资料:*

word2vec中的数学原理详解

深度学习word2vec学习笔记

https://blog.acolyer.org/2016/04/21/the-amazing-power-of-word-vectors/?blogsub=confirming#subscribe-blog

word2vec 构建中文词向量

你可能感兴趣的:(nlp)