深度学习使用word embedding(词嵌入)的原因

版权声明:转载请声明转自Juanlyjack https://blog.csdn.net/m0_38088359/article/details/83352939
1、基于神经网络的词分布表示,将单词映射到低维连续向量

词嵌入编码了语义空间中的线性关系,向量不同部分表示不同的语义。比如“国王-往后”与“男-女”的类比反映中语义空间的线性关系。

2、相似词映射到了相似方向,语义相似性被编码

近义词或者“相似”词的邻居词分布类似,同样两个词邻居词分布类似可以推出两个词语义相近。比如 “猫 宠物 主人 喂食 蹭 喵 ” 和 “狗 宠物 主人 喂食 咬 汪”这两组词可以推出 v(“猫”)≈v(“狗”)。

3、(优点的角度)

(1)对比one-hot高维稀疏向量,embedding维度低,连续向量,方便模型训练;
(2)一个向量可以编码一词多义(歧义需要另外处理);
(3)天然有聚类后的效果;
(4)罕见词也可以学到不错的表示。

附录:浅析word2vec

连续词袋模型Continous Bag of Words Model(CBOW)和Skip-Gram Model。CBOW根据某个词前面的C个词或者前后C个连续的词,来计算某个词出现的概率。Skip-Gram Model相反,是根据某个词,然后分别计算它前后出现某几个词的各个概率。以“我爱北京天安门”这句话为例。假设我们现在关注的词是“爱”,C=2时它的上下文分别是“我”,“北京天安门”。CBOW模型就是把“我” “北京天安门” 的one hot表示方式作为输入,也就是C个1xV的向量,分别跟同一个VxN的大小的系数矩阵W1相乘得到C个1xN的隐藏层hidden layer,然后C个取平均所以只算一个隐藏层。这个过程也被称为线性激活函数。然后再跟另一个NxV大小的系数矩阵W2相乘得到1xV的输出层,这个输出层每个元素代表的就是词库里每个词的事后概率。输出层需要跟ground truth也就是“爱”的one hot形式做比较计算loss。这里需要注意的就是V通常是一个很大的数比如几百万,计算起来相当费时间,除了“爱”那个位置的元素肯定要算在loss里面,word2vec就用基于huffman编码的Hierarchical softmax筛选掉了一部分不可能的词,然后又用nagetive samping再去掉了一些负样本的词所以时间复杂度就从O(V)变成了O(logV)。Skip gram训练过程类似,只不过输入输出刚好相反。

猜你喜欢

转载自blog.csdn.net/m0_38088359/article/details/83352939