河南梦之网网络科技有限公司
梦之网科技出品
扫描关注梦之网科技微信公众账号

扫小程序码联系客服

用自己的风格教AI说话,语言生成模型可以这样学-郑州小程序开发 梦之网科技20开心时时彩9-09-开心时时彩9文章动态

很多研究者和开发者都认为,初学神经网络时,最好的方法莫过于先自己动手训练一个模型。机器之心也曾推荐过很多不同开发者写的上手教程。本文同样是其中之一,数据科学家 Ma l Fabien 介绍了如何使用自己的博客文章训练一个和自己风格一样的简单语言生成模型。

在过去几个月的课程中,我在我的个人博客上写了 开心时时彩00 多篇文章。数量还是很可观的。然后我有了一个想法:

训练一个说话方式与我类似的语言生成模型。

更具体而言,是书写风格像我。这种方式能完美地阐释语言生成的主要概念、使用 Keras 的实现以及我的模型的局限性。

本文的完整代码见这个代码库:

https://github.com/maelfabien/Machine_Learning_Tutorials

在我们开始之前,我推荐一个我发现的很有用的 Kaggle Kernel 资源,可以帮助理解语言生成算法的结构:https://www.kaggle.com/shivamb/beginners-guide-to-text-generation-using-lstms

语言生成

自然语言生成(NLG)是一个以生成有意义的自然语言为目标的领域。

大多数情况下,内容是以单个词的序列的形式生成的。这是一个很宽泛的思想,大致工作方式如下:

训练一个模型来预测一个序列的下一个词

为训练好的模型提供一个输入

迭代 N 次,使其生成后面的 N 个词

用自己的风格教AI说话,语言生成模型可以这样学-郑州小程序开发

序列预测过程

开心时时彩.创建数据集

第一步是构建一个数据集,让我们之后可以基于其构建网络,因此这个数据集需要构建成可被该网络理解的形式。首先导入以下软件包:

a.载入数据

我写的每篇文章的文件头都使用了以下模板:

用自己的风格教AI说话,语言生成模型可以这样学-郑州小程序开发

这是我们通常不希望出现在我们的最终数据集中的内容。我们想要关注的是文本本身。

每一篇文章都是一个单独的 Markdown 文件。文件头基本上包含的是标题、标题图片等信息。

b. 句子 token 化

然后,打开每篇文章,将每篇文章的内容都附加到一个列表中。但是,因为我们的目标是生成句子,而非整篇文章,所以我们需要将每篇文章都分割成句子列表,并将每个句子附加到列表「all_sentences」。

总体而言,我们得到了略多于 6800 个训练句子。到目前为止的过程如下:

用自己的风格教AI说话,语言生成模型可以这样学-郑州小程序开发

句子分割

c. 创建 n-gram

然后,创建一起出现的词的 n-gram。为了实现这一目标,我们需要:

在语料库上使用一个 token 化程序,为每个 token 都关联一个索引

将语料库中的每个句子都分解为一个 token 序列

将一起出现的 token 序列保存起来

下图展示了这个过程:

用自己的风格教AI说话,语言生成模型可以这样学-郑州小程序开发

创建 N-gram

我们来实现它吧。我们首先需要使用 token 化程序:

变量 total_words 包含使用过的不同词的总数。这里是 8976。然后,对于每个句子,获取对应的 token 并生成 n-gram:

token_list 变量包含以 token 序列形式存在的句子:

然后,n_gram_sequences 创建 n-gram。它从前两个词开始,然后逐渐添加词:

d. 填充

现在我们面临着这样一个问题:并非所有序列都一样长!我们如何解决这个问题呢?

我们将使用填充(padding)。填充是在变量 input_sequences 的每一行之前添加 0 构成的序列,这样每一行的长度便与最长行一样了。

用自己的风格教AI说话,语言生成模型可以这样学-郑州小程序开发

填充的图示

为了将所有句子都填充到句子的最大长度,我们必须先找到最长的句子:

我的情况是最大序列长度为 792。好吧,对于单句话来说,这一句确实相当长!因为我的博客包含一些代码和教程,所以我估计这一句实际上是 Python 代码。我们绘制一个序列长度的直方图来看看:

用自己的风格教AI说话,语言生成模型可以这样学-郑州小程序开发

序列长度

确实仅有非常少的样本的单个序列超过 200 个词。那么将最大序列长度设置为 200 如何?

这会返回类似这样的结果:

e. 分割 X 和 y

现在我们有固定长度的数组了,其中大多数在实际的序列之前都填充了 0。那么,我们如何将其转换成一个训练集?我们需要分割 X 和 y!要记住,我们的目标是预测序列的下一个词。因此,我们必须将最新的 token 之外的所有 token 都视为 X,而将那个最新的 token 视为 y。

用自己的风格教AI说话,语言生成模型可以这样学-郑州小程序开发

分割 X 和 y

用 Python 执行这个操作非常简单:

文章关键词
Python
lstm
循环神经网络