把词映射为向量(实数域)的技术
2. 为什么不采用one-hot向量:
one-hot词向量无法准确表达不同词之间的相似度,eg:余弦相似度,表示夹角之间的余弦值,无法表达不同词之间的相似度。
3. word2vec主要包含哪两个模型
跳字模型:基于某个词生成它周围的词(每个词表示为两个d维向量用来计算条件概率)eg: the man loves his son, 可以给定中心词“loves”, 生成距离不超过两个词的条件概率(P(the、man、his、 son | loves),即P(the|loves).......
连续词袋模型: 与跳字模型基本类似,最大的不同在于基于某中心词再文本序列前后的背景词来生成该中心词。(P(loves|the、man、his、son), 即P(love|the)
4. 模型的重要因素
跳字模型:我们通过最大化似然估计来学习模型参数,等价于最小化以下损失函数
定义损失函数: 最大化似然估计等价于最小化损失函数
5. 如何降低计算复杂度(近似训练)?
负采样:负采样通过考虑同时含有正样本和负样本的相互独立事件来构造损失函数。其训练中每一步的梯度计算开销与采样的个数线性相关。
层序softmax:使用了二叉树,并根据根结点到叶结点的路径来构造损失函数。其训练中每一步的梯度计算开销与词典大小的对数相关。
6. 如何训练
构造嵌入层:将中心词和背景词由索引变为向量,定义超参数向量维度。
小批量乘法:中心词(批量大小,1)、背景词(批量大小,max_len) ,通过小批量乘法得到输出(批量大小,1, max_len),输出的每个元素是中心词向量和背景词向量的内积。
定义损失函数:根据负采样中损失函数的定义,可以直接使用Gluon的二元交叉熵损失函数。
定义训练模型:可以通过负采样进行训练。
7. 全局向量的词嵌入
子词嵌入(fastText):在跳字模型的基础上,将中心词向量表示成单词的子向量之和。(eg:dogs,dogcatcher都有相同的词根)
全局向量的词嵌入(GloVe):在有些情况下,交叉熵损失函数有劣势,GloVe采用了平方损失,并通过词向量拟合预先基于整个数据集计算得到的全局统计信息。任意词的中心词向量和背景词向量在GloVe模型中是等价的。