[我们是这样理解语言的-3]神经网络语言模型

1 简介

语言模型是自然语言处理领域的基础问题,其在词性标注、句法分析、机器翻译、信息检索等任务中起到了重要作用。简而言之,统计语言模型表示为:在词序列中,给定一个词$w_{t}$和上下文中所有词$w_{t-1}$,这个序列出现的概率,如下式,
$\begin{eqnarray}\hat{P}(w_{1}^{T})=\prod_{t=1}^{T}\hat{P}(w_{t} |w_{1}^{t-1})\end{eqnarray}$
其中,$w_{t}$是序列$w_{i}^{j}$中第$t$词,$w_{i}^{j}=(w_{i},w_{i+1},…,w_{j})$,$\hat{P}(w_{t} |w_{1}^{t-1})$ 可以使用 $\hat{P}(w_{t} |w_{t-1}^{t-n+1})$ 近似,这就是n-gram语言模型,详细请阅读[我们是这样理解语言的-2]统计语言模型。随着深度学习的发展,神经网络相关研究越来越深入,神经网络语言模型(Neural Network Language Model,NNLM)越来越受到学术界和工业界的关注,本文将系统介绍下 NNLM 的建模及其应用。

2 神经网络语言模型

NNLM 最早由Bengio系统化提出并进行了深入研究[Bengio, 2000, 2003]。当然分开来看,(1) distributed representation最早由Hinton提出(1985), (2)利用神经网络建模语言模型由Miikkulainen and Dyer,Xu and Rudnicky分别在1991和2000提出。

NNLM 依赖的一个核心概念就是词向量(Word Embedding)。词向量源于Hinton在Learning distributed representations of concepts提出的Distributed Representation,Bengio将其引入到语言模型建模中,提出了NNLM。那么,我们不禁要问,什么是词向量呢?

2.1 词向量

简而言之,词向量是用一个向量来表示一个词,一定程度上可以用来刻画词之间的语义距离。
a、词表中的词$i$表示为一个词向量$C(i), C(i) \in \mathbb{R}^{m}$,其维度$m$一般取值为$30,50, 60,100$等值。

b、词向量为神经网络的一类参数,可以通过训练得到,同时基于词向量可以表示词序列$w_{1}^{t}$的联合分布。

为了得到词向量,我们需要在给定训练数据集情况下,训练得到目标模型$f(w_{t},….,w_{t-n+1}) =\hat{P}(w_{t} |w_{t}^{t-n+1})$。而模型需要满足的约束,即对于任意的$w_{1}^{t-1}, \sum_{i=1}^{|V|}f(w_i,w_{t-1},…,w_{t-n+1})= 1,f > 0$,表示$w_{t}$与上下文$w_{t-1},…,w_{t-n+1}$所有可能的组合的概率和为1。 如此,我们可以将$f(w_t,….,w_{t-n+1})$分解成两部分:
a、词表中任意单词$w_{i}$表示为词向量,由此构建了一个$m×|V|$的矩阵$C$。
b、词的概率分布可以通过矩阵$C$进行变换得到。函数$g$是组合上下文中词向量$(C(w_{t-n+1}),C(w_{t-n}),…C(w_{t-1}))$构建一个词$w_{t}$的条件概率分布,即函数$g$的输出为一个向量,其第$i$个分量表示当前词$w_{t}$等于词表中第$i$个词$V_{i}$的条件概率,$\hat P(w_{t} =V_{i} \vert w_{1}^{t-1})$,函数$f$组合了$C$和$g$得到最终的输出结果。

2.2求解目标

一般而言,神经网络语言模型的优化目标是最大化带正则化项的Log-Likelihood,其中参数集合为$\theta = (C,\omega), \omega$为神经网络的参数。
$\begin{eqnarray}L=\frac{1}{T} \sum_{t} log f(w_{t},w_{t-1},…w_{t-n+1};\theta) +R(\theta)\end{eqnarray}$

3 Bengio NIPS’03 Model

3.1 模型结构

Bengio使用前馈神经网络(FFNN,Feed Forward Neural Network)表示$f$,其结构如下:

图 1 Bengio Yoshua提出的神经网络结构

上图中,输出层为Softmax,保证满足概率分布的约束:
$\begin{eqnarray} \hat{P}(w_{t} \vert w_{t-1},…,w_{t-n+1}) =\frac{e^{y_{w_{t}}}}{\sum_{i} e^{y_{w_{i}}}} \end{eqnarray}$
其中,$y_{w_{i}}$是每个词非正规化的$log$概率值,$y$的值是通过下式计算得到,参数分别为$b,W,U,d,H$:
$\begin{eqnarray} y = b + Wx + Utanh(d + Hx) \end{eqnarray}$
$W$通常设置为0,即输出层和输入层不存在直接联系,输入向量$x$为上下文环境对应的词向量的拼接组合。在模型中,令$\theta=(b,U,d,H,C)$,其中,$d$是输入层到隐藏层的偏置(长度为$|V|$),$U$为隐藏层到输出层的参数(大小为$|V|×h$),$H$为输入层到隐藏层的参数,$b$为隐藏层到输出层的偏置(长度为$|h|$),$C$是词向量矩阵(大小为$|V| \times m$),总共的参数为$|V|(1+nm+h)+h(1+(n-1)m)$。
模型求解方式采用随机梯度上升(SGA,Stochastic Gradient Ascent),SGA类似于SGD,仅目标函数存在min和max的区别。
$\begin{eqnarray} \theta \leftarrow\theta+\epsilon\frac{\partial log\hat{P}(w_{t}\vert w_{1}^{t-1})}{\partial \theta}\end{eqnarray}$

3.2发展方向

