摘要
向量空间的词表示(Vector-space word representations)在许多NLP任务中都取得了巨大的成功。然而,在大多数现有工作中,单词都被视为独立的实体(entities)。在建模过程中,没有显式地体现出形态相关(morphologically related)的单词之间的关系。结果导致一些少见和复杂单词的估计效果很差,以及所有未知单词(unknown words)仅使用一个或几个向量来粗略地表示。
例如,在维基百科文档中,distinct共计出现了35323次,distinctness共计只出现了141次。由于distinct出现频率较高,嵌入算法可以很好地估计出它的词向量。而distinctness因为出现频率低,最终的估计结果也很糟糕。如果按照形态学(morphology)角度,distinctness其实是源自于distinct,只是增加了ness后缀而导致形态不同,而这两个单词的含义应该比较接近。这种直觉在之前的模型中没有得到体现。
这篇论文通过提出一种新颖的模型来解决这一缺点。通过结合RNNs和神经语言模型(Neural Language Models, NLMs),学习具有形态学意识的词表示。其中,词素(morphemes)作为模型的基本单元,使得模型能够根据简单的词素构建出形态复杂的词的词表示。神经语言模型则用于在学习复杂单词的词表示时,兼顾上下文信息。
此外,该论文的研究还自建并公开了一个新的数据集,专注于测试罕见以及复杂形态的单词。
引言
近些年,在巨大的文本数据上使用非监督方式预训练得到的词表示和词聚类是许多NLP系统获得成功的“秘制酱料”。尽管词表示和聚类有许多应用以及为提高这些表示的效果,诞生了许多出色的研究工作,但这些方法都将每个不同形态的单词都视为独立的实体,无法捕获单词的形态学变体间的关系。此外,常见的单词,例如"distinct"可以获得很好的聚类或嵌入表示,然而"distinctness"却因为形态复杂以及在文本中罕见,导致表示效果很差。
本文的模型将以词素作为RNN的基本单元,并根据该词素构建出与其具有形态学关系的复杂单词的表示。通过结合RNN结构和神经语言模型,该模型还可以充分利用上下文信息,学习词素、语义以及其组成特性。根据已知的词素,该模型可以构建出所有由这些词素组成的未知单词的表示。
形态学RNNs
模型结构
本节介绍形态学RNN(morphological Recursive Neural Network, morphoRNN)的结构原理。
在morphoRNN中,词素作为语言中的最小含意单元,将被建模为模型的实值参数向量,并且被用于构建形态更复杂的单词。不同的词素将被编码为列向量,并且排列在词素嵌入矩阵$\boldsymbol{W}_{\boldsymbol{e}} \in \mathbb{R}^{d \times|\mathbb{M}|}$中。其中$d$表示向量维度,$\mathbb{M}$表示所有词素组成的有序集合。
上图展示了形态复杂的单词的词向量是如何由其对应的词素表示构建起来的。在树形结构中,一个新的父结点向量$p$由词干(stem)向量$x_{\mathrm{stem}}$和词缀(affix)向量$x_{\mathrm{affix}}$组成:
其中$\boldsymbol{W}_{\boldsymbol{m}}\in\mathbb{R}^{d\times 2d}$是词素参数矩阵,$\boldsymbol{b}_{\boldsymbol{m}}\in \mathbb{R}^{d\times 1}$是偏置向量,$f$表示一个元素向激活函数,例如$\mathrm{tanh}$等。整个morphoRNN模型的参数为$\boldsymbol{\theta}=(\boldsymbol{W}_{\boldsymbol{e}},\boldsymbol{W}_{\boldsymbol{m}},\boldsymbol{b}_{\boldsymbol{m}})$。
上下文不敏感的形态学RNN
首先研究morphoRNN在不参考任何上下文信息的情况下,只根据形态学表示来构造词向量的能力,并将该样的模型称为上下文不敏感的形态学RNN(context-insensitive morphoRNN, cimRNN)。cimRNN的输入为一个引用嵌入矩阵(reference embedding matrix),该矩阵的向量均为由先前的神经语言模型训练得到的嵌入,因此被称为“引用”嵌入。
假设这些引用嵌入都是正确的,或者说是被良好估计的,而该模型的目的是找到与这些引用词最匹配的词素,并使用这些词素构建出新的形态复杂单词的表示。
cimRNN的架构与morphoRNN相同。模型为了学习,需要定义目标函数。对于每个单词$x_i$,新构建的词表示$\boldsymbol{p}_c(x_i)$与该单词的引用嵌入$\boldsymbol{p}_r(x_i)$之间的损失函数$s$由平方欧式距离定义:
最终的目标函数就是$N$个训练样本的损失之和,另外再加入一个正则项:
在该论文中,将正则项系数$\lambda$设置为$10^{-2}$.
cimRNN模型虽然结构简单,但是可以仅从引用嵌入中学习到单词的词素语义。
上下文敏感的形态学RNN
cimRNN也存在一些缺点:
- 在罕见词的估计效果差的前提下,该模型没有能力改善罕见词的表示。
- 由神经语言模型训练根据上下文得到的嵌入可以很好地融合语义和句法的信息。cimRNN却没有融入上下文信息,只学习到词的组成结构信息。
对于一些罕见词,如果其估计得到的词表示效果差,那么在构建出这些罕见词时,很可能导致模型参数向错误的方向更新。其次,如果将cimRNN模型学习到的词结构信息与神经语言模型学习到的语义和句法信息结合,那么模型的估计效果理应会更好。
上图展示了上下文敏感的形态学RNN(context-sensitive morphological RNN, csmRNN)的结构。
- 该层代表着morphoRNN结构,根据各个词素组成其对应的形态复杂单词的表示
- 该层表示基于单词 的神经语言模型,用于优化单词组成的N-grams的得分
对于复杂结构的单词,例如"unfortunately",由形态学向量组成:$un_{\mathrm{pre}}+fortunate_{\mathrm{stm}}+ly_{\mathrm{suf}}$,其中$\mathrm{pre}$即prefix,表示前缀; $\mathrm{suf}$即suffix,表示后缀。这些复杂单词的前缀、后缀、主干都可以从词素嵌入矩阵$\boldsymbol{W}_{\boldsymbol{e}}$中找到。一旦所有复杂单词的词向量被构建后,b层的神经语言模型将给每个由单词$x_1,...,x_n$组成的N-grams赋予一个得分:
其中,$\boldsymbol{x}_j$表示单词$x_j$的向量表示。神经语言模型将简单地采取单隐层的前馈神经网络,并且隐藏层维度记为$h$。$\boldsymbol{W} \in \mathbb{R}^{h \times n d}, \boldsymbol{b} \in \mathbb{R}^{h \times 1}$和$\boldsymbol{v}\in\mathbb{R}^{h\times 1}$为神经语言模型的参数。$f$表示元素向激活函数。
在该论文中,N-grams中的$N$设置为10,隐藏层维度$h=100$.
另外,在目标函数中采用排序类型(ranking-type)的损失:
排序类型的损失影响模型对更合理的N-grams组合赋予更高的得分。其中,$N$表示在训练数据中所有可能的N-grams组合数量,$n_i$表示这些N-grams中的其一个序号,$\bar{n}_i$表示将$n_i$对应的N-Grams的最后一个单词随机选择一个单词替代后的N-grams的序号。最终csmRNN的模型参数为$\boldsymbol{\theta}=(\boldsymbol{W}_{\boldsymbol{e}}, \boldsymbol{W}_{\boldsymbol{m}}, \boldsymbol{b}_{\boldsymbol{m}}, \boldsymbol{W}, \boldsymbol{b}, \boldsymbol{v})$ .
模型学习
模型学习将分为前向过程和反向传播过程。
- 前向过程:使用cimRNN、csmRNN递归地构建词素树以及语言模型结构,并对训练样本赋予得分
- 反向传播过程:计算目标函数关于模型参数的梯度
每个样本的损失关于参数$\boldsymbol{\theta}$的梯度为$\frac{\partial s(x)}{\partial \boldsymbol{\theta}}$,其中$x$要么是cimRNN中使用到的引用单词,要么是csmRNN中使用到的N-grams.
在cimRNN中,目标函数的梯度可以推导为:
而在csmRNN中,由于目标函数并不可微,则可以使用次梯度(subgradient)方法来估计目标函数的梯度:
单词的词素分割使用到Morfessor工具,单词将分为$\mathrm{pre},\mathrm{stm},\mathrm{suf}$三个成分,分别对应单词的前缀、主干和后缀。