入坑NLP一——Skip-Gram 模型理解
1 首先介绍一下one-hot编码:)
举个栗子,
“he is a sunshine boy",
我们想把这句话中的每一个单词都用向量表示,一共5个单词,我们就用5-dim的向量来表示。
he => (1,0,0,0,0)
is =>(0,1,0,0,0)
…
boy =>(0,0,0,0,1)
像这样,对应的维度为1,其余的维度都为0,这种表示方式就是one-hot了。
2 Skip-Gram模型
我们可以看到,one-hot仅仅能用来表示一个单词,不能表示单词之间的关系;这里的Skip-Gram模型的最终目的是为每一个单词建立一个d-dim的词向量,词向量能反映单词之间的相似度。
方法
采用的方法非常有意思,构建一个三层的全连接神经网络,
输入层:中心单词的one-hot表示,一个n维向量;(n为词汇表维度)
隐藏层:输入通道为n,输出通道为d;
输出层:输入通道为d,输出通道为n。
所采用的训练数据,input为某个i位置的单词one-hot表示(0<=i<n),label为上下文单词的one-hot表示(上下文说的是半径r内的单词)。
利用softmax分类器,最终能得到一个单词的上下文在词汇表上的概率分布,跟label对比计算误差,反向传播,让模型就这样训练。
最终所需要的结果
我们知道,输入层到隐藏层,是有一个参数连接的权重矩阵W的,维度为n * d,而这个W就是我们最终需要的。(简直太神奇了,辛辛苦苦做一个分类器,最终要的不是这个分类器,而是里面的权重矩阵)
我们知道,词汇表是n-dim的,而这里n * d的矩阵,正好给每一个单词都能对应上一个d-dim的向量,我们称之为单词的词向量。
好处
- d一般不会太大,节省空间;
- 通过计算不同单词词向量的内积,能得到他们的相似度。