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

这篇具有很好参考价值的文章主要介绍了定向写作模型CTRL,Conditional Transformer Language有条件的文本生成模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定向写作模型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,Conditional Transformer Language有条件的文本生成模型

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

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

具体实现

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

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

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

(式一)

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

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

(式二)

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

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

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

代码分析

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的演进可以看到,用无标注数据训练模型,生成一般性“常识”逐渐成为主流。人工不可能标注海量信息,目前,人们正试图使用更多知识和分析方法处理信息,并将知识融入模型结构,使人与工具更好地结合,并生成更加可控的模型。文章来源地址https://www.toymoban.com/news/detail-491005.html

到了这里,关于定向写作模型CTRL,Conditional Transformer Language有条件的文本生成模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AIGC实战——条件生成对抗网络(Conditional Generative Adversarial Net, CGAN)

    我们已经学习了如何构建生成对抗网络 (Generative Adversarial Net, GAN) 以从给定的训练集中生成逼真图像。但是,我们无法控制想要生成的图像类型,例如控制模型生成男性或女性的面部图像;我们可以从潜空间中随机采样一个点,但是不能预知给定潜变量能够生成什么样的图像

    2024年02月04日
    浏览(33)
  • Transformer and Pretrain Language Models3-4

    首先回顾一下之前的RNN的一个端到端的模型,以下是一个典型的两层的LSTM模型,我们可以发现,这样一个RNN模型,一个非常重要的一个缺点就在于,它必须顺序地执行,对于文本这样一个序列,它必须先计算得到第一个位置的一个表示,然后才可以往后计算文本第二个的一个

    2024年01月24日
    浏览(37)
  • Transformer and Pretrain Language Models3-2

    第二种变体: 如果两个向量的维度不一样,我们就需要在中间加上一个权重矩阵,来实现他们之间的相乘,然后最后得到一个标量 第三种变体: additive attention 它和前面的有一个比较大的不同,它使用了一层的前馈神经网络,来将两个向量变成一个标量,来得到注意力分数

    2024年01月22日
    浏览(34)
  • Jamba: A Hybrid Transformer-Mamba Language Model

    相关链接:arXiv : hybrid architecture 、 Transformer 、 Mamba 、 mixture-of-experts (MoE) 、 language model 我们介绍了Jamba,一种新的基于新颖混合Transformer-Mamba混合专家(MoE)架构的基础大型语言模型。具体来说,Jamba交错了Transformer和Mamba层的块,享受两个模型家族的好处。在这些层

    2024年04月09日
    浏览(59)
  • gradio使用transformer模块demo介绍1:Text & Natural Language Processing

    文本生成 Text Generation

    2024年02月10日
    浏览(45)
  • VLT:Vision-Language Transformer用于引用的视觉语言转换和查询生成分割

    在这项工作中,我们解决了引用分割的挑战性任务。引用分割中的查询表达式通常通过描述目标对象与其他对象的关系来表示目标对象。因此,为了在图像中的所有实例中找到目标实例,模型必须对整个图像有一个整体的理解。为了实现这一点,我们 将引用分割重新定义为直

    2024年02月14日
    浏览(33)
  • PyTorch翻译官网教程-LANGUAGE MODELING WITH NN.TRANSFORMER AND TORCHTEXT

    Language Modeling with nn.Transformer and torchtext — PyTorch Tutorials 2.0.1+cu117 documentation 这是一个关于训练模型使用nn.Transformer来预测序列中的下一个单词的教程。 PyTorch 1.2版本包含了一个基于论文Attention is All You Need的标准 transformer 模块。与循环神经网络( RNNs )相比, transformer 模型已被

    2024年02月13日
    浏览(30)
  • 论文笔记--Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

    标题:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context 作者:Zihang Dai, Zhilin Yang, Yiming Yang, Jaime Carbonell, Quoc V. Le, Ruslan Salakhutdinov 日期:2019 期刊:arxiv preprint   传统的RNN常常面临梯度消失或爆炸的问题,LSTM的提出在一定程度上有所缓解,但实验表明LSTM只能有效利用

    2024年02月07日
    浏览(34)
  • A Framework for Accelerating Transformer-Based Language Model on ReRAM-Based Architecture(论文笔记)

    (发现问题): 在基于RRAM的加速器中,自注意力层在收集输入序列信息的过程中,需要所有输入序列词的前一层结果,由于输入实例在不同的时间步上被串行处理。 因此,自注意层一直保持停滞,直到上一层计算的结束。这就是数据危险,增加了在基于RRAM加速器上处理基于

    2024年03月25日
    浏览(45)
  • 语言模型(language model)

    语言模型是一种用于预测文本序列中下一个词或字符的概率分布的模型。它可以捕获语言结构的某些方面,如语法、句式和上下文信息。传统的语言模型通常使用N-gram方法或隐藏马尔可夫模型,但这些模型往往不能捕捉到长距离依赖和复杂的语义信息。 通俗来讲 语言模型评

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包