前言
重点:word2vec无法解决多义词问题
word2vec也叫word embeddings,中文名“词向量”,作用就是将自然语言中的字词转为one-hot形式的类型, 只是不单单是01000的形式了。
经过word2vec处理过的词向量,在向量空间中距离很近。
word2vec是从大量的文本语料中以无监督的方式学习语言知识的一种模型。
当文本语料库中语料很大的时候,使用one-hot形式,会产生很高的维度,不利于计算,通过过word2vec训练一个低维词向量就解决掉维度高的麻烦了,不得不说word2vec是个很棒的加速工具,目前有两种训练模型(CBOW和Skip-Gram),两种加速算法(Negative Sample与Hierarchical Softmax)
CBOW模型是根据中心词预测周围词
Skip-Gram模型是根据周围词预测中间词
其实数学基础及英文好的同学可以参照斯坦福大学Deep Learning for NLP课堂笔记,当然懒得看可以往下看。
一、CBOW模型流程举例
基础是神经网络,通过反向传播,来更新权重,可以得到中间产物词向量
eg:{ I want to learn natural language }
假设我们选 learn 为中心词,window size设为2,我们要根据单词 ”I” , ”want” 。。。”language” <不包含natural> 来预测一个单词,并且我们希望这个单词是natural。
1. 确定输入和输入向量
这里x是6维度one-hot向量
2. 初始化权重矩阵 W ( 自定义 ),X 乘以 W 得到向量 V(代表每一个单词)
W.shape = (6,5)
X是6维向量,5是自定义(神经元个数)
3. 将每个单词得到的V向量相加作为隐藏层(隐藏层也就代表周围词的一个集合,符合由周围的词来预测中心的词)
4. 隐藏层θ乘以W1得到U
W1.shape =(5,6)
隐藏层维度是5,最终得到的Y的维度应和X一致,维度为6
5. 激活函数处理得到V-dim概率分布
由于是one-hot格式,所以每一维都代表着一个单词
经过softmax(U)进行激活, 其中概率最大的index所指示的单词为预测出的中间词