摘要

近年来,文本生成在不同的环境中取得了显著的进展,例如从零开始生成文本以及正在出现的恢复和重写的方式。填充句子或段落中缺失的文本部分的文本填充技术在现实生活中也有很多用途,但还没有得到充分的探索。以前的工作要么一个缺失部分就是一个单词,要么就是缺失部分一定在末尾。本文研究文本填充的一般任务,其中输入文本可以有任意数量的部分要填充,每个部分可能需要任意数量的mask标记。我们研究了各种不同的方法来完成这项任务,包括一个self-attention模型,它具有segment-aware的位置编码和双向上下文模型。我们通过用不同的策略mask文本来创建大量的监督数据。实验表明,self-attention大大优于其他模式,为未来的研究创造了坚实的基础。

1 导言

文本生成跨越了一系列旨在从输入数据中生成自然语言的任务,包括机器翻译、摘要、对话等。以往的工作在不同情况下的文本生成方面取得了显著的进展。例如,最常见的设置是从头开始生成整个文本序列,最近的工作开始利用恢复的参考来帮助生成,也有一些工作通过操控给定文本的特殊方面来生成。

文本填充,即填充句子或段落中缺失的文本片段,在现实生活中也是一种常见的应用,可用于许多内容,如恢复历史或陈旧的文档、用模板撰写合同或文章、文本编辑等。文本填充的探索较少,或者在简化和受限的环境中进行过研究。 例如最近的MaskGAN和句子完成任务,只假设句子的缺失部分只有一个单词。这种假设不能满足一般的文本填充的要求,因为一般文本缺失的部分并不是定长的。其他工作假设缺失部分在句子末尾,生成的是给定句子的延续。这些技术并不能用到真实场景中,因为缺失的部分往往是随机的。

考虑到输入文本可能有任意数量的缺失部分,每一个缺失部分可能有任意数量的缺失单词。这个任务要去根据全局和周围的文本来填充缺失的部分,并且使文本完善以及具有意义。比如,给定这样一个不完整的句子(我们称之为模板)“____have a ______,please."输出可以为 Can I have a beef burger with cheddar, please."这种如此一般化,不受限的文本填充设置从未被研究过。

我们对这个问题做了一些探索,比如使用attentional seq2seq模型和基于GAN的方法。为了更好地捕捉缺失部分的全局和周围的文本,我们使用了self-attention模型。并且使用segment-aware位置编码来确保当有多段缺失部分中有变长的缺失词汇时时候的定位准确性。

我们以多种具体的设置进行了诸多的实验,数据对象是随机或者有计划地以一定比例mask掉变长数量段落的文本。

有趣的是,目前的工作与文本表示学习使用一个类似的模型和训练对象。利用预训练模型(bert)在文本填充中是我们未来的工作方向。

2 相关工作

3 文本填充

3.1 问题定义

就是给定一个段落要填充空白部分

如上图所示就是要预测两个m的部分,空白处的位置和数量都是已知的,但是缺失词的数量并不知道,我们要自己决定可以生成多少词。

3.2 Preliminary Solutions

我们用三种方法seq2seq,GAN和self-attention,主要描述self-attention方法。

我们认为self-attention最适合填充任务,因为他(与只能从左往右不同)可以注意到空白部分的左右双向,来对全局语义做一个有效的encoding。

模型就是一个简单的self-attention网络,在空白处一个词接着一个词生成。每次当要生成一个词的时候,模型会关注所有已经知道的词汇(包括本来就有的词和已*9经生成的词),然后计算要写的词汇的概率分布。当一个特殊标记<end-of-blank>生成的时候,模型就开始填充其他的空白部分。

这里我们要使用position encoding,但是在文本填充任务中,每一个空白都有一个任意的数量位置的填充词汇,很难用传统的单个单词索引一个向量的方法。我们使用每段的id和单词在段落中的位置一起来定位每一个单词。比如一个位置索引(2,1)可以表示第二段的第一个词。

更多细节已经在附录中。seq2seq模型也是逐渐生成填充词汇的。GAN模型在seq2seq上添加了一个判别器来帮助全局的语义统一。

4 Experiments

我们目的是研究以上几种方法对于文本填充的效果。我们用几种不同的策略来生成监督学习数据集,来训练模型生成原来的文本。

我们使用LSTM作为seq2seq的模型,并使用一个卷积网络作为GAN的判别器。这两个方法和self-attention一样使用position encoding。self-attention模型有6个模块。附录B中有更多细节。

