SongNet模型是腾讯AI Lab NLP中心自研的一套基于预训练语言模型的硬格式控制下的文本生成模型。它能接受任意指定的格式进行文本生成,例如生成歌词、唐诗宋词、莎士比亚十四行诗等。以下为论文的详细解读。

Rigid Formats Controlled Text Generation

1背景

歌词、诗词等是比较独特的文体形式,有严格的格式、韵律等要求。平时我们见到的文本生成任务如对话生成、故事生成、摘要生成等多以自由生成方式为主,给定固定模板严格限制格式进行填词的文本生成任务研究较少。SongNet模型旨在解决此类硬格式控制的文本生成问题。例如,给定一首歌的歌词,让模型能够将歌词全部改写,或者只改写部分歌词。在改写的同时保证文本的格式正确、韵律合理、句子完整等基本的质量需求。具体的,给定《十年》这首歌词的格式,我们可以通过SongNet重新进行配词,并保证格式不变,可以根据原来的曲谱进行演唱:

原歌词:十年之前/我不认识你/你不属于我/我们还是一样/陪在一个陌生人左右/走过渐渐熟悉的街头

新配词:夜深人静/思念你模样/多少次孤单/想伴在你身旁/是什么让我如此幻想/为何会对你那般痴狂

2方法

2.1问题定义

输入:一个模板

输出:将

替换成真实的文字,生成符合模板格式的完整句子。

2.2模型框架

图1模型框架

基于Transformer的自回归语言模型,我们提出了自己的框架。为了解决模板、韵律、句子完整性问题,我们定义了几种符号来对这些特殊的信息进行建模。

模板和韵律符号:

其中

代表普通文本符号,

代表该位置是韵脚,

代表标点符号。如此设计的目的是让模型在读模板的时候,碰到

的时候能推测出该处是结尾词、韵脚词,遇到

的时候能够知道该输出一个标点符号(也可以保留模板中的标点符号不做改写)。

内部位置符号:

模板中的每个句子都会有一个内部位置序列,特别强调的一点是,我们这里将符号倒序排列,旨在让模型能够学习到句子的一个渐进结束的过程,当遇到

的时候句子结束,那么当遇到

,

的时候模型能够意识到句子生成动态到了尾声。除此之外,句子内部位置信息还能捕捉诸如对联一类文本的前后句对仗位置特征。

句子符号:

对句子位置进行建模,每个符号代表句子在序列中的ID,旨在让模型推测出目前在生成的句子位置,捕捉学习到押韵的句对。例如莎士比亚的十四行诗押韵格式为“ABAB CDCD EFEF GG”,有了句子位置特征模型就会比较容易捕捉到1句和3句押韵,2和4押韵等。

训练的时候,所有的符号以及文本转化成向量后输入到基于Transformer的语言模型中:

为了让模型在auto-regressive的这个动态过程中能够看到模板的未来信息,我们还引入了另一个变量,只融合了之前定义的符号信息,没有输入的文本信息避免了右侧信息泄露:

然后通过两个Attention层对输入的信息进行建模,第一层是auto-regressive建模中的带masking的Attention建模机制:

第二层是能够看到模板全局信息的Attention层:

采用最大似然估计作为优化方法:

2.2训练中的masking策略

在生成任务中,会遇到给定部分文本,补充其他文本的局部补全需求。例如,在模板中,给定部分句子,补全其他句子;在句子中,知道了部分词,补充其他词。为了使得模型有解决该类需求的能力,我们在预训练阶段,设计了masking策略: 模板中保留部分词,模型来学习预测其他的词。

这样模型就可以根据两侧的context信息进行预测生成,近似的有了双向语言模型的能力。

3 Inference方法

我们采用了top-k sampling的解码方法来生成多样性好的结果,通过调节超参k可以平衡多样性和质量。

4试验

4.1数据集

中文我们以宋词生成作为预测目标;英文生成莎士比亚十四行诗(sonnet)。

模型分预训练和微调两个阶段。在预训练阶段,中文语料主要是新闻和维基百科,英文语料是维基百科和BooksCorpus。

4.2评测指标

除了常用的文本生成评测指标如ppl、distinct外,我们还专门设计了度量模板准确率(Format)、韵律准确率(Rhyme)和句子完整度(integrity)的指标。

4.3结果

表1:宋词生成效果评测

表2:莎士比亚十四行诗效果评测

表1和表2分别是在宋词和十四行诗上的格式生成评测结果,可以看出我们的模型SongNet在ppl、多样性、模板准确率、押韵准确率、句子完整性上都取得了不错的指标。相比宋词,十四行诗的效果差一些,主要原因是十四行诗的训练样本太少(只有100首)。

5例子

1、指定模板生成

例子中模型不仅可以根据已有的格式模板(例如鹧鸪天、卜算子)进行生成,还能根据我们自己定义的格式进行宋词生成,而且押韵效果也不错。

2、预先填入词的生成

得益于masking的训练策略,我们的模型可以进行生成结果的精修,例如生成了一些结果之后,我们可以删掉不满意的部分,让模型重新进行局部补全生成,上面的结果可以看出,效果还是比较令人满意的。

3、歌词生成

正文开始我们提到可以通过SongNet进行歌曲配词,我们也试验了将《桥边姑娘》这首歌进行重新配词,模型可以轻松的产生成千上万首新的歌词,选择部分结果如下:

