小白可以读懂的word2vec
Word2Vec
1,什么是word2vec
我对Word2Vec的理解:使意思相近的词有距离相近的向量。
为了得到这种词向量就提出了用这个词的上下文来解释它,举个例子:‘爱’和‘喜欢’有很大概率出现在相同句子的相同位置,比如说:‘我爱你’和‘他喜欢你’,‘小明爱学习’和‘小红喜欢学习’;那么这两个词通过前面的上下文训练出来的词向量距离就是相近的。
2,word2vec的两种训练方式
skip-gram:通过中心词来预测上下文
cbow:通过上下文来预测中心词
下面用skip-gram来举例
3,skip-gram公式
写一下公式:
c=1,2,…T c:表示文本中词每一个位置 Wc:该位置的词
第一个指的是算完第一个中心词再算下一个中心词;第二个指的是中心词周围的词的概率相乘
举个栗子:
文本:我 每天 吃饭 睡觉 打 豆豆
以吃饭为例,c=3,设m=1(m看你心情) : 就变为
这里希望likehood越大越好,loss则是越小越好,所以加了‘-’号,为了好计算又加上log,原式变为:
这里希望Loss越小越好,θ是要训练的参数。
4,skip-gram过程
文本:我 每天 吃饭 睡觉
1,将文本当中的词变为onehot输入,I_{吃饭}=[0,0,1,0]I_{睡觉}=[0,0,0,1]$
2,设m=1,四个词都要作为中心词,这里以吃饭作为中心词为例:
‘吃饭’作为输入,在m=1的情况下有‘每天’‘睡觉’作为输出,这里需要两个需要被训练的矩阵,(4是因为文本只有4个词,n是你定义的词向量的维度,下面设n=3)
这里需要训练W和W’,而W的一行就是一个词向量
预测’每天‘就使最大;预测‘睡觉’就使最大;这里一般使用交叉熵损失
这样我们就可以得到词向量模型→W
5,模型改进
减小模型训练量的方法:
1,Negative Sampling(负采样):改变n个观察值的权重,而不是所有
2,Hierarchical Softmax(霍夫曼树):高频词更容易得到训练