定向写作模型CTRL,Conditional Transformer Language有条件的文本生成模型

news2024/12/28 6:08:43

定向写作模型CTRL

介绍

CTRL全称为Conditional Transformer Language有条件的文本生成模型,它始于Salesforce在2019年发布的论文《A Conditional Transformer Language Model for Controllable Generation》,该模型用于定向写作。论文地址如下:https://arxiv.org/pdf/1909.05858.pdf

这两年非常流行的BERT和GPT-2都基于Transformer模型,虽然代码量不大,逻辑也并不复杂,但是极大规模的数据量、训练强度和模型容量,以及利用无监督文本建模,使模型的能力空前强大,在一些领域已超过人类水平。

GPT-2使用各种类型的文章训练模型,包括散文、小说、新闻、科技文章,用它写作的文章也综合了各种风格。如果想生成“金庸风格”的小说,则需要用所有金庸先生的小说重新训练模型;或者从原模型中提取特征构造新模型;也可以在原有模型基础上fine-tuning。如需撰写新闻稿,则需要另行训练。

GPT-2模型根据文章开头的内容,继续向后联想,控制不了文章的具体内容,因此也有人把它称为“造谣神器”。除了瞎编,它的实际用途又在何处?如何更好的控制文章的内容,生成有价值的文本。

CTRL是继GPT-2后出现的写作模型,同样也基于Transformer。与之前模型不同的是:它无需进一步训练就可以解决特定领域的具体问题CTRL模型可以指定文章的领域、风格、主题、时间、实体,实体间的关系,以及任务相关的行为等等,因此可以将其看成命题作文。它使用140G数据训练,参数规模1.63 billion(16亿,比GPT-2更大)。模型维度1280维,48层EncoderLayer,16头Attention,也是一个体量巨大的模型。

CTRL模型的最大优势是在生成文本时可指定文章的类型,同一模型可以写作不同风格的文章。论文也举出了用同一开头续写不同类型文章的实例,比如高分评论和低分评论的差异;“刀”在购物评论和恐怖小说的场景中生成的不同文章;按时间、国家写出文章中涉及的不同总统等等。

不同的角度,有不同的答案。换言之,CTRL关注了语料在不同场景中的不同含义。模型更符合实际应用的场景:使用者在同一时间,只可能生成某一特定类型,同时又希望单个模型支持生成各种类型的文章,CTRL可视为多任务学习。

由人写一个故事梗概:时间、地点、人物、事件,用模型按照某种风格遣词造句填充内容。它与之前的问答系统、文章概要又有何区别呢?原来的模型先用无监督数据训练模型,然后用有标注的问与答,内容与概要代入模型调优。标注数据毕竟有限;CTRL则海量的无监督数据进行了分类,这类似于简单的自动标注,让数据从一开始就更有针对性。

具体实现

CTRL的核心思想是从无监督的海量数据集定位文章所在的领域。大多数训练数据都从网络上抓取,在抓取过程中通过网址标题等信息估计它所在领域,并作为特征,代入训练。从而让模型写出各种类型的文章,同理在问答等领域中运用此技术,也可以更有针对性地解决问题。

CTRL底层同样也基于Transformer,使用了其中Encoder部分,模型底层改动不大。之前的模型是根据词序列中的前n-1个词计算下一个词n是哪个词的可能性,如式一所示:

(式一)

CTRL又加入了条件c,即文章的控制信息如类型,在计算概率的同时考虑条件c。具体操作是在每一个序列的具体内容前加了入类型描述,使得在计算Attention过程中,类型与序列中的所有元素建立联系。如式二所示:

(式二)

代码中定义了一些常见,并且可以在抓取时识别的类型,如下图示:

除了类型,还支持将标题、下载的地址(有些下载地址中包含时间、实体等信息)……放在正文之前。除了上述改进,它还引入了新算法优化了后序词的筛选逻辑。

代码分析

CTRL官方代码可从以下网址下载: https://github.com/salesforce/ctrl

其中包括TensorFlow和Pytorch 两种实现方法,又细分为训练和应用两部分。以Pytorch为例,其核心代码主要在pytorch_transformer.py和pytorch_generation.py两个文件中。pytorch_transformer.py主要实现了Transformer模型,其内容是基础版Transformer模型的Encoder部分。pytorch_generation.py用于使用该模型撰写文章,其中包含解析数据和调用模型的方法。需要注意的是,使用该模型时,序列的第一位应为类型。模型训练部分在training_utils目录中用TensorFlow实现。

