fairseq简介

fairseq是一个工具包,里面集成了常见的处理文本的一些网络模型,比如使用self-attention的transformer,使用了CNN的lightconv和dynamicconv。我们这里主要介绍一下fairseq包中使用CNN处理文本的网络模型的整体流程和发展。

fairseq包中使用CNN模型的流程图如下所示:

在这里插入图片描述
主要有以下几个模块组成:
1,具有位置信息的词嵌入(Position Embeddings)对于输入端,将含有m个单词的句子x=(x1,…xi…xm)映射到词向量空间形成句子向量w=(w1,…wi…wm),其中wi为一个维度为f的词向量,相当于维度为V*f的嵌入矩阵中的一个列向量,其中V为语料的字典大小。为了获取位置信息,根据单词所属的绝对位置得到位置向量p=(p1…pi…pm),其中pi也同样为f维度的向量,于是将上述句子向量和位置向量对应相加得到完整的单词嵌入向量e=(w1+p1,…wi+pi,…wm+pm)=(e1,…ei,…em)对于含有n个单词的输出端句子y=(y1,…yj,…yn)同样采用上述操作得到g=(g1,…gj,…gn)

2,卷积块结构(Convolutional Block Structure)
卷积块整体结构
首先对于输入端和输出端分别定义第l个卷积块为:zl=(zl1,…,zlm)和hl=(hl1,…,hln)。这里所说的块和层是同一个意思。
卷积块的整体结构为:每一个块包含了一个一维卷积,一维卷积后紧跟一个门控线性单元GLU,然后再进行残差连接。
我们可以根据具体的模型和任务堆叠若干个卷积块。

门控线性单元(Gated Linear Units,GLU)
从输入句子到门控线性单元激活的详细流程见右图。第一步先得到包含位置信息的单词向量组成的句子向量E(与上文的e向量完全一样)。
第二步是对上述句子向量E进行一维卷积操作。这里需要注意的是,由于GLU门控线性单元的特点,这里是使用了不同的参数分别对句子向量E进行了卷积操作得到A和B向量,也即:
Y = [A B]
再对上述得到的Y向量进行GLU门控线性单元激活:
在这里插入图片描述
这里 ⊗为点乘,σ(B)控制着A和当前文本的相关性。具体如下图所示:

在这里插入图片描述

残差连接
为了确保深度的卷积网络,该模型在门控线性单元GLU激活后后进行了残差连接:
在这里插入图片描述
其中hli表示第l个模块第i个状态,该公式表示了将k个第l-1块中的所有状态作为输入,经过卷积和门控线性单元GLU激活后再和第l-1模块的第i个状态相加便得到了第l个模块中的第i个状态。

卷积块后续操作
经过若干个卷积块以及后文所讲的attention后,再对解码(decoder)端的最后一层输出hLi先线性变换再进行softmax操作以得到下一个时刻(i+1)的单词分布
在这里插入图片描述
再使用argmax函数得到概率最大对应的单词作为最终单词输出。

3,多步骤注意力(Multi-step Attention)
接下来我们重点介绍一下attention的计算过程。为了计算attention,我们首先将解码器decoder中当前状态hli经线性变换后与上一时刻得到的目标单词的embedding gi求和得到dli。
在这里插入图片描述
decoder中第l层的attention alij的计算如下:
在这里插入图片描述
其中,zuj表示编码器encoder最后一层(第u层)第j个位置的输出。从上面公式可以看出,对于解码器decoder中的每一层均会计算与编码器encoder中元素的attention,这也多步注意力的由来。
解码器decoder当前层的条件输入(conditional input) cli
是编码器输出zuj和初始输入词向量ej的权重和。公式如下:
在这里插入图片描述
得到条件输入向量cli后再与第l块的输出hli相加后作为下一个(第l+1个)块的输入。
为了明了上述各个部分在图中的位置,特地在上图中手标了各个部分向量
在这里插入图片描述

目前业界使用的一般是基于lightconv的dynamicconv,是在上述的结构下做了一些调整。
主要的变化在于lightconv是深度可分离的,以及在通道维度权重共享的。这一系列的改变导致lightconv相对于一个标准的非分离卷积少几个数量级的权重参数。
而dynamicconv基于lightconv,它通过在每一个时间步预测一个不同的卷积核。lightconv在多项自然语言处理任务中与使用self-attention的网络相当,而dynamicconv在翻译以及文本摘要生成等任务中性能由于基于self-attention的网络,并且速度更快。
self-attention,lightconv和dynamicconv三者的对比如下:
在这里插入图片描述

更多详细资料请参考:
关于fairseq中使用CNN的基本框架和流程参考这篇文章:
Convolutional Sequence to Sequence Learning
关于门控线性单元GLU参考这篇文章:
Language Modeling with Gated Convolutional Networks
关于lightconv和dynamicconv的相关改变参考这篇文章:
Pay Less Attention with Lightweight and Dynamic Convolutions
关于lightconv中的深度可分离,通道层面的权重共享,参考这篇文章:
Depthwise Separable Convolutions for Neural Machine Translation

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值