首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >GPT-2生成《神奇宝贝》动漫台词

GPT-2生成《神奇宝贝》动漫台词

作者头像
代码医生工作室
发布于 2019-11-12 07:37:14
发布于 2019-11-12 07:37:14
86400
代码可运行
举报
文章被收录于专栏:相约机器人相约机器人
运行总次数:0
代码可运行

作者 | Thiago Lira

来源 | Medium

Ludicolo was a salsa master, he would teach Ash how to move like a god. He would make fun of Ash for being unable to move so quickly, and would even attack him for being weak.

OpenAI提出的GPT-2模型是AI生成文本中的改变者。今天将展示如何使用模型生成神奇宝贝台词。

最终结果:

http : //pokegen.thiagolira.com.br/

所有代码都可以在Github存储库中找到。

https://github.com/ThiagoLira/pkm-ep-generator

在本文中,将解释端到端机器学习项目的主要挑战。

数据

机器学习方法用于提取信息并从数据中推断出模式。虽然经典的统计方法将有许多参数和假设由统计学家在建模阶段选择,但机器学习方法却让数据说明了一切。这是可以解释的(经典)模型和准确的(机器学习)模型之间的折中方案。机器学习的预测能力基本上来自拥有大量数据和足够复杂的模型以从中捕获高度微妙的模式。有一个“平滑”的假设,即该模型是在足够大的现实样本上进行训练的,以推断它没有直接看到的内容,并假设该模型与某些实际已经被训练的示例接近。

最近的NLP(自然语言处理)模型没有什么不同,它们需要大量的文本和计算能力来进行训练。这些新模型从对语言的零知识开始,到最后,它们变得非常擅长于从单词序列中测量上下文信息。可以理解的是,相同的单词在句子的不同位置具有不同的含义,这是经典NLP模型无法很好实现的。

GPT-2模型已经在Wikipedia,Reddit和许多其他地方进行了预训练。根据互联网上一组更具体的文本对模型进行微调。这是Internet的子集,由Pokémon动漫剧集摘要组成。

编写的爬虫下载了社区编写的大约400集摘要。下边是一个情节的示例:

Ash declares to himself and the Pokémon of the world that he will become a Pokémon Master. His speech, however, is interrupted by his mom who tells him to get to bed as he has a big day tomorrow. Ash protests that he’s too excited to sleep, so his mom tells him that if he won’t sleep then to at least get ready for the next day as she switches on a program hosted by the town’s Pokémon expert, Professor Oak. Ash watches as Oak explains that new Trainers get to pick one of three Pokémon to start their journey; the Grass-type Bulbasaur, the Fire-type Charmander or the Water-type Squirtle.

爬虫位于crawler_bulbapedia.py文件上,运行时将创建一个名为data / pokeCorpusBulba的文件夹,它将每个情节存储在单独的文本文件中。

尚未准备好将数据提供给模型。另一个名为prepare_corpus.py的脚本将清除文本并将它们全部合并到一个名为train.txt的文件中,准备与GPT-2一起使用。

模型

GPT-2是基于Transformer的模型,它使用一种称为自我注意的技术,以惊人的自然方式学习单词如何完成或继续句子。可以从纯粹的编程角度提供一些见解,以了解如何使用经过预训练的模型,就像它是文本生成API一样。为此找到了一个出色的资源gpt-2-simple python库,该库使所有Tensorflow复杂性基本不可见,并提供了一些非常简单的功能来从GPT-2模型下载,微调和采样。

基本上,语言模型会尝试从句子中预测下一个单词,可以继续从模型中获取预测以生成新文本,将最后的预测作为新输入来获取越来越多的单词。因此,作为示例,可以为模型提供前缀输入“Ash and Pikachu were”:

GPT-2使用注意力机制的作用是动态地评估最后一个单词对预测下一个单词的重要性。模型内部有一个称为“transformer cell”的东西,用于计算输入序列上每个单词相对于每个其他单词的关注值。所有这些都传递来生成输出,即预测句子中的下一个单词。

作为一个稍微简化的示例,通过注意力值的强度(越是紫色,注意力越强),可以清楚地看到“ Ash”和“ Pikachu”与确定“是”之后的内容有关。对于这种模型,Naive-Bayes之类的经典“计数单词”方法无法做到的。