Bengio在论文的Feature Work部分提出了神经网络语言模型的可能改进方向,在后续研究者(包括他本人)的工作中多有所体现。
a、将神经网络分解成为小的子网络,比如利用词的聚类等。
b、加速SoftMax中的正则项Z的快速求导
c、仅对一部分输出进行梯度传播。
d、引入先验知识,比如语义信息(WordNet),语法信息(low-level: POS, high level:句法结构)等。
e、词向量可解释性。
f、解决一词多义问题(Polysemous)。

4 Hierarchical Neural Language Model

基于前述工作,Bengio又提出了层次结构的神经网络语言模型,用于加速模型的训练和推断过程。

4.1 模型结构

Hierarchical Neural Language Model的表达式如下:

$\begin{eqnarray} f(w_{t},w_{t-1},w_{t-2},…,w_{t-n+1}) =\frac{e^{-g(w_{t},w_{t-1},w_{t-2},…,w_{t-n+1})}}{\sum_{v}e^{-g(v,w_{t-1},w_{t-2},…,w_{t-n+1})}}\end{eqnarray}$
其中$g(w_{t},w_{t-1},w_{t-2},…,w_{t-n+1})$可以看作能量函数。
同上文一致,令$C$为词向量矩阵(word embedding matrix),$C^{i}$为词$i$对应的向量,上述能量函数可以表示为,
$\begin{eqnarray} g(w_{t},w_{t-1},w_{t-2},…,w_{t-n+1})=a^{T}tanh(c + Wx + UC_{v}^{T})\end{eqnarray}$
上式中,$x^{T}$为$x$的转置,$a,b,c,W,U$为对应的参数向量和矩阵,$x$是通过拼接词$w_{t}$的上下文中词向量得到。
令$h$为模型中隐藏层的单元数,我们可以计算得到整个模型的参数个数为${(n – 1)hd + |V |h(d + 1)}$。假定$h$为100,词表$|V|$的大小20,000,Context的大小$n$为5,可知第一部分为12,000,第二部分为6,000,000,计算量依然很大。

4.2 参数求解

模型求解参考了Goodman加速最大熵的语言模型训练过程中的工作,将词表中的词进行一个预处理(按类层级划分),这样可以达到不错的加速比,$O(\frac{V}{\sqrt{log_{2}V}})$。这样在计算式(2)时,可以转换为,
$\begin{gather} \nonumber P(w_{t}|w_{t-1},w_{t-2},…,w_{t-n+1}) = \\ \prod_{j=1}^{L(w_{t})-1}P(b_{j}(w_{t})|b_{1}(w_{t}),…,b_{j-1}(w_{t}), w_{t-1},w_{t-2},…,w_{t-n+1})\end{gather}$
其中,$L(w_{t})$为树的深度,$b_{j}(w_{t})$是$w_{t}$属于类别$j$的指示变量。按照上述形式,计算$log(w_{t}|w_{t-1},w_{t-2},…,w_{t-n+1})$和$\bigtriangledown log(w_{t}|w_{t-1},w_{t-2},…,w_{t-n+1})$的复杂度和$L(w_{t})$成正比(相比$V$,要小很多)。

5 Log Bi-Linear

Hinton在研究RBM时,结合神经网络语言模型提出了三种基于RBM的语言模型,FRBM(Factored RBM)、Temporal FRBM、Log-Bilinear Language Model,其中Log Bi-Linear为前两者的简化版本,本文中仅介绍Log-BiLinear Language Model。

5.1 模型结构

类似于Log-Linear模型,Log Bi-Linear模型在能量函数部分(EXP上面那个部分的相反数)加入了一个双线性项,注意这里的R是词向量构成的矩阵,C代表此之前的连接权值。
$\begin{eqnarray}E(w_{n};w_{1:n-1}) = -(\sum_{i = 1}^{n-1}v_{i}RC_{i})R^{T}v_{n} – b_{r}^{T}R^{T}v_{n} – b_{v}^{T}v_{n}\end{eqnarray}$
其中,$C_{i}$表示$w_{i}$和$w_{n}$之间的连接关系的参数,$R$表示字典中词向量的矩阵,第$i$行表示第$i$个单词的词向量,$v_{i}$表示一个和字典长度相同的指示向量,即词$i$对应词向量可以表示为$v_{i}R$; $b_{r}, b_{v}$表示对应的偏置。从上述能量函数可以看出,它是一个双线性函数,需要注意的是这里的能量函数是RBM的幂数部分,其对应的语言模型形式为,
$\begin{eqnarray}P(w_{n}|w_{1:n-1}) = \frac{1}{Z_{c}}exp(-E(w_{n};w_{1:n-1}))\end{eqnarray}$
其中,$Z_{c} = \sum_{w_{n}}exp(-E(w_{n};w_{1:n-1}))$。
Log Bi-Linear的模型结构见下图,

图2 Log Bi-Linear模型结构

上图表示,每个词$v_{i}$在词向量矩阵中找到对应的词向量表示,然后通过链接矩阵和当前词(图中$v_{3}$)关联,其中关联关系是使用能量函数表示。

5.2 参数求解

