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


在过去的几年中 , 自然语言处理(NLP)有了显著的增长 , 这要归功于深度学习算法的进步和足够的计算能力 。 但是 , 前馈神经网络不被认为是对语言或文本建模的最佳选择 。 这是因为前馈网络未考虑文本中的单词顺序 。
因此 , 为了捕获文本中存在的顺序信息 , 在NLP中使用了递归神经网络 。 在本文中 , 我们将了解如何使用PyTorch生成自然语言 , 使用递归神经网络(LSTM) 。
|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

自然语言生成的简要概述
自然语言生成(NLG)是自然语言处理(NLP)的子字段 , 它与计算机自动生成人类可读文本有关 。 NLG可用于各种NLP任务 , 例如机器翻译 , 语音转文本 , 聊天机器人 , 文本自动更正或文本自动完成 。
【|AI框架应用:用PyTorch构建自然语言生成(NLG)系统】我们可以借助语言建模为NLG建模 。 让我解释一下语言模型的概念–语言模型学会预测单词序列的概率 。 例如 , 考虑以下句子:
|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

我们可以看到 , 第一句话比第二句话更有可能 , 因为我们知道第二句话中的单词顺序是不正确的 。 这是语言建模背后的基本概念 。 语言模型应该能够区分较高可能性的单词(或标记)序列 。
语言模型的类型
以下是两种类型的语言模型:

  1. 统计语言模型: 这些模型使用传统的统计技术 , 例如N-gram , 隐马尔可夫模型(HMM)和某些语言规则来学习单词的概率分布 。
  2. 神经语言模型:这些模型的有效性已经超过统计语言模型 。 他们使用不同种类的神经网络对语言进行建模 。

使用统计语言模型生成文本
首先 , 让我们看看如何在统计模型(如N-Gram模型)的帮助下生成文本 。
假设我们必须为下面的句子生成下一个单词:
|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

假设我们的N-Gram模型考虑3个前一个词的上下文只是为了预测下一个词 。 因此 , 模型将尝试使概率P(w |“它建立了a”)最大化 , 其中“ w”代表文本数据集中的每个单词 。 将使该概率最大化的单词将作为句子“她在那里建…”的下一个单词生成 。
然而 , 使用这样的统计模型存在某些缺点 , 该统计模型使用直接的前一个单词作为上下文来预测下一个单词 。 让我给您一些额外的背景信息 。
|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

现在 , 我们获得了有关正在发生的事情的更多信息 。 “沙堡”一词很可能是下一个词 , 因为它对“海滩”一词有很强的依赖性 , 因为人们在大多数正确的海滩上建造沙堡 。 因此 , 重点是 , “沙堡”并不取决于当前环境(“她建造了”) , 而是取决于“海滩” 。
使用神经语言模型生成文本
为了捕获序列标记之间的这种无限制的依赖性 , 我们可以使用基于RNN / LSTM的语言模型 。 以下是我们将用于NLG的语言模型的简约表示:
|AI框架应用:用PyTorch构建自然语言生成(NLG)系统
本文插图

  • x1 , x2和x3分别是时间步1 , 时间步2和时间步3的输入单词嵌入
  • ?1 , ?2和?3是训练数据集中所有不同标记的概率分布
  • y1 , y2和y3是基本真值
  • U , V和W是权重矩阵
  • H0 , H1 , H2和H3是隐藏状态
了解神经语言模型的功能
我们将尝试从三个阶段来了解神经语言模型的功能: