开源
Textgenrnn:使用预训练的基于字符的递归神经网络生成文本
来源:元经纪     阅读:1161
网站管理员
发布于 2023-01-29 06:24
查看主页

概述

Python 模块,可使用预训练的基于字符的递归神经网络轻松地生成文本。

使用几行代码在任何文本数据集上轻松训练您自己的任何大小和复杂性的文本生成神经网络,或者使用预训练模型快速训练文本。

textgenrnn 是一个基于 Keras / TensorFlow 的 Python 3 模块,用于创建char - rnn s,具有许多很酷的特性:

您可以在此Colaboratory Notebook中免费使用 textgenrnn 并使用 GPU 训练任何文本文件!阅读此博客文章观看此视频以了解更多信息!

例子

[hidecontent type="logged" desc="隐藏内容:登录后可查看"]

from textgenrnn import textgenrnn
textgen = textgenrnn()
textgen.generate()
[Spoiler] Anyone else find this post and their person that was a little more than I really like the Star Wars in the fire or health and posting a personal house of the 2016 Letter for the game in a report of my backyard.

包含的模型可以很容易地在新文本上进行训练,并且即使在输入数据单次通过后也可以生成适当的文本。

textgen.train_from_file('hacker_news_2000.txt', num_epochs=1)
textgen.generate()
Project State Project Firefox

模型权重相对较小(磁盘上 2 MB),它们可以轻松保存并加载到新的 textgenrnn 实例中。因此,您可以使用经过数百次数据传递训练的模型。(事实上​​,textgenrnn 学习得很好,你必须显着提高温度才能有创意的输出!)

textgen_2 = textgenrnn('/weights/hacker_news.hdf5')
textgen_2.generate(3, temperature=1.0)
Why we got money “regular alter”

Urburg to Firefox acquires Nelf Multi Shamn

Kubernetes by Google’s Bern

您还可以训练一个新模型,通过添加new_model=True到任何训练函数来支持词级嵌入和双向 RNN 层。

互动模式

也可以逐步参与输出的展开方式。交互模式将为您建议下一个字符/单词的前 N​​个选项,并允许您选择一个。

在终端中运行 textgenrnn 时,将interactive=True和传递top=Ngenerate. N 默认为 3。

from textgenrnn import textgenrnn

textgen = textgenrnn()
textgen.generate(interactive=True, top_n=5)

用法

可以通过以下方式从 pypi安装textgenrnn pip

pip3 install textgenrnn

对于最新的 textgenrnn,您的 TensorFlow 版本必须至少为 2.1.0

您可以在此 Jupyter Notebook中查看常见功能和模型配置选项的演示。

/datasets包含使用 Hacker News/Reddit 数据训练 textgenrnn 的示例数据集。

/weights包含在上述数据集上进一步预训练的模型,这些模型可以加载到 textgenrnn 中。

/outputs包含从上述预训练模型生成的文本示例。

神经网络架构与实现

textgenrnn 基于Andrej Karpathy的char-rnn项目,并进行了一些现代优化,例如处理非常小的文本序列的能力。

包含的预训练模型遵循受DeepMoji启发的神经网络架构。对于默认模型,textgenrnn 接受最多 40 个字符的输入,将每个字符转换为 100 维的字符嵌入向量,并将这些输入到 128 单元的长短期记忆 (LSTM) 循环层中。然后将这些输出送入另一个128 单元 LSTM。然后所有三层都被送入一个注意层,以对最重要的时间特征进行加权并将它们平均在一起(并且由于嵌入+第一个 LSTM 被跳过连接到注意层,模型更新可以更容易地反向传播到它们并防止消失梯度)。该输出映射到最多394 个不同字符的概率它们是序列中的下一个字符,包括大写字符、小写字符、标点符号和表情符号。(如果在新数据集上训练新模型,则可以配置上面的所有数字参数)

或者,如果每个文本文档都提供上下文标签,则可以在上下文模式下训练模型,其中模型在给定上下文的情况下学习文本,因此循环层学习去上下文化的语言。纯文本路径可以搭载脱离上下文的层;总而言之,与仅根据文本训练模型相比,这会带来更快的训练速度以及更好的定量和定性模型性能。

包中包含的模型权重是在来自 Reddit 提交(通过 BigQuery)的数十万个文本文档上进行训练的,这些文档来自各种各样的 subreddits。该网络还使用上述去上下文方法进行了训练,以提高训练性能并减轻作者偏见。

当使用 textgenrnn 在新的文本数据集上微调模型时,所有层都会重新训练。然而,由于原始的预训练网络最初具有更强大的“知识”,新的 textgenrnn 最终训练得更快、更准确,并且有可能学习原始数据集中不存在的新关系(例如,预训练的字符嵌入包括上下文用于所有可能类型的现代互联网语法的字符)。

此外,再训练是通过基于动量的优化器和线性衰减的学习率完成的,这两者都可以防止梯度爆炸,并使模型在长时间训练后发散的可能性大大降低。

注意

  • 即使使用训练有素的神经网络,您也不会在 100% 的时间内获得高质量的生成文本。这就是使用神经网络文本生成的病毒式博客帖子Twitter 推文通常会生成大量文本并随后策划/编辑最佳文本的主要原因。

  • 数据集之间的结果会有很大差异。由于预训练神经网络相对较小,因此它无法存储博客文章中通常标榜的 RNN 那样多的数据。为获得最佳结果,请使用至少包含 2,000-5,000 个文档的数据集。num_epochs如果数据集较小,则在调用训练方法和/或从头开始训练新模型时,您需要通过设置更高的值来训练它更长时间。即使那样,目前也没有好的启发式方法来确定“好”模型。

  • 重新训练 textgenrnn 不需要 GPU,但在 CPU 上训练需要更长的时间。如果您确实使用 GPU,我建议增加batch_size参数以获得更好的硬件利用率。

textgenrnn 的未来计划

  • 更正式的文档

  • 使用 tensorflow.js 的基于网络的实现(由于网络规模小,效果特别好)

  • 一种可视化注意力层输出以查看网络如何“学习”的方法。

  • 允许模型架构用于聊天机器人对话的模式(可能作为单独的项目发布)

  • 更深入的上下文(位置上下文+允许多个上下文标签)

  • 一个更大的预训练网络,可以容纳更长的字符序列和对语言更深入的理解,从而生成更好的句子。

  • 词级模型的分层 softmax 激活(一旦 Keras 对它有很好的支持)。

  • FP16 用于在 Volta/TPU 上进行超快训练(一旦 Keras 对其提供良好支持)。

[/hidecontent]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
每28秒就有一人因此离世!这种常见病是其最大诱因 很多人都忽视了
贾跃亭回忆5次陷入又走出绝境:乐视资金链断裂 从天堂到地狱
锁王争霸赛 智能锁消费市场竞争升温
感觉与时代脱节了 奥运会的“pin“到底是啥玩意儿?
三、ILAC-MRA

首页

分类

定制方案

消息

我的