NLP-introduction and word vectors
目录
CBOW (continuous bag of words)
Introduction
注:由于本人第一次使用博客,对公式编辑还不够好,后续会重新编写公式。
Traditional NLP
- 传统的NLP,认为单词是离散特征 (word可以被表示成one-hot 向量)
- 存在问题:用one-hot的方式,数学上没办法表示word的相关性 且 需要的维度和数量都非常大
- 由于上面存在的问题,有人提出分布式语义(distributional semantics)[单词的语义通常是通过上下文才能清楚]
Word2vec introduction
Word vectors
为每个选中的单词构建一个密集向量(dense vector),以便它与出现在类似上下文中的单词的向量相似。
注:词向量(word vectors)也被称为:词嵌入(word embedding)或词表示(word representations)。他是分布式的
Word2vec:Overview
Word2vec(Mikolov et al. 2013) 是一种学习词向量的框架,思想如下:
- 包含大量的文本语料
- 固定词表中的每一个单词由一个词向量表示
- 文本中的每个单词位置 t,有一个中心词c,和它的上下文 o(除了 c 的外部单词)。
- 通过 c 和 o 的词向量相似性来计算 P(o/c)
- 不断的调整词向量,最大化概率
固定窗口,滑动窗口并计算:
Word2vec的目标函数:
对于每个位置 t = 1,...,T,固定窗口大小m,给定中心词wj:
注:log是为了方便将乘法转换为求和(优化处理)
问题:如何计算P(Wt+j | Wt ; 0)
Vw :当 w是中心词
Uw :当w是上下文单词
对于中心词c和上下文单词0,有上述公式:
- 分子取幂函数使得始终为正
- 向量Uo和向量Vc点乘,越大,向量之间越相似
两种经典算法:
word2vec当中包含两种算法:CBOW(根据上下文词汇的词向量来预测中心词)skip-gram(根据中心词来预测上下文单词的概率分布)
还包含两种训练方法:负采样(通过采集负样本来构造新的目标函数)分层softmax(使用不对称的树结构来高效地计算每个词出现的概率)
CBOW (continuous bag of words)
CBOW是根据上下文预测或生成中心词的方法。其基本思想如下:
- 对于输入的上下文单词生成其对应的one-hot
- 构建2个矩阵V和U,
,
。其中,n为构造的词嵌入空间的维度,V为输入单词矩阵。因此每个单词作为输入和输出时分别有两个向量。据此得到上下文的词嵌入向量。
- 对上下文向量进行平均
- 生成一个分值向量z
- 将分值向量换成概率分布y,使得输出的概率向量向真实输出的独热码靠近
需要根据目标损失函数使用梯度下降的方法求解。
skip-gram
思想与CBOW类似,但是这里是利用中心词来对上下文单词出现的概率进行预测。思想如下:
- 对中心词生成其对应的独热码向量x
- 对中心词生成其对应的词嵌入向量vc
- 生成一个分值向量z
- 将将分值向量换成概率分布y,这里生成的概率y是每一个上下文单词对应概率
- 要使得上面生成的上下文单词的概率接近真实的上下文单词的独热码
skip-gram和CBOW的改进
提高训练效率的方法: 负采样
softmax的改进:分层softmax
一般而言,分层softmax适用于对非常用词,非频繁词的改进,而负采样则更适用于频繁词即低纬向量。
分层softmax的思想是根据词频构造一棵二叉树,词汇越频繁,该词汇对应的叶节点距离根节点就越近。每次需要根据一个给定的词去预测另外一个词时,只需要对二叉树上位于被预测的词路径上的节点向量进行更新。因此,对于频繁词汇的更新比较快速,且整个模型的算法复杂度低。