Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

参与杜伟 王淑婷

OpenAI「假新闻」生成器GPT-2的最简Python实现

由 OpenAI 推出的文本生成模型 GPT-2 最近引发了人们的广泛关注,这种算法不仅在很多任务上超过了此前的最佳水平,还可以根据一小段话自动「脑补」出大段连贯的文本,并模拟不同的写作风格。它看起来可以用来自动生成「假新闻」。

然而这个 GPT-2 模型内含多达 15 亿个参数,过高的算力要求让大多数开发者望而却步。而且 OpenAI 还曾「出于对模型可能遭恶意应用的担忧,并不会立即发布所有预训练权重。」一时引发机器学习社区的吐槽。

近日,由 Buzzfeed 数据科学家 Max Woolf 开源的「GPT-2 精简版」出现在 GitHub 上。这是一个简单的 Python 软件包,它封装了 OpenAI GPT-2 文本生成模型(特别是它是具有 1.17 亿超参数的「较小」版本)的现有模型微调和生成脚本。此外,这个软件包让我们可以更容易地生成文本,生成一个文件以便于管理,从而允许前缀强制文本以给定的短语开头。

  • 项目链接:https://github.com/minimaxir/gpt-2-simple

文本生成示意

该 Python 包包含以下内容,并对其进行了最小程度的低级更改:

  • 来自 OpenAI 官方 GPT-2 库的模型管理(MIT 许可证)

  • 来自 GPT-2 中 Neil Shepperd fork 的模型微调(MIT 许可证)

  • 来自 textgenrnn 的文本生成输出管理(MIT 许可证)

为了微调,该项目强烈建议你使用 GPU,虽然你用 CPU 也可以生成(但速度会慢很多)。如果你在云端训练,强烈建议你使用 Colaboratory notebook 或带有 TensorFlow 深度学习图像的谷歌计算引擎 VM(因为 GPT-2 模型位于 GCP 上)。

你可以使用 gpt-2-simple 在这个 Colaboratory notebook 中免费用 GPU 来重新训练模型,该 notebook 还演示了这个软件包的其它功能。

Colaboratory notebook 地址:https://colab.research.google.com/drive/1VLG8e7YSEwypxU-noRNhsv5dW4NfTGce

安装

gpt-2-simple 可以通过 PyPI 来安装:

pip3 install gpt_2_simple

你还要为你的系统安装相应的 TensorFlow(如 tensorflow 或 tensorflow-gpu)

使用

将模型下载到本地系统的示例,在数据集上对它进行微调,然后生成一些文本。

警告:模型是预训练的,因此任何微调模型都是 500MB。

import gpt_2_simple as gpt2

gpt2.download_gpt2()   # model is saved into current directory under /models/117M/

sess = gpt2.start_tf_sess()
gpt2.finetune(sess, 'shakespeare.txt', steps=1000)   # steps is max number of training steps

gpt2.generate(sess)

生成模型的检查点默认在/checkpoint/run1 中。如果你想从该文件夹中加载模型并从中生成文本:

import gpt_2_simple as gpt2

sess = gpt2.start_tf_sess()
gpt2.load_gpt2(sess)

gpt2.generate(sess)

与 textgenrnn 一样,你可以用 return_as_list 参数生成并保存文本供以后使用(如 API 或机器人)。

single_text = gpt2.generate(sess, return_as_list=True)[0]
print(single_text)

如果你想在 checkpoint 文件夹中存储或加载多个模型,可以把 run_name 参数传递给 finetune 和 load_gpt2。

注意:如果你想在另一个数据集上进行微调或加载另一个模型,先重启 Python 会话。

gpt-2-simple 和其它文本生成程序的区别

GPT-2 用来生成文本的方法与 textgenrnn 等其它安装包(特别是纯粹使用 GPU 生成完整文本序列并随后对其进行解码的安装包)使用的方法略有不同,这些方法在没有破解底层模型代码的情况下无法轻易修复。

