这是一篇2003年的论文,早在当年就提出了基于词语分布构成词向量以克制词袋模型带来的高维诅咒问题。作者希望模型同时学习到:1、词语的分布式表示;2、基于1所给出的词组的概率分布。这样一来,对于训练期间没有学习到的陌生的短语组合,只要根据其上下文的词语的分布式表示就能大致判断出含义,这种用上下文表示词语含义的方式在后来的Word2Vec中也沿用了。
这篇文章是在2013年Word2Vec问世后才被业内广泛打捞出来的,从文章引用内容来看,更早期也出现了意图使用分布式表示词向量的学者。
简介
文章首先介绍了当时的自然语言处理面对的主要问题:维数灾难。这是因为早期的自然语言任务大多以BOW来表示词语,也就是用一个维度和词典长度相同的稀疏向量来表达词语,这当然会产生各种各样的问题,包括并不限于计算量大,难以取得泛化效果,难以学习词语之间的关系等。
传统的统计语言模型是以“给定前述词汇时下一个单词出现的概率”来表示的:
可以看到是类似一阶马尔科夫链的形式,每个词出现的概率是前面所有的P(Wt|W1^t-1)的乘积。 而一 这个模型相当复杂:每一个词汇的概率都要计算其前面所有词的条件概率乘积,是T个长序列条件概率的乘积,句子稍微长一点就没什么可用性了。
一个事实是在自然语言文本中,距离某个词语越近的其他单词越与该单词的语义表示相关,再考虑到词序的重要性,作者就提出了改进的方案:
这样一来,其实就是用ngram代替了长距离条件概率。
作者提出用ngram表示来发现未出现在训练集中的新的词组含义,这是由于新词组往往也是由训练集中出现的word组成的,但这样的做法存在一些问题,比如说,往往与当前词语关联的信息蕴含在距离当前词汇更远的词语中,而不是常用的3gram范围内。此外,纯粹的ngram条件概率方法也没有考虑到单词间的相似性。
分布式表示:对抗高维诅咒
作者提出用分布式向量来表示词汇特征,该特征具有两方面的意义:1、克服BOW的维度灾难;2、能够通过向量相似度表现近义词之间的相似性,后来的Word2Vec的目标基本也与其相同。
目标函数依然选择给定前述单词的情况下,下一个单词的条件概率,当时似乎还没有考虑到采用单词后面也就是下文的内容。
与以前工作的关系
其中g表示神经网络模型的推理结果,该公式用神经网络模拟的高维离散分布,在当时是较为成功的。作者希望把这一公式套用到自然语言处理中,当然,由于句子长度的可变性,还是要进行修改。作者的设想是每一个Zi对应的是一个单词,一个句子的出现概率就是各个单词的联合分布,此外,这种格式也引入了跨时间参数共享的原则,而不再是一个单词只受排在它前面的单词的影响。
作者希望采用类似的目标函数,并非完成某一特定任务,而是学习出一组用于表示单词的词向量。
神经网络模型
其中w1,w2,...wn为被词典V包含的单词,上文公式是作者希望建模时学习的目标函数。
由于作者使用困惑度来评价模型,所以这里插播一下困惑度的介绍。
本段引用自:zhuanlan.zhihu.com/p/44107044
困惑度(perplexity)的基本思想是:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好, 公式如下:
由公式可知,句子概率越大,语言模型越好,迷惑度越小。
好了,回到原文章。
作者认为,该模型唯一的约束就是:
f()实际上就是对于每个样本i,其位于当前上文情况下的条件概率。 那么求和为1即当前句子出现概率为1,由于句子本身是真实存在的,所以必为1,这是模型的唯一约束
那么分解目标函数可得:
其中,C表示将单词映射为分布式向量的矩阵,维度为|V|m,即单词种类数向量预设维度m。 g则表示将经过C运算后的词向量输入转换为目标概率的计算函数。 上述两项运算的整合就是函数f,也是上述的式子。
于是就是这张经典图。
其实看图就非常简单了,就是准备一个把单词映射为向量的矩阵C,把各个单词映射为词向量后再经过g对应的运算转化为概率值,最终softmax出结果。g的全部参数记作ω,再加上矩阵C就是全部的参数,这些参数全部用θ=(ω,C)包括,于是最终模型的形式就是:
其中R为控制参数复杂度的正则项。
由于C是高度为|V|的矩阵,因此参数量是与单词数量|V|呈线性相关的,但如果采用类似时序结构的模型等,也能降低参数数量与单词数量的相关性。(sub-linear:亚线性,与x^0.5相关而非与x线性相关)
作者提到通常会再添加一个线性隐藏层,然后再在输出层使用softmax实现输出分类概率分布。
最终y的计算方式如下:
其中,x为特征词向量,具体为:
可以看到,词向量不仅作为tanh隐藏层的输入,也作为直接进入softmax层的输入。
H、d、U均为使隐藏层正常运算的超参。
后续的基本是参数优化内容,第三个大章讲并行逻辑的,等有时间再看吧。