|AI框架应用:用PyTorch构建自然语言生成(NLG)系统( 三 )


|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图


该模型的最终输出将是“正在发生什么” 。 这就是我们将用于执行NLG的文本生成策略 。 接下来 , 我们将在电影情节摘要的数据集中训练自己的语言模型 。
使用PyTorch生成自然语言
现在我们知道了神经语言模型是如何工作的以及需要什么样的数据预处理 , 让我们训练一个LSTM语言模型以使用PyTorch执行自然语言生成 。
让我们快速导入必要的库 。

|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

1.加载数据集
我们将使用CMU电影摘要语料库的样本 。

|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

你可以使用下面的代码打印五份摘要 , 这些摘要是随机抽样的 。
#个样本随机摘要 random.sample(movie_plots , 5)2.数据准备
首先 , 我们将稍微清除文本 。 我们将仅保留字母和撇号标点符号 , 并从文本中删除其余的其他元素 。
#干净的文字 movie_plots = [re.sub(“ [^ az']” , “” , i)for movie_plots中的i]不必执行此步骤 。 只是我希望我的模型仅关注字母 , 而不必担心标点符号或数字或其他符号 。
接下来 , 我们将定义一个函数以从数据集中准备定长序列 。 我已指定序列的长度为五 。 它是一个超参数 , 您可以根据需要更改它 。

|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

因此 , 我们会将电影情节摘要传递给此函数 , 并且它将为每个输入返回固定长度序列的列表 。

|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

输出: 152644
一旦准备好相同长度的序列 , 就可以将它们进一步分为输入序列和目标序列 。

|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

现在我们必须将这些序列(x和y)转换为整数序列 , 但是在此之前 , 我们将必须将数据集中的每个不同的单词映射为一个整数值 。 因此 , 我们将为令牌字典创建一个令牌 , 并为令牌字典创建一个整数 。
|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

输出:(14271 , 'the')
#设置词汇量 vocab_size = len(int2token) vocab_size输出: 16592
词汇量为16,592 , 即我们的数据集中有超过16,000个不同的标记 。
一旦我们有了令牌到整数的映射 , 就可以将文本序列转换为整数序列 。
|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

3.模型制作
我们将批次的输入序列和目标序列传递给模型 , 因为最好是按批次进行训练 , 而不是一次将整个数据传递给模型 。 以下功能将从输入数据创建批次 。

|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

现在 , 我们将定义语言模型的体系结构 。

|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图


|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

输入序列将首先通过嵌入层 , 然后通过LSTM层 。 LSTM层将提供一组与序列长度相等的输出 , 并且这些输出中的每一个都将传递到线性(密集)层 , 在该层上将应用softmax 。


推荐阅读