欢迎光临 x-algo
关注算法在工业界应用
Hi, 这是一个关注大数据算法在工业界应用的网站

LSTM+CRF介绍

LSTM和CRF要解决问题的:序列标注问题(中文分词、词性识别、命名实体识别、机器翻译等)

本文先介绍LSTM的基本结构,再介绍LSTM与CRF结合的方法(CRF的具体算法介绍不包括在本文中)。

LSTM是RNN的一种特殊形式,首先看一下RNN单元的基本结构定义:1rnn

简单解释一下,RNN其实是希望能模拟人类大脑处理信息的方式,人类的大脑所接收的信号可以分为外部(即我们的感知,视觉、听觉等)和内部(脑海中已经存在的想法),在不同的时刻,大脑会使人产生新的行动(external output)和新的想法(internal output)。RNN网络其实是一组前向网络的组合,每个单元代表一个时间点,每个RNN单元(也有人叫细胞)有两种输入输出,分别代表RNN网络自身的输入输出,以及应对外部刺激的输入输出(可以看作是希望传递到下一时刻的状态)。按照这里提出的通用结构,理论上来说RNN可以完美的模拟人的大脑,但是实际训练起来并不是那么简单。主要问题大家都知道:RNN训练通常伴随着梯度衰退缓慢和梯度爆炸增长现象。LSTM正是为了解决这一问题而提出的。

LSTM设计的初衷是为了确保现实世界中信息的完整性,引入一个memory cell,即对历史信息进行记录,并且这个记录是有控制有选择的。由此引入了三个控制门的概念。这三个控制门分别控制LSTM单元应该写入什么、读取什么、输出什么。

我们可以先看一下LSTM的原型结构:

2lstm-proto

其中,三个控制门的定义如下:

\(i_{t}=\sigma \left ( W_{i}s_{t-1}+U_{i}x_{t}+b_{i} \right )\)

\(o_{t}=\sigma \left ( W_{o}s_{t-1}+U_{o}x_{t}+b_{o} \right )\)

\(f_{t}=\sigma \left ( W_{f}s_{t-1}+U_{f}x_{t}+b_{f} \right )\)

\(\tilde{s_{t}}=\phi \left ( W\left ( o_{t} \odot s_{t-1} \right )+Ux_{t}+b \right )\)

\(s_{t}=f_{t}\odot s_{t-1}+i_{t}\odot \tilde{s_{t}}\)

 

这里跟最开始的RNN模型进行对比,可以发现, \(s_{t-1}\) 是内部输入,可以看做是前一时刻的状态, \(x_{t}\) 是当前输入,前一状态和当前输出决定了门的控制方式,进而通过三个控制门去控制输出 \(rnn_{out}\) 和更新当前状态 \(s_{t}\)

但是这个原型有个很明显的问题,就是状态值 \(s_{t}\) 是无界的,在训练刚开始的时候,由于各项权重值都是随机初始化的,并且 \(o_{t}\)\(f_{t}\) 是无关的,导致状态值很容易变得很大并且是杂乱的,使得门和输出候选集合都会很容易饱和,因而需要给状态值加上限制范围。有很多LSTM的变体可以克服这个问题,最简单的通过归一化可以实现,另外GRU(Gated Recurrent Unit)结构也可以避免这个问题,或者是引入非线性变换的方法。

很多人会把GRU看作是LSTM的一个简化,因为它将写入门和记忆门进行了关联,最终相当于只使用了两个门,在GRU结构中被称作update gate和reset gate。

3gru

这两个门的定义如下:

\(r_{t}=\sigma \left ( W_{r}s_{t-1}+U_{r}x_{t}+b_{r} \right )\)

\(z_{t}=\sigma \left ( W_{z}s_{t-1}+U_{z}x_{t}+b_{z} \right )\)

\(\tilde{s_{t}}=\phi \left ( W\left ( r_{t} \odot s_{t-1} \right )+Ux_{t}+b \right )\)

\(s_{t}=z_{t}\odot s_{t-1}+\left ( 1- z_{t}\right )\odot \tilde{s_{t}}\)

 

这里相当于把写入门和记忆门认为是负相关的,这样就能尽可能稳定状态值。

引入非线性变换的方法,我们这里定义为伪LSTM结构,即对状态值进行sigmod或tanh等类型的非线性变换,使用变换后的值来更新控制门和候选输出,最终的rnn输出也使用变换后的,但是要注意,在更新状态值的时候,仍然使用变换前的状态值,这同样可以达到限制状态值范围的作用。

伪LSTM的单元结构如下:

4preso-lstm

对应公式如下:

\(i_{t}=\sigma \left ( W_{i}\left ( \phi\left (s_{t-1} \right ) \right )+U_{i}x_{t}+b_{i} \right )\)

\(o_{t}=\sigma \left ( W_{o}\left ( \phi\left (s_{t-1} \right ) \right )+U_{o}x_{t}+b_{o} \right )\)

\(f_{t}=\sigma \left ( W_{f}\left ( \phi\left (s_{t-1} \right ) \right )+U_{f}x_{t}+b_{f} \right )\)

\(\tilde{s_{t}}=\phi \left ( W\left ( o_{t} \odot \phi\left (s_{t-1} \right ) \right )+Ux_{t}+b \right )\)

