Incorporating Copying Mechanism in Sequence-to-Sequence Learning

今天分享的paper是Incorporating Copying Mechanism in Sequence-to-Sequence Learning,作者来自香港大学和华为诺亚方舟实验室。

本文的模型通过借鉴人类在处理难理解的文字时采用的死记硬背的方法,提出了COPYNET。将拷贝模式融入到了Seq2Seq模型中,将传统的生成模式和拷贝模式混合起来构建了新的模型,非常好地解决了OOV问题。解决问题的思路与之前的一篇有关Pointer的文章十分类似。decoder部分不断地变复杂,考虑的因素越来越多,模型的效果也越来越好。如果结合上一篇Minimum Risk Training的训练方法,相信在评价指标上会更进一步。

综述

Seq2Seq技术占据了nlp多个研究任务的评测榜首,包括最早提出该技术的机器翻译,句法分析,文本摘要,对话系统。Seq2Seq本质上是一个encoder-decoder的模型,encoder部分将输入的序列变换成某一种表示,然后decoder将这种表示变换成输出序列。在Seq2Seq的基础上,首次增加注意力机制来做机器翻译的自动对齐。注意力机制在很大程度上提升了Seq2Seq的性能。

本文研究了人类语言交流的另一个机制,“拷贝机制”(copy mechanism),定位到输入序列中的某个片段,然后将该片段拷贝到输出序列中。比如:

但是注意力机制严重依赖于语义的表示,在系统需要获取到命名实体或者日期时难以准确地表示。相对之下,拷贝机制更加接近于人类处理语言问题的方式。本文提出了COPYNET系统,不仅具备传统Seq2Seq生成词的能力,而且可以从输入序列中拷贝合适的片段到输出序列中。在合成数据和真实数据中均取得了不错的结果。

Seq2Seq

文章的这部分简单介绍了一下Seq2Seq+Attention Mechanism技术,前面的博客分享了很多这部分的内容,这里就不再赘述了。

COPYNET

从神经学角度来讲,拷贝机制和人类的死记硬背类似,较少地理解到了意思但保留了字面的完整。从模型的角度来讲,拷贝机制相比于soft注意力模型更加死板,所以更难整合到神经网络模型中。

模型综述

COPYNET依然是一个encoder-decoder模型,如图1所示:

encoder采用了一个双向RNN模型,输出一个隐藏层表示的矩阵M作为decoder的输入。decoder部分与传统的Seq2Seq不同之处在于以下三部分:

  • 预测:在生成词时存在两种模式,一种是生成模式,一种是拷贝模式,生成模型是一个结合两种模式的概率模型。
  • 状态更新:用t-1时刻的预测出的词来更新t时刻的状态,COPYNET不仅仅词向量,而且使用M矩阵中特定位置的hidden state。
  • 读取M:COPYNET也会选择性地读取M矩阵,来获取混合了内容和位置的信息。

拷贝模式和生成模式

首先,构造了两个词汇表,一个是高频词词汇表,另一个是只在输入序列中出现过一次的词,这部分的词用来支持COPYNET,用UNK表示超纲词(OOV),最终输入序列的词汇表是三者的并集。

给定了decoder当前状态和M矩阵,生成目标单词的概率模型如下:

模型中g表示生成模式,c表示拷贝模式。两种模式的概率由下式给定:

共四种可能情况,下图会更形象一些:

其中生成模式的打分公式是:

拷贝模式的打分公式是:

状态更新

decoder状态更新的公式是

不同的是这里的t-1时刻的y由下式表示:

后面的部分是M矩阵中与t时刻y相关的状态权重之和,如下:

M矩阵

M矩阵中既包含了内容(语义)信息,又包含了位置信息。COPYNET在attentive read时由内容(语义)信息和语言模型来驱动,即生成模式;在拷贝模式时,由位置信息来控制。

位置信息的更新方式如下图所示:

实验

一共分为三个实验:

  • 简单规则构造的合成数据。
  • 文本摘要相关的真实数据。
  • 简单对话系统的数据。

这里只看文本摘要实验。

文本摘要

数据采用LCSTS中文短文本摘要数据集,分为两个level来测试:word-level和char-level,并且以LCSTS的baseline作为对比,结果如下:

本文的模型远远优于baseline,而且word-level的结果比char-level更好,这与当时LCSTS paper中的结论不同,一个可能的原因是,数据集中包含了大量的命名实体名词(entity name),LCSTS paper中的方法并不能很好地处理大量的UNK单词,因此baseline中的char-level效果比word-level更好,而本文的模型的优势在于处理OOV问题,所以word-level结果更好一些。

来源:paperweekly

原文链接

时间: 2024-09-25 20:55:11

Incorporating Copying Mechanism in Sequence-to-Sequence Learning的相关文章

论文解读:Convolutional Sequence to Sequence Learning

