邓侃
卡耐基梅隆大学博士
北京大数医达科技有限公司CTO
1. PaperWeekly 论文阅读小组
阅读论文是小众活动,阅读者分散在全球各地。PaperWeekly 论文阅读小组,把分散在全球的华人阅读者,聚合在一起。不仅互帮互助读懂论文,而且通过讨论,激发灵感。
进入 PaperWeekly 的网站,阅读者不仅可以看到本周热点论文标题,而且可以在线阅读论文正文。
网页左侧显示的是论文正文,阅读者可以在论文上划重点。网页右侧是讨论区,阅读者点击左侧重点语句后,就可以在右侧,针对这一句话提问和讨论。
参与者针对同一篇论文,逐段逐句地讨论。不仅讨论的话题聚焦,而且是最细颗粒度的讨论,非常深入。
论文读起来略感艰深,但是不乏乐趣。
譬如本周大家正在讨论的一篇论文,是 Facebook AI lab 上周(2017.5.12)发表的 “Convolutional Sequence to Sequence Learning” [1]。
这篇论文很轰动,因为 Facebook 把这项技术用于机器翻译,不仅精度超过了机器翻译的业界老大,Google Translate,而且翻译速度提高了 9 倍。
先读读该论文的摘要。论文摘要开门见山第一句话,就充满戏剧冲突。
“当前 Seq2Seq 流行的方式,是通过循环神经网络,把输入序列,转变变长的输出序列。我们提议一个新架构,完全依赖于卷积网络”。这是打擂台的语调哟。
读论文的乐趣之一,就是围观打擂。Facebook 这篇论文的主题,是卷积网络 CNN 与循环网络 RNN,在机器翻译和机器阅读领域的对决。
如果我们把镜头拉远一点,对决的不止是 CNN vs RNN。
2. 传统 NLP 对决深度学习
人类阅读的时候,往往从语句提炼出关键词和语义关系。
例如,阅读这个语句 “患者自诉无诱因出现咳嗽,浓痰,无咯血,夜间及运动后加剧”。
整个语句中最重要的词汇是 “咳嗽”,其次重要的词汇是 “浓痰” 和 “加剧”,再次是 “无咯血”、“无诱因”。这是整个语句中各个词汇的重要性排行。
“夜间” 和 “运动后” 是 “加剧” 的属性。而 “加剧” “浓痰” “无咯血”,是 “咳嗽” 的属性。这是词汇之间的依存关系。
想从语句中提炼出关键词和语义关系,传统的做法是,在理解语义之前,先对语句做标注和句法解析。分析出句子的主谓宾定语状语(tagging),然后把整个语句转换成树状的结构体(parsing)。根据树状结构体,很容易判断语句中各个词汇的重要性,以及词汇之间的依存关系。
先解析语法,然后理解语义,这是传统的做法。对于这种传统做法,业界有很大争议。
2016 年人工智能领域一大突破性进展,是谷歌翻译,从研究课题成为产品级服务,正式上线服务网民。谷歌翻译的核心技术就是 Seq2Seq。
Seq2Seq 这一技术,不仅可以用于机器翻译,而且也可以用于机器阅读,譬如让机器阅读一篇长文,然后自动生成文章摘要。
乘胜追击,深度学习学派试图把 Seq2Seq 这项技术,从机器翻译,拓展到整个自然语言处理领域。
3. 卷积 Convolution 对决循环 Recurrency
Seq2Seq 先把语句转换为一组词向量,通过对词向量的剪辑,提炼出语义向量。但是对于如何剪辑,深度学习学派内部又有争议。
先前占据话语权的一派,提议使用 LSTM 等等循环模型(RNN),来实现语义剪辑。RNN 模型的剪辑手段是三重门,记忆门、遗忘门、和输出门。
沿用上例,“患者自诉无诱因出现咳嗽,浓痰,无咯血,夜间及运动后加剧”,经过三重门的剪辑,“咳嗽” 的语义向量,不仅包含 “咳嗽” 的内容,也包含着 “无诱因” 和 “浓痰” 这些上下文的内容。
RNN 模型的突出优势,是很好地解决了长距离依赖的难题。沿用上例,“加剧” 对应的语义向量,不仅包含 “加剧” 的内容,而且也包含 “咳嗽” 的内容。
Facebook 这篇论文之所以轰动,是因为他们使用了 CNN 卷积模型,来取代 RNN 循环模型。不仅精度超越循环模型,而且训练速度提高了 9 倍。
PaperWeekly 阅读组里讨论的热点有二,为什么更快?为什么更准?
CNN 比 RNN 的训练速度快,这一点容易理解,没有争议。卷积比循环的训练速度快,这是由两个因素造成的必然结果。
卷积可以并行处理,而循环只能按顺序依次处理。在云计算平台上,让多个机器同时并行训练卷积模型,速度当然比串行训练循环模型来得快。
可以用 GPU 芯片来加速卷积模型的训练,而暂时还没有硬件能够加速 RNN 的训练。
有争议之处,在于精度的高下,究竟是取决于 CNN vs RNN 模型的不同,还是取决于解码技术,尤其是解码器的关键技术 attention 的改进?
个人认为,卷积(convolution)的层层抽象,与循环(recurrency)的三重门,其实是异曲同工。虽然手段不同,但是目的都是忽略次要内容,传承重要内容。所以,在精度方面,卷积与循环不会有太大差距。
Facebook translate 与 Google translate 的精度差异,应该来自于 Facebook translate 对于 attention 的改进。
4. Attention 的擂台刚刚拉开帷幕
Facebook 研究组,对 attention 做了改进,体现在两点。
Google Translate 的解码器使用的是单层的 LSTM 模型,相应地,attention 也是单层的。Facebook 的解码器使用的是 CNN 模型,是多层的。相应地,Facebook 的 attention 是多跳的(multi-hop)。越是底层的 attention,越聚焦,细节越丰富。越是高层的 attention,视野越开阔,抽象程度越高,越能抓住文章主旨。
Google Translate 使用的 attention,依赖于编码器生成的语义向量,而不依赖于输入的原生态的词向量。而 Facebook 的 attention,对语义向量和原生态词向量兼收并取。语义向量负责把握主旨,保证解码器的输出不偏题。原生态词向量关注措辞,保障解码器的输出用词得当。
对于 attention 的改进,个人预感近期内将会有更大的突破。无论 Google 的 attention,还是 Facebook 的版本,在计算 attention 的权重时,都以计算向量间的距离为基础。简单点说,就是寻找语句中字面意思最贴近的词汇。
这种只聚焦字面意思的 attention 的计算方式,是无法解决 “话外有话” 的暗示型的语句的。同样是英语,英国人说话比美国人委婉。单靠理解字面意思,是无法理解英国人真实的态度的。
个人猜想,将来 attention 的机制,还得融入规则。同理,只理解字面意思的 attention 的计算方式,也无法理解 “引经据典” 和 “含沙射影” 的联想型的语句。要正确理解 “引经据典” 和 “含沙射影” ,将来 attention 的机制,还得融入知识图谱。
5. 其他用户讨论精选
Pandabro
dis-tributional space as w= (w1,....,wm)
这个 distributional space 还有 position embedding 是事先学好的还是在 model 里面学的?因为之后要把两个 embedding 相加,需要保证 word embedding 和 position embedding 是在同一个 space 里吧?如何保证呢?
kan_deng:是预处理的。把两个 embedding 相加,是为了方便计算。譬如有个句子,“I am here”,每个词都有一个 512 维的词向量,同时三个词的序列号分别是 1、2、3。把 1、2、3 也转化成 512 维的词向量,然后两个词向量拼接在一起,形成 1024 维的向量。这样做是为了方便计算。当然,序列号的词向量,完全可以用低维度向量,但是为了方便,仍把序列号的词向量也定为与词向量同等维度。
ZhaoTIanyu
Convolutional net-works do not depend on the computations of the previoustime step and therefore allow parallelization over every ele-ment in a sequence. This contrasts with RNNs which main-tain a hidden state of the entire past that prevents parallelcomputation within a sequence
在序列处理中,CNN 比 RNN 快是因为 CNN 不需要上一步的 state 来计算当前 state,所以每一步可以并行计算。
zhangjun:CNN 在之前的文本学习中通常处理口语化、短文本效果比较好。记得之前 tong zhang 老师有篇 paper 是对比 RNN 和 CNN 在文本分类上效果的对比。
pandabro:处理短文本效果好可能只是因为 CNN 的 input coverage 不够大同时 model 不够 deep。这个问题应该可以逐步解决。
Jasonqhjia:在文本分类上,CNN 比 RNN 效果好,同时训练速度快。
zeng
Figure 1.Illustration of batching during training.
batch the attention computation across all elements of a sequence compared to RNN. 图中中间的矩阵就是 attention 矩阵,每 i 行对应输出中的第 i 个词对于输入句子所有词的 attention 的分布。 因为训练的时候,decoder 段也是直接用 cnn,不存在时间上的依赖,所以可以同时计算所有词的 attention 分布。但是文中没有说怎么 batch the various input sequence length,还请知道的解释一下,如何用 CNN 批处理变长的输入;传统的都是统一 padding 成一个长度,或者一组长度; 针对 RNN, pytorch 里面有 packedSequence,tf 也有 lengths 这个属性,但是针对 CNN 不知道是怎么处理的。
WarBean:可以在每个 softmax attention 之后乘个 mask,盖掉那些输入 padding 的位置,再 normalize 回一个概率向量作为真正的 attention。
6. 参考文献
[1] Convolutional Sequence to Sequence Learning.
https://arxiv.org/abs/1705.03122
「点击这里」,查看全部嘉宾阵容并报名参与机器之心 GMIS 2017 ↓↓↓