\(s_{t}=f_{t}\odot s_{t-1}+i_{t}\odot \tilde{s_{t}}\)

\(rnn_{out}=\phi \left ( s_{t} \right )\)

 

伪LSTM和通常定义的基本LSTM的区别主要有三个:

1.LSTM是在写入之后才读取,这样迫使LSTM网络中各单元之间需要有隐藏层;

2.在计算控制门的时候,使用的是门控隐状态 \(h_{t-1}=o_{t-1}\odot \phi \left ( c_{t-1} \right )\) ,而不是非线性变换后的主状态 \(\phi \left ( c_{t-1} \right )\)

3.LSTM的外部输出是门控隐状态 \(h_{t}=o_{t}\odot \phi \left ( c_{t} \right )\) ,而不是非线性变换后的主状态 \( \phi \left ( c_{t} \right )\) 故而基本的LSTM单元结构如下:

5lstm

\(i_{t}=\sigma \left ( W_{i}h_{t-1} +U_{i}x_{t}+b_{i} \right )\)

\(o_{t}=\sigma \left ( W_{o}h_{t-1} +U_{o}x_{t}+b_{o} \right )\)

\(f_{t}=\sigma \left ( W_{f}h_{t-1} +U_{f}x_{t}+b_{f} \right )\)

\(\tilde{c_{t}}=\phi \left ( Wh_{t-1}+Ux_{t}+b \right )\)

\(c_{t}=f_{t}\odot c_{t-1}+i_{t}\odot \tilde{c_{t}}\)

\(h_{t}=o_{t}\odot \phi \left ( c_{t} \right )\)

\(rnn_{out}=h_{t}\)

 

还有一种LSTM的变体,也是目前比较常用的结构,即LSTM with peepholes,在控制门中也引入前一时刻的状态,如下:

\(i_{t}=\sigma \left ( W_{i}h_{t-1} +U_{i}x_{t}+P_{i}c_{t-1}+b_{i} \right )\)

\(f_{t}=\sigma \left ( W_{f}h_{t-1} +U_{f}x_{t}+P_{f}c_{t-1}+b_{f} \right )\)

\(\tilde{c_{t}}=\phi \left ( Wh_{t-1}+Ux_{t}+b \right )\)

\(c_{t}=f_{t}\odot c_{t-1}+i_{t}\odot \tilde{c_{t}}\)

\(o_{t}=\sigma \left ( W_{o}h_{t-1} +U_{o}x_{t}+P_{o}c_{t}+b_{o} \right )\)

\(h_{t}=o_{t}\odot \phi \left ( c_{t} \right )\)

\(rnn_{out}=h_{t}\)

 

上述介绍了LSTM单元结构,LSTM网络是多个LSTM单元结构的组合,目前常用的双向LSTM网络通常通过是使用两层LSTM,在反向层将输入反向实现的。

通过LSTM网络的处理,相当于得到了一个比较好的对输入数据的表示方法,LSTM单元最终输出的向量即可以看成是输入数据的一种表示形式,最终在打标签阶段,一般都采用softmax进行处理,不过这种方法在处理输出标签直接有强烈关系的数据时,效果还是有限的。特别是在实际的序列标注任务时,由于神经网络结构对数据的依赖很大,数据量的大小和质量也会严重影响模型训练的效果,故而出现了将现有的线性统计模型与神经网络结构相结合的方法,效果较好的有LSTM与CRF的结合。简单来说就是在输出端将softmax与CRF结合起来,使用LSTM解决提取序列特征的问题,使用CRF有效利用了句子级别的标记信息。

如下是用于实体识别的LSTM+CRF模型结构:

7lstm+crf

在LSTM+CRF模型下,输出的将不再是相互独立的标签,而是最佳的标签序列。

对于输入: \(X=\left (x_{1},x_{2},...,x_{n} \right )\)

我们可以定义LSTM的输出概率矩阵 \(P_{n*k}\) 其中k是输出标签的个数。 \(P_{i,j}\) 是指第i个字被标记为第j个标签的概率。对于待预测的标签序列: \(y=\left (y_{1},y_{2},...,y_{n} \right )\)

我们可以有如下定义:

\(s\left ( X,y \right )=\sum_{i=0}^{n}A_{y_{i},y_{i+1}}+\sum_{i=0}^{n}P_{i,y_{i}}\)

 

其中A是状态转移矩阵, \(A_{i,j}\) 代表从第i个tag转移到第j个tag的概率。

通过求得最大的 \(s\left ( X,y \right )\) ,即可得到最佳的输出标签序列。这里引入的CRF,其实只是对输出标签二元组进行了建模,然后使用动态规划进行计算即可,最终根据得到的最优路径进行标注。

参考文献:

1.http://r2rt.com/written-memories-understanding-deriving-and-extending-the-lstm.html

2.Bidirectional LSTM-CRF Models for Sequence Tagging(https://arxiv.org/abs/1508.01991)

3.Neural Architectures for Named Entity Recognition(https://arxiv.org/abs/1603.01360)

4.http://www.jianshu.com/p/9dc9f41f0b29

未经允许不得转载:大数据算法 » LSTM+CRF介绍

评论 抢沙发

*

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

关注大数据算法在工业界应用

本站的GitHub关于本站