相对官方代码,更推荐Hugging Face团队发布的Transformer例程集,支持TensorFlow和Pytorch两种实现方式,其中也包含CTRL的实现,源码位置在:

https://github.com/huggingface/transformers/blob/master/src/transformers/

实现Pytorch版本CTRL的代码有:configuration_ctrl.py, modeling_ctrl.py, tokenization_ctrl.py,其中核心是modeling_ctrl.py,建议读者用debug工具跟踪调用模型的完整流程,查看每一步的输入及输出,便可完全理解该模型。调用方法如下:

01 import torch
02 from transformers import CTRLTokenizer, CTRLModel
03 tokenizer = CTRLTokenizer.from_pretrained('ctrl')
04 model = CTRLModel.from_pretrained('ctrl')、input_ids =
05 torch.tensor(tokenizer.encode("Links Hello, my dog is cute",
06 add_special_tokens=True)).unsqueeze(0) # Batch size 1
07 outputs = model(input_ids)

注意:运行时将下载6.5G的预训练模型,虽然模型很大,但在没有GPU且机器性能不高的情况下也能正常调用模型预测部分。

总结

CTRL不仅是一个自然语言处理问题的解决方案,同样也可应用到其它的序列处理问题之中。从NLP的演进可以看到,用无标注数据训练模型,生成一般性“常识”逐渐成为主流。人工不可能标注海量信息,目前,人们正试图使用更多知识和分析方法处理信息,并将知识融入模型结构,使人与工具更好地结合,并生成更加可控的模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/653858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双功能螯合剂:1777804-45-1,DOTA-(COOt-Bu)3-CH2-Ph-azide,的反应特点及其参数说明

​ 中文名称:1,1-二甲基乙基4-[(4-叠氮苯基)甲基] -7,10-双[2-(1,1-二甲基乙氧基) -2-氧乙基] -1,4,7,10-四氮杂环十二烷 -1-乙酸酯 英文名称:DOTA-(COOt-Bu)3-CH2-Ph-azide,DOTA-(COOt-Bu)3-CH2-Ph-N3 规格标准:1g、5g、10g CAS…

【电源设计】18650电池电源串并联设计——改变电压或容量

有时我们有需要改造电池电源的需要,比如增大容量,增大电压之类的,本文介绍18650锂电池,以及如何用18650锂电池串并联设计电源,达到增大容量或者增大电压的效果: 目录 一、18650锂电池基本知识&#xff1a…

腾讯的基础认证适合没经验、没专业知识的人吗?

IT行业可以说是现在最热门的行业之一了,很多人都会选择报考这个专业,同时还有很多没有基础的人,也会选择在毕业后继续教育,从而获得进入这一行的机会,可以说每个人都在内卷,技术和证书都需要拥有&#xff0…

这就是实力!京东资深架构师用实例详解Java虚拟机(源码剖析)

前言 Java是一门流行多年的高级编程语言,与其相关的就业岗位很多,但是最近几年却出现了用人单位招不到合适的人,而大量Java程序员找不到工作的尴尬局面。究其根本原因是岗位对Java开发技术的要求高,不但要会应用,而且…

祛除红眼算法python实现

最近研究了一下祛除红眼的算法,主要的思想都是将RGB通道里面的R通道给想法设法的降低,其他的通道稍微进行变换就行,这里使用python运行了一下例子看看, version2参考了代码:https://www.cnblogs.com/cpuimage/p/90002…

华为IP-san实验搭建

文章目录 RedHat or CentOS系统1、获得多路径软件2、配置主机iscsi名3、配置存储映射4、主机访问存储的LUN5、安装多路径解决重复磁盘问题6、使用多路径扫盘 windows系统1、为win虚拟机提供多路径包文件2、创建存储与主机的连接3、主机使用磁盘 RedHat or CentOS系统 1、获得多…

为什么 kubernetes 环境要求开启 bridge-nf-call-iptables ?

文章目录 背景基于网桥的容器网络Service 同节点通信问题开启 bridge-nf-call-iptables我的环境netshoot 工具 参考 背景 Kubernetes 环境中,很多时候都要求节点内核参数开启 bridge-nf-call-iptables: sysctl -w net.bridge.bridge-nf-call-iptables1 参考官方文…