训练是通过将语料库中的句子中的单词删掉并微调模型以正确预测它们来进行的。 最后,有一个checkpoint文件夹,这是需要从该模型生成文本的唯一内容。由tensorflow创建的此文件夹包含与Pokémon语料库进行微调后的整个模型状态,并且gpt-2-simple库将在生成新文本时查找它。

服务器

这是FAR最具挑战性的部分。在Internet上为该模型提供推论并不是一件容易的事,因为文本生成非常占用内存。

基本上,服务器结构会回答指向端口5000的GET请求。它具有一个函数来回答此请求,以获取参数(用户输入),初始化模型,生成一定数量的文本并返回JSON中的所有内容。困难的部分是该模型占用高达1GB的内存来进行推断。因此,在一切之前,必须拥有一台具有相当数量的RAM的服务器。因此,最终选择了AWS上的EC2 t2-medium实例,并进行了设置。

Gabriela从文章中彻底复制了以下EC2实例中的Web服务器结构。

选择在此EC2实例上运行的Web服务器是nginx,它侦听请求,然后将其转发到通过WSGI协议与Flask应用通信的uWSGI Web服务器。基本上具有以下结构:

Gabriela Melo的图表

WSGI协议的目的是为使用Python编写的Web应用程序创建通用接口。因此可以更改应用程序框架(从Flask到Django)或应用程序服务器(从uWSGI到Unicorn),而这在其他部分基本上是不可见的。

为什么不只是将uWSGI服务器提供给网络?为什么要使用另一层,即nginx?好吧,简单的答案是nginx提取了服务器负载可能带来的一些问题,而uWSGI本身不适合处理。

必须将所有这些软件打包在一个Docker容器中。

Flask App

Flask App(在服务器上运行模型的地方)具有单个请求入口,即generate函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@app.route('/',methods=['GET'])
def generate():
 # Since Flask forks the python process to answer for requests
 # we need to do this to avoid errors with tensorflow
 tf.reset_default_graph()


 # Start tf session and load model into memory
 sess = gpt2.start_tf_sess(threads=1)
 gpt2.load_gpt2(sess)

 # Get our params from the GET request
 callback = request.args.get('callback')
 sample = request.args.get('sample')

 # If the user was too lazy to input something we just feed the model with a default
 if (not sample):
     sample = "Ash and Pikachu were"

 samples = gpt2.generate(sess,prefix =sample,return_as_list=True,length=256)


 # The model will generated a fixed amount of words
 # Let's just throw away everything that is not a complete sentence
 lst = re.split('\\\\.',samples[0])
 # Remove last incomplete sentence (denoted by a period)
 generated_text = '.'.join(lst[:-1]) + "."

 # Our return data
 data = {
     'sample_text' : generated_text
 }


 # Garbage collect since memory doesn't grow on trees
 gc.collect()


 return '{0}({1})'.format(callback,data)

从中学到

  • 如果想使用机器学习做出新的事情,数据非常重要。
  • GPT-2模型用作按需文本生成工具是不切实际的,它需要太多的内存和CPU能力才能运行。具有需要1GB RAM的服务来满足每个请求的服务非常昂贵。
  • docker system prune是友好的。
  • Web服务器的Python生态系统并不难使用,并且有许多示例。

一些输出示例

模型的输入提要以粗体显示。当然涉及到一些挑选,但这就是生成模型的方式。

Ash and Misty were dating when they fell in love. As they both recall their respective first experiences, ash’s first brush with pokémon is all he ever remembers, as he was just a child. later, after ash had made his first poké ball, he skipped lunch and pursued a friend and switched trainers. This ended in them both falling in love, leaving dawn and brock in tears. When they were out searching for ash’s bulbasaur, a wild gyarados swatted them off. (…)

Pikachu was tired of all this sh*t. He runs in fear of the grass, and runs in fear of the trainers, too. Jessie and james run outside and run outside. (…)

Ash wanted to be the very best and trained all of his pokémon to get there. He told his trainer the whole story and promised to be a great trainer. He told his parents and his friends that he would train them as best he could. They were surprised and were ready to give up on him, when his parents started crying. His mother told him to come back home and find his friends. They had no choice but to go with him.