套用RBM的求解框架,Log Bi-Linear可以采用Contrast Divergence Learning求解,其参数$(C_{i}, R)$的梯度表达式,
对于$C_{i}$,
$\begin{eqnarray}\frac{\partial}{\partial C_{i}}log P(w_{n}|w_{1:n-1}) = <R^{T}v_{i}R>_{D}- <R^{T}v_{i}v_{n}^{T}R>_{M}\end{eqnarray}$
对于$R$,
$\begin{gather} \nonumber \frac{\partial}{\partial R} logP(w_{n}|w_{1:n-1}) = \\ \nonumber <\sum_{i = 1}^{n = 1}(v_{n}v_{i}^{T}RC_{i} + v_{i}v_{n}^{T} R C_{i}^{T}) + v_{n}b_{r}^{T}>_{D} – \\ <\sum_{i = 1}^{n – 1}(v_{n}v_{i}^{T} R C_{i} + v_{i}v_{n}^{T} R C_{i}^{T} + v_{n}b_{r}^{T}>_{M}\end{gather}$
这里$<.>_{D}$表示data distribution $\hat{P}$,$<.>$表示model distribution ${P}$。

6 Hierarchical LBL

Hinton将Bengio的Hierarchical NNLM和Log Bi-Linear思想结合,提出了Hierarchical Log Bi-Linear Language Model。

6.1 模型结构

Hierarchical LBL是将Hierarchical NNLM和Log Bi-Linear结合起来,对应的语言模型形式,

Log Bi-Linear部分可以简要表示为,
$\begin{eqnarray}\hat{r} = \sum_{i=t – 1}^{t-n+1} C_{i}r_{w_{i}}\end{eqnarray}$

$\begin{eqnarray}P(w_{t} = w|w_{t-1:t-n+1}) = \frac{exp(\hat{r}^{T}r_{w}+b_{w})}{\sum_{j}exp(\hat{r}^{T}r_{j}+b_{j})}\end{eqnarray}$
其中,$b$为对应的偏置项(bias),$\hat{r}$是上下文中的词向量加权,权值为当前词t和上下文中词的关系权值$C$,$r_{w}$为词w对应的词向量。

由以上,可以推出HLBL的模型为,
$\begin{eqnarray}P(w_{n}|w_{1:n – 1}) = \prod_{i} P(d_{i}|q_{i},w_{1:n-1})\end{eqnarray}$

$\begin{eqnarray}P(d_{i} = 1|q_{i}, w_{1:n-1}) = \sigma(\hat{r}^{T}q_{i} + b_{i})\end{eqnarray}$
其中,$d_{i}$词$w$的在层次(树)结构的编码,$q_{i}$是编码路径中第$i$个节点的向量,$\sigma$为Logistic方程。
这里可以允许存在多种层次结构,即每个词对应多种编码,$P(w_{n}|w_{1:n – 1}) $可以将词的所有编码方式求和,即
$\begin{eqnarray}P(w_{n}|w_{1:n – 1}) = \sum_{d \in D(w)} \prod_{i} P(d_{i}|q_{i}, w_{1: n-1})\end{eqnarray}$

其中,$D(w)$为词w的编码集合,这词采用多种编码方式能够更好刻画词的不同形式和“语义”,这种思路在后续的SENNA中也有体现。

6.2 参数求解

该模型参数求解可以直接套用Log Bi-Linear和Hierarchical NNLM的方式,其中不同之处,Hinton提出了一种新的简单的构建层次结构的方法:通过递归的使用二维的高斯混合模型(GMM,Gaussian Mixture Model)进行聚类,直到每个cluster中仅包含两个词,这样所有的结果就构成一个二叉树。

7 SENNA

SENNA中不仅仅提出了word embedding的构建方法,同时还从神经网络语言模型角度系统去解决自然语言处理任务(POS,Chunking,NER,SRL)。SENNA中,每个词可以直接从Lookup Table中直接查找到对应的向量。
$\begin{eqnarray}LT_{W}(w) = <W>_{w}^{1}\end{eqnarray}$
其中,$d_{wrd}$是词向量的维度,$W \in \mathbb{R}^{d_{wrd}\times|D|}$为词向量的矩阵,$<W>_{w}^{1}$表示取矩阵$W$的第$w$列。SENNA中,表示句子或者词序列仅将对应的词向量拼接起来得到对应的向量。
SENNA中采用HLBL中同一个词存在不同的词向量,用于刻画不同的语义和语法用途,一个词的词向量最终由各种形态下的词向量组合起来,比如,一个词可以有word stemming的向量,本身的向量(这些向量可能来自不同的Lookup table)等,需要将这些向量结合起来表示这个词。SENNA直接将这些向量拼接起来,构成了一个维度为$d_{wrd}^{T} = \sum_{k} d_{wrd}^k$。

7.1 模型结构

SENNA包含两种网络构建方式(1)window approach(图3)(2)sentence approach(图4)。

(1)window approach
window approach是一个前馈神经网络,包含线性层、HardTanh层。window approach的输入是包含当前词在内的窗口大小$k_sz$的序列,拼接所有词的向量得到的表示向量,维度$d_{wrd}\times k_{sz}$,

图3 window approach

$\begin{eqnarray}f_{\theta}^{1} = <LT_{w}([w]_{1}^{T})>_{t}^{d_{win}} =\left\{\begin{array}{l}<W>_{[w]_{t-d_{win}/2}}^{1}\\ … \\ <W>_{[w]_{t}}^{1} \\ … \\ <W>_{[w]_{t-d_{win}/2}}^{1} \end{array}\right\}\end{eqnarray}$
从图3可知,$f_{\theta}^{1}$输入下一层或者几层线性层,记为$f_{\theta}^{l}$。
$\begin{eqnarray}f_{\theta}^{l} = W^{l} f_{\theta}^{l-1} + b^{l}\end{eqnarray}$
其中,$W^{l} \in \mathbb{R}_{n_{hu}^{l}\times n_{h}^{l-1}}, b^{l} \in \mathbb{R}^{n_{hu}^{l}}$为待训练参数,$n_{hu}^{l}$为第$l$层隐藏单元数。

SENNA中包含了一个特殊的层,HardTanh层,它的输入是前一个线性层。HardTanh层是一个非线性层,形式如下,
$\begin{eqnarray}[f_{\theta}^{l}] = HardTanh([f_{\theta}^{l-1}]_{i})\end{eqnarray}$
其中,
$\begin{eqnarray}HardTanh(x) =\left\{\begin{array}{ll} -1 &if x \le -1 \\x & if -1 \ge x \le 1\\ 1 & if x > 1 \end{array}\right.\end{eqnarray}$
SENNA的输出层为输入序列对应的得分,大小具体任务有关。

(2) sentence approach
window approach能够完成绝大部分自然语言处理任务,但是在SRL上表现不佳。因此,SENNA提出了sentence approach用于适应SRL。sentence approach采用的卷积网络结构,除了线性层和HardTanh层外,还有一个卷积层和一个Max层。

图4 sentence approach
因为sentence的大小不一定相同,需要在sentence上选取滑窗将输入的向量进行卷积,得到如下形式,

$\begin{eqnarray}<f_{\theta}^{l}>_{t}^{1} = W^{l}<f_{\theta}^{l-1}>_{t}^{d_{win}} + b^{l}  \forall t \end{eqnarray}$

其中,序列中所有滑窗共享$W^{l}$。相比线性层,卷积层将局部的特征堆叠起来构建高层的特征,而线性层则需要一个非线性变换(比如HardTanh)才能达到这种效果。
Max层是将卷积层的输出的局部特征合并成为全局特征,卷积层输出处理常用的方法有AVG和MAX。SENNA中采用的是MAX运算,即,

$\begin{eqnarray}[f_{\theta}^{l}]_{i} = \mathop{max}_{t}[f_{\theta}^{l-1}]_{i,t} 1 \le i \ge n_{hu}^{l-1}\end{eqnarray}$

其中,$f_{\theta}^{l-1}$为卷积层的输入,$f_{\theta}^{l}$为Max的输出。

7.2 参数估计

上述神经网络的参数均通过MLE + SGD得到,我们将参数记为$\theta$,训练数据记为$\mathcal{T}$, 则参数估计记为,
$\begin{eqnarray} \theta \leftarrow \sum_{(x,y) \in \mathcal{T}} log p(y|x, \theta)\end{eqnarray}$
其中,$x$为输入的句子或词序列(window approach)对应的表示向量,$y$表示具体任务(POS,NER,Chunking,SRL)的tag,$p(.)$为神经网络的输出结果,箭头右边为data log likelihood。

SENNA求解方式分为两种,word-level log-likelihood,sentence-level log-likelihood。
(1)word-level log-likelihood
在给定输入$x$的情况下,神经网络输出一个得分$[f_{\theta}(x)]_{i}$,这里$i$为输出的tag编号。这个得分不满足概率的约束,需要对它进行归一化,这里采用了softmax方程,
$\begin{eqnarray}p(i|x, \theta) = \frac{e^{[f_{\theta}]_{i}}}{\sum_{j} e^{[f_{\theta}]_{j}}}\end{eqnarray}$
为方便运算,对上述等式取log值,记分母部分为$logadd_{j} [f_{\theta}]_{j} = log(\sum_{j} e^{[f_{\theta}]_{j}})$,得到的形式带入data log likelihood中,最终形式为交叉熵(cross entropy)。但是,由于在句子中当前词和相邻的词的tag存在关联性,上述方案并非最好的求解方式,所以SENNA提出了sentence-level log-likelihood。

(2)sentence-level log-likelihood
在输入的句子中,有些tag不能在某些tag之后。从序列的角度看,tag和tag之间的转换是有条件的,这种转换是需要满足约束的。记,$[f_{\theta}]$为句子$[x]_{1}^{T}$的网络输出得分,$[f_{\theta}]_{i,t}$为输入序列中第$t$个词,输出为第$i$个tag的得分。基于上述考虑,SENNA引如一个转换矩阵$[A]$用于保存tag和tag之间的转换关系,$[A]_{i,j}$表示从tag i到tag j的得分,转换得分需要通过从数据中训练得到,故参数为$\hat{\theta} = \theta \bigcup \{[A]_{i,j}, \forall i,j \}$。按照上述处理,序列的得分是神经网络得分加上转换得分,
$\begin{eqnarray}s([x]_{1}^{T}, [i]_{1}^{T}, \hat{\theta}) = \sum_{t=1}^{T} ([A]_{[i]_{t-1},[i]_{t}} + [f_{\theta}]_{[i]_{t}, t})\end{eqnarray}$
类似于word-level的处理,最终输出需要满足概率分布的约束,sentence level仅对所有可能的tag路径进行softmax归一化,我们定义这个结果比值为tag路径条件概率。对条件概率取log后,
$\begin{eqnarray}log p([y]_{1}^{T}\vert [x]_{1}^{T}, \hat{\theta}) =s([x]_{1}^{T}, [i]_{1}^{T}, \hat{\theta}) – \mathop{logadd}_{\forall [j]_{1}^{T}} s([x]_{1}^{T}, [j]_{1}^{T}, \hat{\theta})\end{eqnarray}$

上式中,logadd操作拥有特殊的性质可以递归的求解,可以方便的得到递推公式,

终止条件为,

$\begin{eqnarray}logadd s([x]_{1}^{T}, [f]_{1}^{T}, \hat{\theta}) = logadd_{i} \delta_{T}(i)\end{eqnarray}$
上述过程理解可以参照HMM的前向算法。在训练时,对所有的样本$([x]_{1}^{T}, [y]_{1}^{T})$最大化data log likelihood,注意其中$p(.)$为tag路径条件概率。

SENNA的推断部分采用的是Viterbi算法,推断过程理解可以参照HMM的推断过程,形式为,
$\begin{eqnarray}\mathop{argmax}_{[j]_{1}^{T}}s([x]_{1}^{T}, [f]_{1}^{T}, \hat{\theta})\end{eqnarray}$
类似于HMM中,也需要按照参数求解过程进行递归处理,但是每步需要用max操作替代logadd操作,然后回溯得到解。viterbi的过程理解可以参照动态规划问题,找出状态转移方程即可。

8 Eric Huang’s Model

在Bengio的神经网络结构的基础上,Eric Huang提出了引入文档的全局信息引神经网络语言模型,结构类似于Bengio的网络结构。

8.1 模型结构

相比Bengio的模型,Eric Huang引入了词的全局信息,在原本的网络结构中加入了子网络,形成如下图所示结构。

图5 Eric Huang的网络结构图

其中,$score = score_{l} + score_{g}$,$score_{l}$代表局部的得分,$score_{g}$代表全局的得分。$score_{l}$的计算公式为,
$\begin{eqnarray}score_{l} = W_{2}a_{1} + b_{2}\end{eqnarray}$
$\begin{eqnarray}a_{1} = f(W_{1}[x_{1}; x_{2};...;x_{m}] + b_{1})\end{eqnarray}$
$[x_{1}; x_{2};...;x_{m}]$为当前词的Context中$m$个词向量的拼接,$f$为激活函数(逐个元素使用),比如$tanh, W_{1}, W_{2}$为对网络中的参数。
相应的,$score_{l}$的计算公式,
$\begin{eqnarray}score_{g} = W_{2}^{(g)}a_{1}^{g} + b_{1}^{g}\end{eqnarray}$

$\begin{eqnarray}a_{1}^{g} = f(W_{1}^{g}[c;x_{m}] + b_{1}^{g})\end{eqnarray}$

$\begin{eqnarray}c = \frac{\sum_{i=1}^{k}w(t_{i})d_{i}}{\sum_{i=1}^{k}w(t_{i})}\end{eqnarray}$
其中,$c$为文章中包含的词向量的加权平均,权值公式可以有多种形式,Eric Huang采用IDF加权的方式。

8.2 参数求解

Eric Huang采用[C&W, 2007]中的求解方法,从词表中随机采样一个替换当前词,构造如下损失函数(类似于Ranking问题)
$\begin{eqnarray}C_{s,d} = \sum_{w \in V}max(0, 1 – g(s,d) + g(s^{w}, d))\end{eqnarray}$
求解过程采用了min-batch L-BFGS。

9 word2vec

word2vec是word embedding中最为人知的模型,其原因(能想到的)有,(1)模型简单,训练速度快;(2)代码和数据开源,容易复现;(3)Google出品(作者在Google实习期间工作,但代码很难读)。
word2vec由Tim Mikolov的三篇论文引出(虽然有一篇是讲Recurrent NN),项目开源(https://code.google.com/p/word2vec/),训练速度快(单机跑缺省数据集,仅20+min)。word2vec代码中包含了两个模型CBOW(Continue BOW)和Skip-Gram。

9.1 CBOW

CBOW模型见下图,

图6 CBOW模型结构

类似于[Bengio, 2003]中的模型,CBOW的优化目标是:给定词序列$w_{1}, w_{2}, w_{3}, …, w_{T}$,最大化下式,
$\begin{eqnarray}\sum_{t=1}^{T} logP(w_{t}|w_{t-c}, … w_{t-1}. w_{t+1},…, w_{t+c})\end{eqnarray}$
其中,$P(w_{t}|w_{t-c}, … w_{t-1}.w_{t+1},…, w_{t+c})$采用log-linear(Softmax)模型用于正确分类当前词。在求解上式梯度时,每步的计算量与词表$V$大小成正比,十分耗时,需要借助其他方法近似求解。

9.2 Skip-Gram

Skip-Gram结构图见下图

图7 Skip-Gram模型结构

Skip-Gram中优化的目标:给定词序列$w_{1}, w_{2}, w_{3}, …, w_{T}$,最大化下式,
$\begin{eqnarray}\frac{1}{T}\sum_{t=1}^{T}\sum_{-c\leq j \leq c, j\ne0} log P(w_{t+j}|w_{t})\end{eqnarray}$
其中,c是上下文的大小,$P(w_{t+j}|w_{t})$采用softmax方程,
$\begin{eqnarray}P(w_{O}|w_{I}) = \frac{exp(v_{w_{O}}^{T}v_{wI})}{\sum_{w=1}^{V} exp(v_{w_{O}}^{T}v_{wI})}\end{eqnarray}$
$v_{w}$和$v_{w}^{T}$为对应的输入和输出词向量,上式中梯度($\triangledown logP(w_{O}|w_{I}$)的计算复杂度正比于词表$V$的大小,处理方法同CBOW。

9.3 参数求解

(1)Hierarchical Softmax
同Section 4中Hierarchical NNLM[Bengio, 2006],基于tf-idf构建Huffman树,简单快速。

(2)Noise Constractive Estimation
在section 4中提到了如何快速近似求解partition function的问题,Gutmann在AISTAT(理论的会议,如无基础误入,坑!)和ICANN上介绍一种新的近似求解方法-NCE,最终在JMLR上发表一篇长文来详细阐述其思想。此方法思想后续,本博客会撰文专门解释。

10 Glove

Glove(Global Vectors for word representation)由Jeffrey和Socher提出,并在word analogies,word similarity,NER任务中取得不错的效果。Glove融合了Globall Matrix Factorization和Local Context Window(见Section 11),提出了Log Bi-Linear的回归模型。从Glove的模型结构看,与神经网络结构存在不同,但是将其中$F$函数设置为神经网络结构,即二者等价。

10.1 模型结构

所有非监督的word representation学习算法均需要基于词的共现矩阵,然后经过复杂变换和分解得到对应的word representation。Glove直接构造一个词共现矩阵的近似矩阵(Context为固定长度),尽可能保存词之间的共现信息,如下图所示,

表1 共现矩阵举例

词表中三个词$i, j, k$,$P_{ik}$表示词$k$出现在词$i$的context中的概率,同理,$P_{jk}$。以i=ice, j=steam, k=solid(solid语义上更靠近ice而不是steam),Glove的目标是极大比率$\frac{P_{ik}}{P_{jk}}$,参照Logistic Regression,其一般形式为,
$\begin{eqnarray}F(w_{i},w_{j},\widetilde{w}_{k}) = \frac{P_{ik}}{P_{jk}}\end{eqnarray}$
其中,$w\in\mathbb{R}^{d}$是对应的词向量,$\widetilde{w}_{k} \in \mathbb{R}^d$是context中词对应的向量。

由于$F$属于一个非常大的泛函空间,所以需要对$F$形式进行限制:
(1)$F$需要编码比率$\frac{P_{ik}}{P_{jk}}$中包含的信息,由于向量空间和线性结构的一致性,所以最直接的方法是F建模的是两个目标词向量的差值。
$\begin{eqnarray}F(w_{i}-w_{j},\widetilde{w}_{k}) = \frac{P_{ik}}{P_{jk}}\end{eqnarray}$
(2)上式中,等式右边是一个标量。如果F拥有复杂的结构,这样和需要得到线性结构的冲突,故F变为如下形式,
$\begin{eqnarray}F((w_{i} – w_{j})^T\widetilde{w}_{k}) = \frac{P_{ik}}{P_{jk}}\end{eqnarray}$
(3)Context的词$k$和目标词($i,j$)可以任意交换,所以模型需要能适应如此变形。在F满足对称性下,其形式为
$\begin{eqnarray}F((w_{i} – w_{j})^{T}\widetilde{w}_{k}) = \frac{F(w_{i}^{T}\widetilde{w}_{k})}{F_{j}^{T}\widetilde{w}_{k}}\end{eqnarray}$

结合,上述两式可以解得$F = exp$,即
$\begin{eqnarray}w_{i}^{T}\widetilde{w}_{k} = log(P_{ik}) = log(X_{ik}) – log(X_{i})\end{eqnarray}$
对上式进行变形—将$log(x_{i}$吸收到$w_{i}$的偏置$b_{i}$中,引入$\widetilde{w}_{k}$的偏置$\widetilde{b}_{k}$,
$\begin{eqnarray}w_{i}^{T}\widetilde{w}_{k} + b_{i} + \widetilde{b}_{k} = log(X_{ik})\end{eqnarray}$
由于logx函数性质,需要对$log(X_{ik})$进行平滑,$log(X_{ik}) \leftarrow log(1 +X_{ik})$

10.2 模型求解

依据上式,我们可以构造出对应的损失函数,由于词与词之间的共现关系不均衡,有部分共现关系不合理的(噪声)词会赋上极小的权重,不利于模型学习参数。所以,在构造函数时考虑引入一个权重方程$f(X_{ij})$,
$\begin{eqnarray}J = \sum_{i,j = 1}^{V} f(X_{ij})(w_{i}^{T}\widetilde{w}_{j} + b_{i} + \widetilde{b}_{j} – logX_{ij})^{2}\end{eqnarray}$
其中,$f(x)$需要满足如下特性,
(1)$f(0) = 0$,如果$f(x)$是一个连续函数,当$x \xrightarrow0$时,$lim_{x \rightarrow 0} f(x)log^{2}x$是有限的。
(2)$f(x)$需要满足非递减的特性,如此,较少的出现的共现组合不会赋较大值。
(3)$f(x)$的函数值需要比较小,这样常见的共现组合也不会赋较大值

Glove中使用的权值方程,
$\begin{eqnarray}f(x) =\left\{\begin{array}{ll}(\frac{x}{x_{max}})^{\alpha}&if x < x_{max} \\1 & otherwise\end{array}\right.\end{eqnarray}$
通常$x_{max} = 100, \alpha = 3/4$。

11 Recurrent Neural Network Language Model

在前馈神经网络语言模型建模过程中取得STOA(the STate Of Art)的效果后,Thomas Mikolov将Recurrent Neural Network引入,同样取得很好的效果。相比前馈神经网络,RNN能讲更多的上下文考虑到模型中来(FFNN仅能考虑窗口内的上下文),RRN的隐藏层能够囊括当前词的所有前序词(all previous words)。在序列数据中,RNN能够发现更多的词与词之间的pattern(与模型能够囊括更多的前序词有关)。

11.1 模型结构

在进行语言模型建模,一般采用简化版本的网络结构,此为时延神经网络(TDNN,Time Delay Neural Network),RNN的结构参照下图[Mikolov, 2013]

图8 简化版RNN结构

其中,输入层包括一个$|V|$维的向量$w(t)$和一个$|H|$维的向量$s(t-1)$,$|H|$为隐藏层大小。网络训练结束后,输出层$y(t)$表示$P(w_{t+1}|w_{t}, s(t – 1))$。
上述网络结构中,各个链接可以表示为
$\begin{eqnarray} s_{j}(t) = f(\sum_{i} w_{i}(t)u_{ji} + \sum_{j} s_{l}(t – 1)w_{jl})\end{eqnarray}$
$\begin{eqnarray}y_{k}(t) = g(\sum_{j} s_{j}(t)v_{kj})\end{eqnarray}$
其中,$f(x)$和$g(x)$为sigmoid和softmax激活函数。网络每步训练复杂度为$O(H \times (H+V))$。

11.2 模型求解

由于RNN网络结构比较复杂,Backpropagation无法得到很好的训练结果,所以需要对传统Backpropagation进行改进,Mozer,Rumelhart,Robinson,Werbos等分别独立提出了BPTT(BackPropagation Through Time)用于训练RNN[Mozer, 1995][Rumelhart, 1986][Robinson, 1987][Werbos,1988]。
单隐藏层的RNN可以展开成一个多层的深度FFNN,隐藏层被使用N次,则可以展开为一个包含N个隐藏层的深度FFNN(见下图),深度的FFNN可以使用梯度下降方法学习得到参数。

图9 展开的RNN

按照上述结构,输出层的误差可以递归的往下传递,误差表达式为:
$\begin{eqnarray} e_{h}(t-\tau – 1) = d_{h} (e_{h}(t – \tau) ^{T}W, t – \tau – 1)\end{eqnarray}$
其中,$d(.)$对向量中元素逐个使用,
$\begin{eqnarray} d_{hj}(x, t) = xs_{j}(t)(1 – s_{j}(t))\end{eqnarray}$
如此,RNN中参数更新表达式为,
对于$u_{ij}$,
$\begin{eqnarray} u_{ij}(t+1) = w_{ij}(t) + \sum_{z=0}^{T}w_{i}(t-z)e_{hj}(t-z)\alpha – u_{ij}(t)\beta \end{eqnarray}$

对于$w_{lj}$,
$\begin{eqnarray} w_{lj}(t+1) = w_{lj}(t) + \sum_{z=0}^{T}s_{l}(t-z-1)e_{hj}(t-z)\alpha – w_{lj}(t)\beta \end{eqnarray}$
其中,T为网络中被展开的步数(见上图)。
RNN用于Word Embedding学习的相关项目见:http://www.fit.vutbr.cz/~imikolov/rnnlm/

12 The Expressive Power of Word Embedding

这里列举两篇关于评测词向量的论文:Word Representation: Word representations :A simple and general method for semi-supervised learning[Turian et al., 2010],The Expressive Power of Word Embeddings[Yanqing Chen et al., 2013]。
在Word Representation一文中,将Word Representation分为三类,(1)Distributional Representation;(2)Clustering-based word representation;(3)Distributed Representation。
Distributional Representation是基于共现矩阵$F_{W\times C}$,其中$W$为词表大小,$C$为Context大小,矩阵中每行为一个词的表示向量,每一列为某些Context内容。构造矩阵$F$有许多的方案和技巧,比如context的构建(左边 or 右边的Context窗口内容,Context窗口大小等)。同时,基于现有的共现矩阵,可以采用一些降维方法压缩词的表示,比如LSA中的SVD + Low Rank Approximation等。
Clustering-based word Representation是进行Distributional Representation中的共现矩阵“变换”成一个个聚类。常见的模型有:brown clustering,HMM-LDA based POS and word segmentation等。
Distributed Representation在Section 3.1中已经讲到,现有的词向量表示都可以归到此类中,这类模型到现在已经提出了好几十种,主要是Feed Forward Neural Network based和Recurrent Neural Network based两大类。
在评测中包含有监督的评测任务:Chunking和NER,主要针对Brown Clustering和C&W,实验结果如下图:

表2 各类模型的在Chunking任务下F1得分,其中C&W的word embedding维度为50
表3 各类模型在NER任务下的F1得分,其中C&W的word embedding维度为50

从上图中可以看出,Brown Clustering比C&W要优,但是Brown Clustering的训练耗时要比SENNA和其他词向量要高得多。
以上实验,读者可以自行复现,参考网址:http://metaoptimize.com/ projects/wordreprs/

Yanqing Chen在ICML-13上发表一篇评测现有Word Embedding的表达能力的论文,文中提到了四种公开发布的Word Embedding(HLBL,SENNA, Turian’s, Eric Huang’s)。文中基于的评测任务有(1)Sentiment:情感分析(两类情感);(2)Noun Gender:人名性别识别(Noun Gender);(3)Plurality:复数(英文)形式判定;(3)Synonyms and Antonyms:同义词反义词判定;(4)Regional Spellings:不同语种形式判定(UK vs. U.S.A.)

表4 评价任务示例

从上表中可以看出,每个任务可以描述为一个二分类问题,现在需要考虑的是如何构建分类的特征。

词向量数据集:SENNA(130,000 words $\times$ 50 dimension)、Turian’s(268,810 words $\times$ 25or50or100 dimension)、HLBL(246,122 words $\times$ 50 or 100 dimensions)、Huang‘s(100,232 words $\times$ 50 dimensions)

评测中采用了线性和非线性两类分类器,分别为Logistic Regression和SVM with RBF kernel。

图10 基于Term的任务评测结果,阴影区域为使用SVM with kernel得到的提升

图11  Regional Spellings(UK vs. US)
图12 基于词对分类的结果

从上述几个任务的结果图中,可以明显看出Eric Huang’s和SENNA有明显的优势。从总体来看,对比原有Baseline均有提升,可见词向量一定程度上符合语言的表述,但此文中没有将word2vec、Glove等后起之秀考虑在内,无法客观的评价词向量技术哪家强。

13 Conclusion

自然语言处理与神经网络结合的研究数见不鲜。现有的word embedding还只是词的浅层的表示,还需要通过组合的方式表达句子、篇章等,这些高级部分可以参考Oxford的一篇PHD thesis:Distributed Representations forCompositional Semantics。显然从这几年的会议发表论文(ACL COLING EMNLP),发展趋势越来越靠近Machine Learning,尤其Deep Learning(Neural Network)观点的论文特别多。简单的基于论文titile查询统计embedding出现次数,ACL(8), Coling(5), EMNLP(10)。从论文质量上看,含金量高的paper越来越少。
当然,自然语言处理中还需要很多基础、耗时的工作来建立形式化方法,比如knowledge base(Yago,NELL等)。当这些基础设施构建基本完成,我们可以做推理(Reasoning)等,更进步一步促进人工智能的发展。

本文内容包含了部分个人理解和诠释,如各位读者发现文中错误或者与您理解不一致的情况,欢迎留言讨论或者私信我微博 @Copper_PKU,谢谢~

Reference & Comments

book

1. 宗成庆. 统计自然语言处理. 清华大学出版社. 2008. 此书为统计观点,适合CS背景做NLP的人读。

2.Manning, C. D Foundations of Statistical Natural Language Processing. MIT Press. 1999.

3. 冯志伟. 自然语言处理的形式模型. 中国科技大学出版社. 2010. 此书讲涵盖句法、语义各个层面 ps:作者是从Linguistic角度去分析自然语言处理

Model:

1. Yoshua Bengio. A Neural Probabilistic Language Model. JMLR(2003). 2003. 神经网络语言模型的开山之作,MileStone论文,引用率634(Google Scholar)。

2. Frederic Morin, Yoshua Bengio. Hierarchical Probabilistic Neural Network Language Model. Innovations in Machine Learning(2006). 2006.提出了Hierarchical NPLM

3. Andriy Mnih, Geoffrey Hinton. Three New Graphical Models for Statistical Language Modelling. ICML(2007). 2007. 提出了三个Model,其中提的较多的是A Log-Bilinear Language Model,后续论文多引用此模型

4. Andriy Mnih, Geoffrey Hinton. A Scalable Hierarchical Distributed Language Model. NIPS(2008). 2008. 提出HLBL

5. Ronan Collobert, Jason Weston. A Unified Architecture for Natural Language Processing: Deep Neural Networks with Multitask Learning. ICML(2008). 2008. 旧瓶新酒-TDNN + Multitask Learning

6.Ronan Collobert Jason Weston et al.Natural Language Processing (Almost) from Scratch. JMLR(2011). 2011. 对SENNA进行解释的论文,注意SENNA要区别[5]中的C&W embedding.

7. Eric H. Huang, Richard Socher, etc. ImprovingWord Representations via Global Context and MultipleWord Prototypes. ACL(2012). 2012. 此篇paper把全局信息加入模型,模型求解用了[5]中的方法

8. word2vec系列paper:

9. Nitish Srivastava, Ruslan Salakhutdinov,Geoffrey Hinton. Modeling Documents with a Deep Boltzmann Machine. UAI(2013). 类似于LDA的一种topic model

10. RNN系列, Recurrent NN能model long term dependency, 训练出的结果比Feed Forward NN结果更好 但训练复杂度更大 这个系列word2vec作者Mikolov研究较多,比如其博士论文

11. Recursive NN这个主要用在句法分析上,model自然语言存在的递归结构 这个主要是Richard Socher的paper

12. Joseph Turian, Lev Ratinov, Yoshua Bengio. Word representations: A simple and general method for semi-supervised learning. ACL(2010) 对现有的word Representation做了对比 提供一个新的word embedding 读者可以自行复现(见Section 13)。

13. Jeffrey Pennington,Richard Socher, Chris Manning. GloVe: Global Vectors for Word Representation. EMNLP(2014)
GloVe与word2vec对比的效果曾经被质疑过 其实word2vec效果差不多

14. Omer Levy, Yoav Goldberg.Neural Word Embedding as Implicit Matrix Factorization. NIPS. 2014.
将SGNS(Skip Gram with Negative Sampling)和矩阵分解等价分析,SGNS等价于分解PMI矩阵。文中作者基于谱方法(SVD)分解shifted PPMI的矩阵,得到了不错的效果(word sim上和word2vec类似)。作者还在arxiv提交了一个分析SGNS的note,结合看更加。

15.Q.V. Le, T. Mikolov.Distributed Representations of Sentences and Documents. ICML(2014). 2014. 文中各个实验都体现了好的效果,但是可复现性一直遭到质疑,最近在word2vec的google group上公布了复现方法,已经有人复现出92.6%的结果。

Tutorial:

1. Tomas Mikolov. Statistical Language Models Based on Neural Networks

2. Richard Socher. Recursive Deep Learning for Modeling Semantic Compositionality

3. Ruchard Socher, Christpher Manning. Deep Learning for Natural Language Processing (without Magic)

Evaluation:

1. Yanqing Chen, etc. The Expressive Power of Word Embeddings. ICML(2013). 实验评价了四个model–HLBL[4],SENNA[11],Turian’s[12], Huang’s[6].

本文链接:[我们是这样理解语言的-3]神经网络语言模型
本站文章若无特别说明,皆为原创,转载请注明来源:火光摇曳,谢谢!^^


火光摇曳

    • 请看之前word2vec google group中记录 Quoc Le在里面公布了如何修改word2vec代码 以及其他人已经确认复现了实验~

  1. Pingback: 转载–机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总 | MyCodeLife

  2. 我对照过bengio paper原文,下面d是输入层到隐藏层的偏置(长度为|V|),这个错了,应该是|h|b为隐藏层到输出层的偏置(长度为|h|),这个应该是|V|

  3. 非常棒的文章。有个问题请教,43式与44式之间的 F = exp 是怎么得到的,能否解释一下。另外43式最右分母可能有误

    • 请问,你知道在3.1模型结构中,总共的参数个数是怎么得到的?谢了哈

  4. 重新报告下 @萧瑟发现的错误,公式4的解释,d 和 b 的长度写反了