" 邓侃 卡耐基梅隆大学博士 北京大数医达科技有限公司CTO 1. PaperWeekly 论文阅读小组  阅读论文是小众活动,阅读者分散在全球各地.PaperWeekly 论文阅读小组,把分散在全球的华人阅读者,聚合在一起.不仅互帮互助读懂论文,而且通过讨论,激发灵感. 进入 PaperWeekly 的网站,阅读者不仅可以看到本周热点论文标题,而且可以在线阅读论文正文. 网页左侧显示的是论文正文,阅读者可以在论文上划重点.网页右侧是讨论区,阅读者点击左侧重点语句后,就可以在右侧,针对这一句话提

Sequence to Sequence Learning with Neural Networks

seq2seq+各种形式的attention近期横扫了nlp的很多任务,本篇将分享的文章是比较早(可能不是最早)提出用seq2seq来解决机器翻译任务的,并且取得了不错的效果.本文的题目是Sequence to Sequence Learning with Neural Networks,作者是来自Google的Ilya Sutskever博士(现在OpenAI).可以说这篇文章较早地探索了seq2seq在nlp任务中的应用,后续的研究者在其基础上进行了更广泛的应用,比如自动文本摘要,对话机器人

如何生成主题相关的对话 | 每周一起读 #11

Topic Aware Neural Response Generation 对话生成是一个非常热门的研究方向,通过 Seq2Seq 来生成与某个主题相关的对话,让整个对话内容的信息量更大.相关性更强,是一个非常有意思的研究思路.本文的工作给出了一些不错的想法.以下是Chatbot 专题阅读小组中的各位同学对本文的解读和讨论. 此外,PaperWeekly 将于今天正式成立自动文摘和统计学习专题阅读小组,在组内发起「每周一起读」活动.我们将每周选定一篇优质文章,邀请国内外行业大咖和高校大牛入驻讨

让问答更自然 - 基于拷贝和检索机制的自然答案生成系统研究 | 论文访谈间 #02

让机器像人类一样拥有智能是研究人员一直以来的奋斗目标.由于智能的概念难以确切定义,图灵提出了著名的图灵测试(Turning Test):如果一台机器能够与人类展开对话而不能被辨别出其机器身份,那么称这台机器具有智能.图灵测试一直以来都被作为检验人工智能的象征.问答系统本身就是图灵测试的场景,如果我们有了和人一样的智能问答系统,那么就相当于通过了图灵测试,因此问答系统的研究始终受到很大的关注. 传统知识问答都是针对用户(使用自然语言)提出的问句,提供精确的答案实体,例如:对于问句"泰戈尔的出生地在

Semi-supervised Sequence Learning

之前分享过几篇有监督的sentence表示方法,比如Recurrent Convolutional Neural Networks for Text Classification.Convolutional Neural Networks for Sentence Classification,也分享过很多几篇无监督的sentence表示方法,比如Distributed Representations of Sentences and Documents.Skip-Thought Vectors

关于C/C++中的side effect(负效应)和sequence point(序列点)_C 语言

不知你在写code时是否遇到这样的问题?int i = 3; int x = (++i) + (++i) + (++i); 问x值为多少?进行各种理论分析,并在编译器上实践,然而可能发现最终的结果是不正确的,也是不稳定的,不同的编译器可能会产生不同的结果.这让人很头疼.结果到底是啥呢?对于此题的答案,一句话,Theresult is undefined! 详细解释待我慢慢说来. 大家知道,通常而言,我们写的计算机程序都是从上到下,从左到右依次执行.然而,我只是说通常,因为在编译的过程中,comp

在MSSQL中实现Sequence功能

目的: 通过该功能取代 MSSQL 中的表ID列自动递增功能   主题一:如何通过Sequence名得到一个Sequence值 方法: 1.    创建一个表Sequence,保存Sequence的值 2.    创建一个存储过程GetNextSequence,以通过它得到下一个Sequence 主题二:如何通过一个表名得到一个Sequence值 1.    创建一个表TableSequence,保存表中的列对应的是哪个Sequence 2.    创建一个存储过程CreateTableSeq,

从不sequential的sequence

       遇到过好多问题关于如何在ORACLE 中创建类似SQLSERVER或ACCESS中自增长字段.答案多是先建立一个Sequence,然后在Trigger中将Sequence的NEXTVAL的取值赋予所需要的列.看上去还不错.                 但是一切真的那么顺利吗?Sequence 真的可以做到提供一序列连续没有遗漏的序列数值吗?          不妨作个实验:   SQL> create sequence test_seq start with 1; Sequen

ORACLE中序列-sequence的应用

oracle oracle中没有象Acces中自动编号的字段类型,所以在oracle中要想用一个字段自动增值,还比较麻烦,在此提供给大家一个方法,利用序列,来完成字段的自动增加,下边介绍一下怎么创建序列,使用序列,和删除序列. 1.创建序列--------------create sequence  create sequence  Seq_AutoID   //所起序列名叫 Seq_AutoID ,需要记住此序列名,以后方可调用 minvalue   1   //最小值从1开始 可以根据自己的