Pikachu was being arrested for tax evasion. Once the trio get out of the olivine city pokémon center, they are immediately attacked by a former police officer, a police detective, a nurse joy, and a nurse joy’s glameow.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何微调GPT-2生成高质量的歌词
生成预训Transformer2 (GPT-2),顾名思义,是基于Transformer 的。它使用注意力机制,这意味着它学会关注与上下文最相关的前一个单词,以便预测下一个单词。
deephub
2021/05/18
1.2K0
OpenAI的GPT-2:用Python构建世界上最先进的文本生成器的简单指南
来源 | Analytics Vidhya 【磐创AI导读】:继之前介绍使用GPT-2生成类披头士歌词(有兴趣的可以查看往期文章),现在让我们再来看看这个强大的GPT-2。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。
磐创AI
2019/08/09
2.7K0
OpenAI的GPT-2:用Python构建世界上最先进的文本生成器的简单指南
AI界最危险武器GPT-2使用指南:从Finetune到部署
今早一起床就看到François Chollet大神(Keras作者)发推,根据 GPT-2中量模型的超长距离记忆想到了一种简单的不基于机器学习的文本生成方式,居然神奇地复现了GPT-2的结果,方法很简单(只用了20分钟写代码),每次用要基于文本中的关键词,还有句末几个词,在谷歌直接搜索,然后将获取检索片段基于最后几个词连接起来,只要这样不停做甚至能生成GPT-2论文中那个发现神奇独角兽的例子。
大数据文摘
2019/05/21
3.3K0
AI界最危险武器GPT-2使用指南:从Finetune到部署
GPT、BERT、XLM、GPT-2、BART…你都掌握了吗?一文总结文本生成必备经典模型(二)
 机器之心专栏 本专栏由机器之心SOTA!模型资源站出品,每周日于机器之心公众号持续更新。 本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。 本文将分 2 期进行连载,共介绍 10 个在文本生成任务上曾取得 SOTA 的经典模型。 第 1 期:Seq2Seq(RNN)、Seq2Seq(LSTM)、Seq2Seq+
