机器学习---NLP基础(Sequence、RNN、Attention model)

Why Sequence?

在很多的场景下,序列模型都有所应用,其类型也有很多,包括many-to-many(x和y

的序列长度可以相同可以不同),many-to-one(情感分类,比如给一句评论并且给其打分),one-to-many(音乐生成,比如给一个数字或者也可以是空集,生成一段音乐)

符号表示Notation

以简单的实体命名识别问题(Named-entity recognition)为例识别某单词是否是人名的一部分,实体命名识别通常用于搜索引擎,查找不同类型文本中的人名,国家名等。其中,用Tx和Ty表示序列的长度,x<t>表示输入序列x中第t个位置而x(i)<t>表示的是第i个训练样本的第t个位置

对于句子中的某个单词,首先要做的就是做一张词表(词典)列出在你的表示方法里要用到的单词,比如这里有10,000个单词,之后对于某个在词典中的单词采用one-hot编码进行表示,如果遇到了不在你词表中的词,创建一个叫做Unknown Word的伪造单词,用<UNK>进行标记

因为会给出带有(x,y)标签的数据,因此可以看作是监督学习的问题,去学习序列模型X和目标输输出Y之间的映射,如何才能学习到这种映射呢,那么就需要建立一个模型(神经网络)

RNN循环神经网络

如果我们采用序列模型的话,一个x<t>就是10,000维,输入矩阵的参数数量可想而知,并且我们学习到第一个位置出现的是Harry并且是人名的一部分,那我们希望在句子中间的部分出现Harry也可以判断到它是人名的一部分(就像CNN一样,将部分图片中学习到的内容快速推广到图片的其他部分),但是序列模型无法做到:

而引入的RNN循环神经网络就没有这两个缺点

一般将a<0>初始化为全0向量,计算a<t>时的激活函数通常采用tanh或Relu,y-hat<t>的激活函数通常采用sigmod,Waa和Wax这两个矩阵水平并排放置从而进行简化,Wya简化为Wy

从左到右的前向传播是个时间t一直增加的过程,而对于反向传播来说,从右到左的传播是个时间t一直减小的过程,就像是时间倒流,所以称之为穿越时间反向传播(Backpropagation through time),虽然使用编程框架中会自动处理反向传播,但对它进行了解还是有必要的。

理解这里的损失函数采用交叉熵(典型的logistic回归的Loss function),是因为单个位置下,y<t>是否是人名的一部分不是0就是1也即二分类问题,总体的损失函数就是所有位置下的损失函数进行加和。

标准的RNN只考虑前文的信息,而有时也需要根据后面的信息来判断,比如上图的例子光凭借He said,"Teddy无法判断Teddy是否是人名的一部分,这是就需要改变RNN的结构,采用BRNN双向的RNN结构

RNN的不同类型

根据输入输出的不同,将RNN的结构也分为不同的类型

还有一种结构——注意力机制Attention Model Intuition

对于注意力机制的直观的理解就是—和人类一样看一部分翻译一部分,虽然Attention是在机器翻译领域中提出,但现在也已经推广到其他众多领域。在seq2seq(encoder-decoder)结构下,进行机器翻译工作,对于长序列而言需要把整个序列都memorize下来然后再去翻译,而记下很长的序列是我们不想看到的也是效率比较低的,可以看到Bleu score在短序列时较高,当序列越来越长时分数就会降低

而Attention模仿我们人类进行翻译的方式,看一部分翻译一部分,所以不管序列的长度其Bleu score都不会出现明显的下跌(绿色线),这个下跌的程度(绿色线和蓝色线之间的差距)其实也反映了神经网络记忆一个长序列的能力

我们首先是采用一个BRNN(或者双向的GRU或者双向的LSTM)去表示法语的这个短句子(利用之前的notation),再利用另一个RNN去得到对应的翻译,此处的激活值为避免与BRNN的冲突于是采用S,对于第一个词的翻译(或者说得到S<1>)我们需要从下面的BRNN中得到上下文信息C(context),即我们需要关注短句子中的哪些词,这种关注度由注意力权重α来表示,加上上一个RNN单元的输出,共同作用而得到“Jane”这个翻译,同理对于S<2>和S<3>....

对于注意力机制有了个直观的了解,如何用公式表达出来:

这里例子中的短句进行了五次传播(或者是六次,将a<6>设为全0向量),此处为了方便表示,将前向的激活值和后向的激活值用a<t’>来共同表示:a<t'>=(a<t'>前向,a<t'>后向)

这里对于上方RNN的S<1>来说,其输入就是上下文向量c<1>,通过激活值a<t'>和相应的注意力权重α相乘再加和得到上下文向量c<1>,其中需要保证的是注意力权重加和为1

α<t,t'>就是指在y<t>在a<t'>处需要pay attention的数目,对于固定的t值而言:

使用Softmax保证对于t'的所有情况,sum a<t,t'> = 1

于是接下来就变成了计算e<t,t'>,利用一个小的神经网络,feed s<t-1>和a<t'>,让它自动学习函数

但这个函数有一个缺点就是它要花费quadratic二次方时间(即时间复杂度为O(n^2)),当输入词T_x个,输出词为T_y个,参数总数为T_x * T_y,但是对于机器翻译而言,其输入序列的长度不会太长所以二次方的时间复杂度也是可以接受的。

注意力机制包括两步:第一步计算注意力分布(注意力参数),这里的s()函数也就是上面所提到的需要通过小型神经网络学习的,理解它为打分函数,简单一点的可以是做内积或计算相似度,然后利用Softmax归一;第二步就是计算输入x的权重a(也就是上面的c),利用注意力参数和输入x乘积后加和,因为这里的α是注意力分布,相当于计算x的期望

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值