4.1 Varying Mask Rates and #Blanks

我们首先研究mask rate和空白数量在模型性能上的影响,直觉来说,这个比例越大任务越难。我们选择Yelp评论数据集制作数据集,大小是104k/1k为训练集和测试集,词表大小为9k。

Quantitative and Human Evaluation

我们同时用一些评估指标和人力来评价模型性能。对于人力评估,我们分别用三个模型填充一个数据,然后让人力评价,最好为3分,接着为2分,1分。

从下表中,分别是BLUE和PPL标准还有人力标准。我们可以发现双向文本模型最好。

Samples:下面是一个例子,我们可以发现self-attention的最好。

4.2 Long Content Infilling

我们接着评估模型在只有一两个词汇下的长文本填充能力。这里我们mask文本以一定的策略来模仿真实场景。我们分别用格林童话和NBA报道作为数据集。

Quantitative and Human Evaluation

我们依旧用上面的方法来评估模型,不过用的是增加过的mask rate。因为答案过于开放,BLUE失去了意义。我们可以看到self-attention的生成文本更加有意义。结果如下图。

附录:

A more Details of Text Infilling Self-Attention Model

这里我们描述一些self-attention模型在这里的细节

A.1 Notations

我们先介绍如下符号的意思。

__m__是一个blank的placeholder,其中一行数据中会有多个词被mask掉。我们使得生成的句子和整个句子用不同的开始和结束标记,我们用<bob>和<eob>称为每个blank的开始和结束标记,<bos>和<eos>标记整个句子的开始结束标记。

对于输入序列x=(s1,s2,...,sn),si代表第i个输入segment。我们使

表示第i个segment的第j个词,si为

使

为模板序列,任务是要填充seg

id是i的blank。我们使用 表示需要填充的部分, 表示其中的词。M是所有blank的seg_id的集合。

A.2 Approach

图2描述了我们模型的整体架构。我们模型的基础是一个multi-head self-attention token decoder,它可以考虑到过去和未来的信息。

A.2.1 Template

假设在一个模板中,segment i 和segment j(i<j)被mask。模板的初始状态为

。训练时,在生成第i段后,真实的
会被补充到模板中,模板会变成
在测试时候,推理的结果会被补充到模板中,模板为

A.2.2 Position Encoding

每个词的位置都由段id segid和段内位置offset id决定。我们用sin和cos函数来作为position encoding

其中i是维度,

,base是自定义的整数。位置嵌入和词嵌入具有相同维度,方便两者可以相加。两者之和将作为Transforme的输入。

A.2.3 Applications of Attention

本文架构如上图,attention的做法完全和谷歌论文attention is all you need一模一样。

不同的地方在于,template是一句话,然后可能有两个空白。将两个答案合在一起,做个masked的self-attention(只能看到当前预测词之前的信息),然后以这个结果作为query。另外一边,那句话(带有两个占位符)作为key和value,再做一次attention,再经过一个FF就得到了一层的输出。下一层的query来源于上一层的输出再经过一个self-attention,key和value不变。然后重复这一过程。这就是训练过程。

A.2.4 Training

在填充过程中,decoder会一个一个的进行填充。decoder自回归地填充,利用template和template中已经有的内容。为了填充第i个segment,目标是去减少交叉熵损失。

对于一个完整的句子来说损失函数是:

优化:ADAM优化器。对于第一个warmupsteps训练步骤,我们线性增加学习率,然后再减少。const=0.3,warmup_step=10000。

B.2 Training Process

B.2.1 Training Parameters

batch_size = 200

training_epoch = 150

C Other Experiments

接下来三图,分别是

表5:当mask率产生变化或者balnk有一处和两处的结果

表6,表7:长文本填充,其中表6只留名词和动词

表8:句子中只移除介词和冠词,发现基于rnn的模型很难学习到语法,而我们的模型可以。

有任何疑问或者纠错,作者随时在线哦

关注专栏