机器之心
2023/03/29
1.2K0
GPT、BERT、XLM、GPT-2、BART…你都掌握了吗?一文总结文本生成必备经典模型(二)
GPT/GPT2/DialoGPT 详解对比与应用-文本生成与对话
GPT 的全名:Generative Pre-Training,其论文标题是 Improving Language Understanding by Generative Pre-Training。
大鹅
2021/09/15
9.2K0
图解GPT-2(完整版)!
这篇文章翻译自http://jalammar.github.io/illustrated-gpt2/。多图详细解释当今最为强大的人工智能 GPT-2(截至 2019 年 8 月 12 日)。
Datawhale
2020/11/16
4K0
图解GPT-2(完整版)!
NLP实战:对GPT-2进行微调以生成创意的域名
我的目标是创建一个对人有帮助并且超级简单的AI服务。做好GPT-2之后,我意识到它具有巨大的创作潜力,并且可以证明它在创作文字方面很有用。
deephub
2020/05/09
2.4K0
NLP实战:对GPT-2进行微调以生成创意的域名
使用VQGAN+CLIP从图鉴文本描述中生成神奇宝贝
还记得我们一年前发布的使用GAN生成神奇宝贝的文章吗,今天他的改进版本来了,这次我们根据文字描述来生成神奇宝贝。
deephub
2021/11/23
1.1K0
GPT-2的探究:对虚假新闻生成的恐惧,源于技术还是人?
今年年初,OpenAI发布了一个非常强大的语言模型,可以模拟生成类似人类创作出的文本。通常在公告发布之后就会面向公众发布模型,但这这次的公告不同以往,它表示这样一个强大的工具可能会构成危险,因此只发布了一个较小、功能较单一的模型。
AI科技评论
2019/09/10
7110
GPT-2的探究:对虚假新闻生成的恐惧,源于技术还是人?
Transformer结构及其应用详解——GPT、BERT、MT-DNN、GPT-2
为了缓解传递间的梯度和遗忘问题,设计了各种各样的RNN cell,最著名的两个就是LSTM和GRU了
新智元
2023/08/05
7930
Transformer结构及其应用详解——GPT、BERT、MT-DNN、GPT-2
Pokémon AI,使用DALL-E生成神奇宝贝图鉴
还记得我们上次分享的使用DALL-E生成神奇宝贝的文章吗,这次Reddit的网友又给出了效果更好的版本。
deephub
2022/01/21
6710
Pokémon AI,使用DALL-E生成神奇宝贝图鉴
LAMBADA——用GPT-2来做文本数据增强
本文提出的方法称为language-model-based data augmentation(LAMBADA)。
beyondGuo
2022/04/19
1.1K0
LAMBADA——用GPT-2来做文本数据增强
OpenAI「假新闻」生成器GPT-2的最简Python实现
然而这个 GPT-2 模型内含多达 15 亿个参数,过高的算力要求让大多数开发者望而却步。而且 OpenAI 还曾「出于对模型可能遭恶意应用的担忧,并不会立即发布所有预训练权重。」一时引发机器学习社区的吐槽。
机器之心
2019/05/07
2.2K0
OpenAI「假新闻」生成器GPT-2的最简Python实现
大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解
在自然语言处理问题中,可从互联网上下载大量无标注数据,而针对具体问题的有标注数据却非常少,GPT 是一种半监督学习方法,它致力于用大量无标注数据让模型学习 “常识”,以缓解标注信息不足的问题。其具体方法是在针对有标签数据训练 Fine-tune 之前,用无标签数据预训练模型 Pretrain,并保证两种训练具有同样的网络结构。 GPT 底层也基于 Transformer 模型,与针对翻译任务的 Transformer 模型不同的是:它只使用了多个 Deocder 层。
汀丶人工智能
2023/07/18
3.9K0
大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解
47分钟,BERT训练又破全新纪录!英伟达512个GPU训练83亿参数GPT-2 8B
NVIDIA DGX SuperPOD在短短47分钟内训练BERT-Large,并训练GPT-2 8B,这是有史以来最大的具有8.3Bn参数的Transformer网络。
新智元
2020/02/20
1.1K0
47分钟,BERT训练又破全新纪录!英伟达512个GPU训练83亿参数GPT-2 8B
GPT-2没什么神奇的,PyTorch 就可以复现代码
我读过的最精彩、解释最清楚的文章之一是「The Annotated Transformer」https://nlp.seas.harvard.edu/2018/04/03/attention.html 。它引起了前所未有的关注,一个简单的想法就是用一个文件注释你所需要的代码。
AI研习社
2020/02/27
3.4K0
GPT-2没什么神奇的,PyTorch 就可以复现代码
详解Generative Pre-trained Transformer(简称GPT)
Generative Pre-trained Transformer(简称GPT)是一种基于人工智能技术的自然语言处理模型,它通过大规模语料库的预训练,学习语言的统计规律,并能够生成连贯、自然的文本。以下是对GPT的详细解析:
jack.yang
2025/04/05
5750
AI: GPT与BERT两大自然语言处理模型的比较
近年来,人工智能领域的两大重要模型——GPT(Generative Pre-trained Transformer)和BERT(Bidirectional Encoder Representations from Transformers)引起了广泛的关注。这两个模型在自然语言处理(NLP)领域表现出色,但它们在架构、训练方法和应用场景上有显著的差异。本文将深入探讨GPT和BERT的核心特点、技术原理以及各自的优缺点。
运维开发王义杰
2024/07/10
3.2K0
AI: GPT与BERT两大自然语言处理模型的比较
用机器学习生成披头士的歌词 | 项目实战
披头士乐队是一个巨大的文化现象。他们永恒的音乐直到今天仍然与人们产生共鸣,无论老少。在我看来,他们是有史以来最伟大的乐队¹。他们的歌曲充满了有趣的歌词和深刻的思想。比如说下面的歌词:
磐创AI
2019/07/10
6600
用机器学习生成披头士的歌词 | 项目实战
自动生成马斯克的推特几乎无破绽!MIT用GPT-2模型做了个名人发言模仿器
DeepTweets,能通过一个人以往的推特内容进行内容模仿,自动生成新的伪推特。
代码医生工作室
2019/07/05
1.1K0
自动生成马斯克的推特几乎无破绽!MIT用GPT-2模型做了个名人发言模仿器
推荐阅读
相关推荐
如何微调GPT-2生成高质量的歌词
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验