单词: 不能以文本形式直接输入到机器训练
-> 需要转换为向量的形式输入

  1. 简单的直接用one-hot 一个词一个编码
    缺点: 随着词的数量增加维数越来越多,并且会很稀疏;
    词之间没有联系
  2. word2vec
    其实就是一个简化的神经网络,输入one hot vector,经过线性隐藏层,输出维度和输入一致,用的是softmax回归。然后以这个形式输入到机器进行后面的分类或其他训练预测。
    这个模型的输入和输出的定义:一般使用CBOW(连续词袋) 或 skip-gram 两种模型来定义。
    1)CBOW
    输入:每个特征(target word,目标词/中间词,因为是根据它的左右也就是上下的词预测它而得名)的上下文词对应的词向量
    输出:此特征(target word)的词向量
    适合于:小型数据集
输入层:上下词的one-hot
	  采用的上下词的个数C由设置的窗口大小决定,而单词向量空间设为V维,那么输入的大小就是C*V-dim
=》所有one-hot分别乘以共享的输入权重矩阵W,这是个大小为V*N的矩阵,N由自己初始化
=》所得的向量相加求平均作为隐藏层向量,显然size为1N
=》乘以输出权重矩阵W‘
=》输出层
	得到的是1N向量,经过激活函数处理得到V维的概率分布,概率最大的索引所指示的单词即为target word
	需要定义损失函数:上面得到的target word对应的vector和真实label的one-hot做对比,误差越小越好
	采用梯度下降更新W,W'
训练完毕后,输入层每个单词和最后的W相乘得到的向量就是我们所需的词向量(word embedding)。

2)Skip-Gram
输入:可以说是和CBOW相反,它是利用input word预测上下文。
输出:我们指定窗口大小(skip_window)的上下文词的数量
适合于:大型语料库
需要设置的参数:skip_window和num_skips

example:
		skip_window表示从每个input word左右两侧各选取词的数量,
				   整个窗口大小为span= size(skip_window) * 2,
				   如果中心词左侧或者右侧的词数量< size(skip_window),
				   则窗口中的词(不包含input word时候)<span
		num_skips 代表我们从窗口中选择多少个不同的的词作为output
		也就是每个单词生成的样本数量,不能超过skip_window的两倍,并且必须是batch_size的整数倍
		借用一个图:

word2vec库 输出模型结构 word2vec输出是什么_词向量


蓝色代表input word,此图的skip_window就是设为2。如果我们的num_skips设为2,那么在input word 为“quick”的时候,我们会只得到两组(input,output)形式的training smaples。