任意线段集生成多边形_self-attention缺失文本生成||Text Infilling相关推荐

  1. 利用循环神经网络生成唐诗_PyTorch实现用于文本生成的循环神经网络

    自然语言处理(NLP)有很多有趣的应用,文本生成就是其中一个有趣的应用. 当一个机器学习模型工作在诸如循环神经网络.LSTM-RNN.GRU等序列模型上时,它们可以生成输入文本的下一个序列. PyTo ...

  2. python自动生成鸡汤文_马尔可夫链文本生成的简单应用:不足20行的Python代码生成鸡汤文...

    提到自然语言的生成时,人们通常认为要会使用高级数学来思考先进的AI系统,然而,并不一定要这样.在这篇文章中,我将使用马尔可夫链和一个小的语录数据集来产生新的语录. 马尔可夫链 马尔可夫链是一个只根据先 ...

  3. 莎士比亚风格的文本生成任务

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 莎士比亚风格的文本生成任务 学习目标 了解文本生成任务和相关数 ...

  4. 详解预训练模型、信息抽取、文本生成、知识图谱、对话系统技术

    我们正处在信息爆炸的时代.面对每天铺天盖地的网络资源和论文.很多时候我们面临的问题并不是缺资源,而是找准资源并高效学习.其次,即便网络上的资源非常多,学习是需要成本的,而且越有深度的内容越难找到好的学 ...

  5. 关于NLP相关技术全部在这里:预训练模型、信息抽取、文本生成、知识图谱、对话系统...

    我们正处在信息爆炸的时代.面对每天铺天盖地的网络资源和论文.很多时候我们面临的问题并不是缺资源,而是找准资源并高效学习.其次,即便网络上的资源非常多,学习是需要成本的,而且越有深度的内容越难找到好的学 ...

  6. Diffusion-LM Improves Controllable Text Generation 扩散语言模型改善可控文本生成

    论文链接:https://arxiv.org/abs/2205.14217 代码链接:https://github.com/XiangLi1999/Diffusion-LM 一.简介 无需重训模型控制 ...

  7. 预训练生成模型:结合VAE与BERT/GPT-2提高文本生成效果

    论文标题: Optimus: Organizing Sentences via Pre-trained Modeling of a Latent Space 论文作者: Chunyuan Li, Xi ...

  8. PyTorch:Bi-LSTM的文本生成

    作者|Fernando López 编译|VK 来源|Towards Data Science "写作没有规定.有时它来得容易而且完美:有时就像在岩石上钻孔,然后用炸药把它炸开一样.&quo ...

  9. 文本生成图像简述4——扩散模型、自回归模型、生成对抗网络的对比调研

    基于近年来图像处理和语言理解方面的技术突破,融合图像和文本处理的多模态任务获得了广泛的关注并取得了显著成功. 文本生成图像(text-to-image)是图像和文本处理的多模态任务的一项子任务,其根据 ...

最新文章

  1. 2019年广西大学硕士研究生入学《数据结构与程序设计(817)》考试大纲
  2. oracle 不存在函数,Oracle – 此范围内不存在名称为X的函数
  3. AutoLISP 绘制表情图案
  4. Log4j快速使用精简版
  5. 前端学习(3051):vue+element今日头条管理-表格组件基本使用
  6. vm9.02的序列号
  7. 西安市行政区划矢量图_行政区划图片下载_行政区划图矢量图素材
  8. C++语言的表达式模板:表达式模板的入门性介绍
  9. 20145322何志威 《Java程序设计》第8周学习总结
  10. 稳定好用的短连接生成平台,支持API批量生成
  11. Pdf转Word用Python轻松完成
  12. 【历史上的今天】1 月 19 日:苹果推出 Lisa;RIM 发布第一款黑莓手机;计算机先驱诞生日
  13. 【尚医通】手机登录功能
  14. 雪城大学Syracuse University介绍
  15. elasticsearch 过期数据自动删除Java代码
  16. Python操作Excel(二)
  17. Lock wait timeout exceeded; try restarting transaction
  18. 牛客网--14609--Forever97与寄信
  19. linux下pfam使用方法,pfam数据库介绍及使用
  20. *p++与(*p)++与*(p++)

热门文章

  1. http请求过程_“HTTP请求的整个过程”与它引出了整个计算机网络知识图谱(一)...
  2. 全攻略:大病医疗专项附加扣除,一文集全了
  3. python制作图片墙_利用python生成照片墙的示例代码
  4. com 组件调用不起来_Spring Cloud Alibaba训练营 —— 分布式服务调用
  5. mapgis中6.7属性结构_不知道如何组织项目结构,这个项目也许可以给你启发
  6. python模块和类和方法_Python类、模块、包的区别
  7. wireshark找不到接口_下水管漏水,维修师傅看一眼就收了200,自己换其实不到10块...
  8. cad加载dll_你的CAD为什么安装不上?进来看看你就知道了
  9. W10系统matlab无法保存对该路径的更改 pathdef_MATLAB的运行与窗口介绍
  10. 2020运动相机推荐_2020年最好的全景运动相机推荐