词向量定义
词向量定义:机器通过读大量文档无监督学习词的意思。其过程如图所示,向神经网络输入一个词,找到对应的词向量,这个词向量是多维的投影到二维空间,可以看到,越相似的词距离越接近,
学习是无监督的:训练时不能判断输出是否正确
词向量发展
词向量的发展最开始是将世界上所有词都用one-hot表示 one-hot即只有一维是1,其余全0,但是所有向量是正交的不能表示词之间的相似度,然后想到将词分成不同类,但是类之间的相似度不能展现出来,如图所示,class 1和class 3都是生物比class2 更相似。最后现在的方法是用word2vec 将词映射到一个空间,每一维都包含特别的含义。可以通过两个词的点积计算两个词的相似度。另一个更常用的方法是余弦,它会除去向量的大小,但是在这里不需要,因为当一个向量变大,计算一个单词k的概率也会很大,其他词的概率也会很大,这样就无效了,所以用最简单的计算方法。
word2vec理论来源
Word2vec的主要理论是一位英国语言学家在1957年提出的分布式语义,即一个词的意思有频繁地出现在周围的其他词得出,举个例子,特朗普宣誓就职,拜登宣誓就职,它们的上下文都是宣誓就职。可以认为特朗普和拜登有相似的意思
怎样利用上下文
基于计数
基于计数的思想是如果两个词w_𝑖 和w_𝑗 经常在一起出现,则他们的向量V(w_𝑖)和V(w_j)非常接近,算wi和wj两个向量的内积,Ni,j为在同一文档中w_𝑖 和w_𝑗 出现次数
,算他们两个的交叉熵(shang)。通过训练使交叉熵最小。交叉熵越小越好,如果交叉熵=0则表示两个分布相同。
基于预测
基于预测的思想是,通过训练一个神经网络来预测下一个词的概率,把一个词的one-hot输入一个神经网络,输出每个词是这个词的下一个的概率,将神经网络隐藏层第一层神经元的输入拿出来,用它代表词w。
例如上面的例子,把特朗普和拜登输入,则宣誓就职都会有比较大的概率且大小差不多,为了得到这样的结果则需要输入经过参数转换后在进入隐藏层之前要对应到接近的位置,这样输出的概率才会是相似的。
共享参数
用一个词不够准确,拓展input,通常是10个,现在用两个的作为例子,
共享参数即如图所示用相同颜色画的权重是相同的,为什么要共享参数,有两个点,可以减少参数量,如果不共享参数的话,将两个词的位置对换则生成词向量不同
两种模型
Word2vec有两种模型,一个是给出上下文预测中心词的cbow
一个是给出中心词预测上下文的ski-gram
skip-gram
Skip- gram模型的输入的选择主要步骤是这样的,设窗口大小为2m,center中心词左右长为m,窗口里的词即为一次输入,每次移动一格,遍历文档直到结束。由中心词预测上下文, 怎么计算
首先θ为唯一参数, 每个单词用两个向量表示,当w为中心词时用v_w表示,当w为上下文时用u_w 表示 , 每个向量d维,则洗它的大小为2dv上面的例子就可以表示成这样.为什么要用两个向量呢, 两个向量相互独立,更容易优化
Xk为中心词的one-hot ,vc是xk乘以中心词矩阵w得到的中心词向量长度是|N|,远远小于|V|,然后再乘以上下文矩阵w次, 点积比较词o和词c的相似度.点积越大=相似度越大,最后放到激活函数softmax中就是这个式子
Softmax是什么呢,怎么算的可以看这个例子,将3,1,-3分别作为e的指数再除以他们的和,这样做的作用就是,可以使最大值的辨识度更高,并且将数值转换成概率,输出的值符合概率的性质,大于0 小于1,并且和为1
训练
训练要找最好的条件概率模型,必须设定损失函数评估模型的好坏,用的是极大似然估计, 找使概率最大的参数, 因为机器学习里面习惯求最小值,所以加个负号变为求最小值,乘以t分之一,去除文档大小的影响.
CBOW
CBOW与Skip-gram不同的是它输入上下文,输出的是中心词的概率,将上下文的one-hot算平均值再与上下文矩阵相乘得到上下文向量Uc,再与中心词矩阵相乘得到输出向量,word2vec只有一层的神经网络减少了运算量,比之前提出的深度的语言模型要好和快。
梯度下降
模型建好后要训练,训练方法一般为梯度下降,要找损失函数的最小值,先随机取,算在这一点的微分值,微分值可以体现函数的陡峭程度, 函数越陡峭表示离最低点越远,步伐就要大,即微分值越大,这个值就会变大,越平坦可能离最低点越近,步伐就要小,下一点是上一点减去学习率乘上该点的微分值,再重复二三步直到微分值=0,为什么是减呢,因为当微分值为正表示函数在上升就要往回走,为负表示函数在下降就要往前走,即如果是微分值负的则增加w,是正的则减小w,所以要加个负号。
阿拉法是学习率,控制参数更新的幅度,
随机梯度下降
但是普通的梯度下降的损失函数覆盖所有样本数据,,每一次更新参数都要算所有的,语料库很大,每次更新会很慢,所以改为随机梯度下降,每次只选一个样本数据进行参数更新,这样会更快。(精确度低,收敛慢)
两种训练技巧
层次softmax
论文还介绍了两种训练技巧, 加快训练速度,想法是减少soft Max的输入量y,他的长度为V太大,一种方法是层次softmax, 将所有词按照词频构造成一个哈夫曼树, 词为叶子结点,向左走的概率,细噶吗是激活函数softmax,vn次是输出矩阵,在Cbow里面是中心词向量, skip-gram则是上下文向量,h为隐藏层, Cbow里面是上下文向量, skip-gram则是中心词向量,概率()为根结点到该叶子结点前一个内结点的路径的概率例如我们要算output〖是𝑤〗_2 的概率:从根结点向左走的概率再乘以向左走的概率, 再乘以向右走的概率.
负采样
另一个技术是负采样, 原来的是多分类问题,改为二分类. 把中心词和上下文组成正样本,中心词和随机从文本中取k个词,组成k个负样本,虽然是随机的可能会取到上下文,但是语料库太大,取到的概率很小,小到可以忽略.损失函数定义为正样本的概率减去负样本的概率.它比层次softmax更快更好
Word2vec得到的向量可以展现有趣的特性,比如将国家和首都摆在一起,动词的三态摆在一起,有某种固定的特性,用word2Vec可以发现不知道的单词之间的联系.比如两个词之间相减,投影到一个二维空间中,两个词之间的关系会很接近.比如这里的金鱼属于鱼,公鸡属于鸡,他们都落在临近的区域,
Word2vec可以运用在机器翻译中,相同意思的词会落在同一区域.
------------- l
参考资料
李宏毅机器学习课程
斯坦福CS224N自然语言处理课程
word2vec parameter learning explained论文