夜风扬/残月如霜/又见她在梳妆/一缕柔情凝结成冰凉/谁在空中遥想/她的影子浮现眼眶/孤独飘忽迷茫/怎不愿把这份思量/悄悄藏在心房/天涯两殇/你可曾相望/花落情殇/难道是梦乡/爱过恨过之往/秋水悠长/我却为你痴狂/岁月已成沧桑/寂寞守望/繁华盛放/只有对酒品尝/伴着忧伤流淌/夜风扬/好凄凉/醉看霓虹绽放/谁能看透这几度惆怅/苦涩与绝唱/都变得愈演愈勉强/痛彻愁肠帐/让时光停止流浪/当作路程远航/江山未央/回忆旧模样/地老天荒/何处话凄凉/值得我去吟唱/日出朝阳/映照整个过往/陪看红尘万丈/无力遗忘/寂寞依墙/等到白发苍苍/唯剩满眼悲

php 输出七芒星,SongNet:硬格式控制下的文本生成相关推荐

  1. 由七芒星引出来的——关于142857

    世界上最神奇的数字: 142857 (142857=3^3×11×13×37) 看似平凡的数字,为什么说他最神奇呢? 我们把它从1乘到6看看 142857 × 1 = 142857 142857 × ...

  2. php 生成打印送货单,PHP输出PDF打印HTML5+CSS3打印格式控制

    ERP系统进入尾声,各种送货单.退货单.合同.对账单等等一系列的东东排着队调打印格式.HTML5+CSS3已经这样流行,然则眼下,基于CSS3的打印控制,居然还处于原始部落阶段,Chrome.Fire ...

  3. PHP输出PDF打印HTML5+CSS3打印格式控制

    ERP系统进入尾声,各种送货单.退货单.合同.对账单等等一系列的东东排着队调打印格式.HTML5+CSS3已经这样流行,然则眼下,基于CSS3的打印控制,居然还处于原始部落阶段,Chrome.Fire ...

  4. java文字转pdf格式_java根据富文本生成pdf文件

    public classPdfUtil {/** 生成pdf工具类 * wmy 12:40 2019/8/9 * @Param [guideBook, pdfPath] * @return java. ...

  5. 1小时学会:最简单的iOS直播推流(七)h264/aac 硬编码

    最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有,愿意懂直播技术的同学快来看!! 源 ...

  6. 【微信小程序控制硬件⑦ 进阶篇】巧借阿里云物联网平台的免费连接,从微信小程序颜色采集控制 esp8266 输出七彩灯效果,中秋节来个直播如何?!

    [微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...

  7. WPF画N角芒星,正N角星

    计算顶部三角形坐标方法: 1 /// <summary> 2 /// 获取顶三角形坐标 3 /// </summary> 4 /// <param name=" ...

  8. c语言如何输出无限小数,printf的格式控制(C语言)

    printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少. ②-:有-表示左对齐输出,如省略表示右对齐输出. ...

  9. 【matlab】将matlab中数据输出保存为txt或dat格式

    将matlab中数据输出保存为txt或dat格式 总结网上各大论坛,主要有三种方法. 第一种方法:save(最简单基本的) 具体的命令是:用save *.txt -ascii x x为变量 *.txt ...

  10. 将matlab中数据输出保存为txt或dat格式

    一.将matlab中数据输出保存为txt或dat格式的三种方法. 第一种方法:save(最简单基本的) 具体的命令是:用save *.txt -ascii x x为变量 *.txt为文件名,该文件存储 ...

最新文章

  1. android ViewPager 不带滑动效果切换item
  2. python如何读入dat数据_python二进制dat数据怎么转成txt文本
  3. SAP Business Application Studio和Authentication Trust Management
  4. 接口测试到底是什么?如何制造接口数据
  5. ROS launch文件
  6. php response响应,9. 响应 (Response)
  7. 现代起亚混合动力SUV全球销量突破50万辆
  8. java 远程监控文件系统_Java 文件系统监控(WatchService)
  9. hdu 1861 游船出租 tag:模拟
  10. tensorflow入门笔记(一)
  11. python调用matlab函数_python调用matlab的m自定义函数方法
  12. android 长时间 build,Gradle(Android Studio)构build时间非常长
  13. centos 6.2网卡配置
  14. windows安装MobaXterm
  15. 外网接口(浏览器接口)调取设备数据,放到数据库里
  16. 基于shotgun蛋白质组学的MaxQuant质谱计算平台
  17. c语言求解一元二次方程的复根,c语言 求一元二次方程的根(含复根)
  18. win10查询计算机显卡,windows10系统电脑查看显卡型号的两种方法
  19. IT互联网行业猎头的年终总结:结束后开始
  20. 4G+5G多卡聚合智能融合通信

热门文章

  1. 三天打鱼两天晒网问题
  2. 卷积神经网络结构相关
  3. countifs函数怎么用,excel函数的操作步骤
  4. 推荐3个干净、资源多的看剧网站给大家
  5. 基于韦东山视频 regulator 学习笔记
  6. 心动C++情牵汉洛塔
  7. 追问顶刊 | 独家专访《科学》最新研究:老年为何出现睡眠碎片化?
  8. Java知识结构图谱
  9. 华为数字化转型之道第四讲
  10. springboot项目运行错误‘com.wei.service.UserService‘ in your configuration