所以:

  • 一般来说,GPT-2 更擅长在整个生成长度上维护上下文,从而能够有效地生成对话文本。文本在语法上通常也是正确的,并且有适当的大写和较少的打印错误。

  • 原始 GPT-2 模型在大量来源的文本上进行训练,使该模型包含输入文本中看不到的趋势。

  • GPT-2 针对每个请求最多只能生成 1024 个 token(约是 3-4 段英语文本)。

  • GPT-2 在到达特定的结束 token 时无法提前停止。(暂时解决方法:将 truncate 参数传递给 generate 函数,以便只收集文本,直至到达特定的结束 token。你可能想适当地缩小 length。)

  • 较高温度(如 0.7-1.0)能够更好地生成更有趣的文本,而其它框架在温度 0.2-0.5 之间运转更好。

  • 当对 GPT-2 进行微调时,它并不清楚较大文本中文档的开头或结尾。你需要使用定制的字符序列来显示文档的开头或结尾。之后在文本生成中,你可以指定针对开始 token 序列的 prefix 和针对结束 token 序列的 truncate。

  • 通过设置一个可分成 nsamples 的 batch_size,你可以使用 GPT-2 生成并行文本,从而加快生成速度。GPT-2 与 GPU 配合得很好(可以在 Colaboratory K80 上将 batch_size 设置为 20)!

计划工作

注意:除非需求另有规定,否则本项目的范围非常小。

  • 允许用户生成超过 1024 个 token 的文本。

  • 允许用户使用 Colaboratory 的 TPU 进行微调。

  • 允许用户使用多个 GPU(如 Horovod)。

  • 对于 Colaboratory,允许模型在训练期间自动将检查点保存至 Google Drive,以防止超时。

使用 gpt-2-simple 的示例

ResetEra:生成视频游戏论坛讨论

地址:https://www.resetera.com/threads/i-trained-an-ai-on-thousands-of-resetera-thread-conversations-and-it-created-hot-gaming-shitposts.112167/

项目创建者:Max Woolf

基于 GPT-2 的「故事生成器」

GPT-2 强大的模型不仅吸引了众多机器学习从业者的关注,其「脑补」故事的能力也让人们不禁有了很多大胆的想法。为了让更多人能够接触最新技术,另一个开发者 eukaryote 最近还推出了一个新网站:This Story Does Not Exist

链接:https://www.thisstorydoesnotexist.com/

这是一个基于 GPT-2 的文本生成器。在这里,每个人都可以输入一段文字,看看人工智能会给你讲一段什么样的故事,比如:

改写冰与火之歌的结局,就靠你了!

工程OpenAI
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

提前停止技术

在机器学习中,提前停止是一种正则化形式,用于在用迭代方法(例如梯度下降)训练学习器时避免过度拟合。 这种方法更新了学习器,使其更好地适合每次迭代的训练数据。 这提高了学习器在训练集之外的数据上的表现。 但是,提高学习器对训练数据的适应性是以增加的泛化误差为代价的。 提前停止规则提供了在学习器开始过度训练之前可以运行多少次迭代的指导。提前停止规则已经在许多不同的机器学习方法中使用,理论基础不尽相同。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

OpenAI GPT技术

GPT 是“Generative Pre-Training”的简称,从名字看其含义是指的生成式的预训练。GPT 也采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过 Fine-tuning 的模式解决下游任务。它与ELMO 主要不同在于两点:特征抽取器不是用的 RNN,而是用的 Transformer;GPT 的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型。

GPT-2技术

GPT-2是OpenAI于2019年2月发布的基于 transformer 的大型语言模型,包含 15 亿参数、在一个 800 万网页数据集上训练而成。据介绍,该模型是对 GPT 模型的直接扩展,在超出 10 倍的数据量上进行训练,参数量也多出了 10 倍。在性能方面,该模型能够生产连贯的文本段落,在许多语言建模基准上取得了 SOTA 表现。而且该模型在没有任务特定训练的情况下,能够做到初步的阅读理解、机器翻译、问答和自动摘要。

推荐文章
暂无评论
暂无评论~