SQL语句的一些高级用法1

这里写目录标题 SQL语句的一些高级用法11.修改表名和表结构1.修改表名 2.扩展表结构(增加字段)3.修改字段(列)名,添加唯一键4.删除字段 案例扩展数据表高级操作1.克隆表,将数据表的数…

【Spring Boot学习】Spring Boot的创建和使用

前言: 💞💞今天我们开始学习Spring Boot,这里我们会学习到怎么去创建和使用Spring Boot,在这里我们会了解到什么是最为核心的框架之一。 💞💞前路漫漫,希望大家坚持下去,…

大模型 Transformer介绍-Part1

众所周知,transformer 架构是自然语言处理 (NLP) 领域的一项突破。它克服了 seq-to-seq 模型(如 RNN 等)无法捕获文本中的长期依赖性的局限性。事实证明,transformer 架构是 BERT、GPT 和 T5 及其变体等革命性架构的基石。正如许多…

SpringBoot仿GPT数据流传输

目录 Java数据流传输响应前提Springboot文字流响应Web端接收流数据并显示 SpingBoot集成ChatGPT使用流响应结果 Java数据流传输响应 前提 在折腾ChatGpt集成在SpringBoot项目时,发现了ChatGpt api返回数据时有两种返回方式,一种是使用流传输&#xff0…

MyCat总结

目录 什么是mycat 核心概念 逻辑库 逻辑表 分片节点 数据库主机 用户 mycat原理 目录结构 配置文件 读写分离 搭建读写分离 搭建主从复制: 搭建读写分离: 分片技术 垂直拆分 实现分库: 水平拆分 实现分库: ER表 全局表 分…

简要介绍 | 基于深度学习的姿态估计技术

注1:本文系“简要介绍”系列之一,仅从概念上对基于深度学习的姿态估计技术进行非常简要的介绍,不适合用于深入和详细的了解。 注2:"简要介绍"系列的所有创作均使用了AIGC工具辅助 基于深度学习的姿态估计技术 背景介绍 …

【备战秋招】每日一题:2023.05-B卷-华为OD机试 - 告警抑制

2023大厂笔试模拟练习网站(含题解) www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200道互联网大厂模拟练习题&a…

基于Dlib的疲劳检测系统

需要源码的朋友可以私信我 基于Dlib的疲劳检测系统 1、设计背景及要求2、系统分析3、系统设计3.1功能结构图3.2基于EAR、MAR和HPE算法的疲劳检测3.2.1基于EAR算法的眨眼检测3.2.2基于MAR算法的哈欠检测3.3.3基于HPE算法的点头检测 4、系统实现与调试4.1初步实现4.2具体实现过程…

使用MATLAB画SCI论文图

从gcf和gca说起 不论是 Python 绘图还是Matlab绘图,想要获得更好看的图,都会用到这两个单词。 gcf:get current figure,是目标图像的图形句柄对象 gca:get current axes,是目标图像的坐标轴句柄对象 Mat…

pandas---数学函数、离散化处理、分组聚合

1. 数学函数 方差:当数据分布比较分散(即数据在平均数附近波动较大)时,各个数据与平均数的差的平方和 较大,方差就较大;当数据分布比较集中时,各个数据与平均数的差的平方和较小。因此方差越 …

【计算机网络】如何学好计网-第一章概论

相关术语 URI:Uniform Resource Identifier 统一资源标识符,指的是一个资源 URL:Uniform Resource Location 统一资源定位符,URI的子集,用地址定为的方式指定一个资源 URN:Uniform Resource Name 统一资…

北京论道|光环云李卓然:以“云”为帆 赋能文化出海行业创新增长

2023年6月15~16日,由流媒体网主办,北京新媒体(集团)有限公司、北京联通、北京电信、北京移动共同协办的「北京论道暨第25届中国智能视听与科技创新高峰论坛」在北京隆重举行。 本届论道以“电视的未来与未来的电视”为主题&#…

java语言中方法的重载

文章目录 前言一、重载是什么?二、使用步骤 1.实操展示2.注意事项总结 前言 小时候,我们学会了十以内的加法,却对十以外的加法感到害怕,但从现在来看,它们都属于加法,只是计算方法略有不同。方法的重载也一…