词表示是自然语言处理的基础,一个好的词向量在很大程度上决定了后续任务的上限。本文是我最近学习该部分内容的笔记,主要参照的是基于神经网络的词和文档语义向量表示方法研究一文,穿插了一些个人理解。内容较多,错误难免,请拍砖~
分布表示(Distributional Representation)假说:上下文相似的词,其语义也相似。根据建模方式的不同,主要分为三类:基于矩阵的分布表示、基于聚类的分布表示和基于神经网络的分布表示。
尽管不同的分布表示方法使用了不同的技术手段获取词表示,但由于这些方法均基于分布假说,它们的核心思想也都由两部分组成:
- 选择一种方式描述上下文
- 选择一种模型刻画目标词与其上下文之间的关系。
基于矩阵的分布表示
基于矩阵的分布表示通常又称为分布语义模型(distributional semantic models)。这类方法需要构建一个“词-上下文”矩阵,从矩阵中获取词的表示。在“词-上下文”矩阵中,每行对应一个词,每列表示一种不同的上下文,矩阵中的每个元素对应相关词和上下文的共现次数。在这种表示下,矩阵中的一行,就成为了对应词的表示,这种表示描述了该词的上下文的分布。由于分布假说认为上下文相似的词,其语义也相似,因此在这种表示下,两个词的语义相似度可以直接转化为两个向量的空间距离。这类方法具体可以分为三个步骤:
- 选取上下文。最常见的有三种方法:第一种,将词所在的文档作为上下文,形成“词-文档”矩阵(term-document matrix);第二种,将词附近上下文中的各个词(如上下文窗口中的5个词)作为上下文,形成“词-词”矩阵;第三种,将词附近上下文各词组成的n-gram作为上下文 。在这三种方法中,“词-文档”矩阵非常稀疏,而“词-词”矩阵相对较为稠密,效果一般好于前者。“词-n-gram”相对“词-词”矩阵保留了词序信息,建模更精确,但由于比前者更稀疏,实际效果不一定能超越前者。
- 确定矩阵中各元素的值。“词-上下文”共现矩阵根据其定义,里面各元素的值应为词与对应的上下文的共现次数。然而直接使用原始共现次数作为矩阵的值在大多数情况下效果并不好,因此研究人员提出了多种加权和平滑方法,最常用的有tf-idf、PMI 和直接取log。
- 矩阵分解(可选)。在原始的“词-上下文”矩阵中,每个词表示为一个非常高维(维度是不同上下文的总个数)且非常稀疏的向量,使用降维技术可以将这一高维稀疏向量压缩成低维稠密向量。降维技术可以减少噪声带来的影响,但也可能损失一部分信息。最常用的分解技术包括奇异值分解(SVD)、非负矩阵分解(NMF)、典型关联分析(Canonical Correlation Analysis,CCA)、Hellinger PCA(HPCA)。
著名的 Global Vector模型(GloVe)就是基于矩阵的分布表示
基于聚类的分布表示(分布聚类)
基于聚类的分布表示又称作分布聚类(distributional clustering),这类方法通过聚类手段构建词与其上下文之间的关系。其中最经典的方法是布朗聚类(Brown clustering)。布朗聚类是一种层级聚类方法,聚类结果为每个词的多层类别体系。因此可以根据两个词的公共类别判断这两个词的语义相似度。
这个方法似乎没有太多主流的应用,所以我没有做深入研究
基于神经网络的分布表示(词向量)
基于神经网络的分布表示一般称为词向量、词嵌入(word embedding)或分布式表示(distributed representation)。神经网络词向量表示技术通过神经网络技术对上下文,以及上下文与目标词之间的关系进行建模。由于神经网络较为灵活,这类方法的最大优势在于可以表示复杂的上下文。在前面基于矩阵的分布表示方法中,最常用的上下文是词。如果使用包含词序信息的n-gram作为上下文,当n增加时,n-gram的总数会呈指数级增长,此时会遇到维数灾难问题。而神经网络在表示n-gram时,可以通过一些组合方式对n个词进行组合,参数个数仅以线性速度增长。有了这一优势,神经网络模型可以对更复杂的上下文进行建模,在词向量中包含更丰富的语义信息。
神经网络词向量模型与其它分布表示方法一样,均基于分布假说,核心依然是上下文的表示以及上下文与目标词之间的关系的建模。构建上下文与目标词之间的关系,最自然的一种思路就是使用语言模型。
语言模型
语言模型可以对一段文本的概率进行估计,对信息检索、机器翻译、语音识别等任务有着重要的作用。形式化讲,统计语言模型的作用是为一个长度为的字符串确定一个概率分布,表示其存在的可能性,其中到依次表示这段文本中的各个词。一般在实际求解过程中,通常采用下式计算其概率值:
在实践中,如果文本的长度较长,上述公式右部的估算会非常困难。因此,研究者们提出使用一个简化模型:n元模型(n-gram model)。在n元模型中估算条件概率时,距离大于等于n的上文词会被忽略,也就是对上述条件概率做了以下近似:
在元模型中,传统的方法一般采用频率计数的比例来估算元条件概率:
其中,表示文本序列在语料中出现的次数。
为了更好地保留词序信息,构建更有效的语言模型,我们希望在元模型中选用更大的。但是,当较大时,长度为序列出现的次数就会非常少,在按照上述公式估计元条件概率时,就会遇到数据稀疏问题,导致估算结果不准确。因此,一般在百万词级别的语料中,三元模型是比较常用的选择,同时也需要配合相应的平滑算法,进一步降低数据稀疏带来的影响。
为了更好地解决元模型估算概率时遇到的数据稀疏问题,神经网络语言模型应运而生。
神经网络语言模型(NNLM)
神经网络语言模型(Neural Network Language Model ,NNLM)在学习语言模型的同时,也能得到词向量。
NNLM 同样也是对n 元语言模型进行建模,估算的值。但与传统方法不同的是,NNLM 不通过计数的方法对元条件概率进行估计,而是直接通过一个神经网络结构,对其进行建模求解。下图展示了NNLM 的基本结构。
具体而言,对语料中一段长度为的序列,元语言模型需要最大化以下概率:
其中, 为需要通过语言模型预测的词(目标词)。对于整个模型而言,输入为条件部分的整个词序列:,输出为目标词的分布。而神经网络的目标就是要让输出中,(目标词)的概率最大。
神经网络语言模型采用普通的三层前馈神经网络结构,其中第一层为输入层。Bengio提出使用各词的词向量作为输入以解决数据稀疏问题,因此输入层为词的词向量的顺序拼接:
当输入层完成对上文的表示之后,模型将其送入剩下两层神经网络,依次得到隐藏层和输出层:
其中,。表示词汇表的大小,表示词向量的维度,是隐层的维度。矩阵表示从输入层到输出层的直连边权重矩阵。如果使用该直连边,可以减少一半的迭代次数;但如果没有直连边,可以生成性能更好的语言模型。因此在后续工作中,很少有使用输入层到输出层直连边的工作。
输出层一共有个元素,,依次对应下一个词为词表中某个词的可能性。这里使用softmax函数,将其转化为对应的概率。
在NNLM模型中,词向量出现在两个地方,一个是输入层的词向量,另一是隐层的权重,的维度是,这可以看做是个维的行向量,其中的每一个向量,均可以看做某个词在模型中的另一个词向量,记为。在不考虑 的情况下,每个词在模型中有两套词向量。通常在实际工作中只是用第一个作为词向量。
将展开,得到:
被称为能量函数。
log双线性语言模型(LBL)
2007 年,Mnih和Hinton在神经网络语言模型(NNLM)的基础上提出了log双线性语言模型(Log-Bilinear Language Model,LBL)。LBL模型的能量函数为:
LBL模型的能量函数与NNLM的能量函数主要有两个区别。一、LBL 模型中,没有非线性的激活函数tanh,而由于NNLM 是非线性的神经网络结构,激活函数必不可少;二、LBL 模型中,只有一份词向量e,也就是说,无论一个词是作为上下文,还是作为目标词,使用的是同一份词向量。其中第二点(只有一份词向量),只在原版的LBL模型中存在,后续的改进工作均不包含这一特点。
循环神经网络语言模型(RNNLM)
循环神经网络语言模型(Recurrent Neural Network based Language Model,RNNLM)则直接对进行建模(注意不是)
该模型就是把NNLM隐层变成RNN,每一个隐层包含此前所有上文信息
RNNLM里面最厉害的就属ELMo了。该模型利用多层双向LSTM的加权和来表示词向量,其中权重可根据具体任务动态调节。
C&W模型
与基于语言模型的词向量生成方法不同,C&W以直接生成词向量为目标。
C&W模型没有去求解,而是直接对n元短语打分。对于语料中出现过的元短语,模型会对其打高分;而对于语料中没有出现的随机短语,模型会对其打低分。通过这种方式,C&W 模型可以更直接地学习得到符合分布假说的词向量。
具体而言,对于整个语料,C&W模型需要最小化:
其中,为从语料中选出的一个元短语,为序列中的中间词,也是目标词,即;表示的上下文;为字典中的某一个词。正样本来自语料,而负样本则是将正样本序列中的中间词替换成其它词。
即:
C&W模型与NNLM相比,主要的不同点在于C&W模型将目标词放到了输入层,同时输出层也从语言模型的个节点变为一个节点,这个节点的数值表示对这组n元短语的打分。这个区别使得C&W模型成为神经网络词向量模型中最为特殊的一个,其它模型的目标词均在输出层,只有C&W模型的目标词在输入层。
CBOW模型
CBOW模型的结构如上图,该模型一方面根据C&W模型的经验,使用一段文本的中间词作为目标词;另一方面,又以NNLM作为蓝本,并在其基础上做了两个简化。一、CBOW没有隐藏层,去掉隐藏层之后,模型从神经网络结构直接转化为log线性结构,与Logistic回归一致。log线性结构比三层神经网络结构少了一个矩阵运算,大幅度地提升了模型的训练速度。二、CBOW去除了上下文各词的词序信息,使用上下文各词词向量的平均值,代替神经网络语言模型使用的上文各词词向量的拼接。形式化地,CBOW模型对于一段训练样本,输入为:
由于没有隐藏层,CBOW模型的输入层直接就是上下文的表示。CBOW 模型根据上下文的表示,直接对目标词进行预测:
对于整个语料而言,与神经网络语言模型类似,CBOW的优化目标为最大化:
Skip-gram模型
Skip-gram模型的结构如上图,与CBOW模型一样,Skip-gram模型中也没有隐藏层。和CBOW模型不同的是,Skip-gram模型每次从目标词的上下文中选择一个词,将其词向量作为模型的输入,也就是上下文的表示。Skip-gram模型同样通过上下文预测目标词,对于整个语料的优化目标为最大化:
其中,