自然语言生成的演变

panrenlong 2019-03-17

自然语言生成的演变

在过去几年中,机器学习和自然语言理解领域已经取得了重大进展。个人助理(Siri/Alexa)、聊天机器人和问答机器人等应用程序正在彻底改变我们与机器的交互方式和日常生活。

自然语言理解(NLU)和自然语言生成(NLG)是人工智能发展最快的应用之一,人们越来越需要从语言中理解和获取意义,而语言又有很多歧义和不同结构。在这篇文章中,我们将讨论NLG自成立以来的简史,以及未来几年的发展方向。

什么是自然语言生成?

语言生成的目的是通过预测句子中的下一个单词来传达信息。使用语言模型可以解决(在数百万种可能性中)预测哪个单词的可能性的问题,该模型是单词序列上的概率分布。语言模型可以在字符级、n-gram级、句子级甚至段落级构建。例如,为了预测“I need to learn how to ___”之后的下一个单词,该模型为下一组可能的单词分配了一个概率,这些单词可以是“write”、“drive”等。最近神经网络(如RNNs和LSTMs)的发展使得长句的处理成为可能,大大提高了语言模型的准确性。

马可夫链

马尔可夫链是最早用于语言生成的算法之一。他们通过使用当前单词来预测句子中的下一个单词。例如,如果模型仅使用以下句子进行训练:“ I drink coffee in the morning”和“ I eat sandwiches with tea”。它预测”drink“后一单词是”coffee“ 的概率是100%,而“I”后面有50%的概率是“drink”,50%的概率是“eat”。马尔可夫链考虑每个唯一单词之间的关系来计算下一个单词的概率。在早期的智能手机键盘版本中,它们被用来为句子中的下一个单词生成建议。

自然语言生成的演变

Markov模型的一个例句

然而,通过仅关注当前的单词,马尔可夫模型失去了句子中前面单词的所有上下文和结构,这可能导致不正确的预测,从而限制了它们在许多生成场景中的适用性。

循环神经网络(RNN)

神经网络是受人脑工作原理启发而建立的模型,它通过对输入和输出之间的非线性关系建模,为计算提供了另一种方法-它们在语言建模中的应用被称为神经语言建模。

RNN是一种利用输入序列特性的神经网络。它通过一个前馈网络传递序列的每一项,并将模型的输出作为序列中下一项的输入,从而允许存储来自前面步骤的信息。RNN所拥有的“记忆”使其非常适合语言生成,因为随着时间的推移,他们能够记住对话的上下文。RNN与马尔可夫链的不同之处在于,它们也会观察之前看到的单词(不像马尔可夫链,它只观察前一个单词)来进行预测。

自然语言生成的演变

RNN的展开架构

用于语言生成的RNN

在RNN的每次迭代中,模型都会将之前遇到的单词存储在内存中,并计算下一个单词的概率。例如,如果模型生成了文本“We need to rent a”,那么它现在必须找出句子中的下一个单词。对于字典中的每个单词,该模型根据它之前看到的单词分布概率。在我们的例子中,单词“house”或“car”比单词“river”或“dinner”有更高的概率。选择概率最高的单词并将其存储在内存中,然后模型继续下一个迭代。

自然语言生成的演变

使用RNN生成句子

RNN受到一个主要限制 - 梯度消失问题。随着序列长度的增加,RNN不能存储在句中很久以前遇到的单词,只能根据最近的单词进行预测。这限制了RNNs在生成连贯的长句方面的应用。

长短期记忆(LSTM)

自然语言生成的演变

LSTM的体系结构

基于LSTM的神经网络是RNN的一种变体,它比普通的RNN更精确地处理输入序列中的长期依赖关系。它们被用于各种各样的问题。LSTM具有类似于RNN的链状结构;然而,它们由一个四层的神经网络组成,而不是一个单层的神经网络。LSTM由cellinput gateoutput gateforget gate四部分组成。这使得RNN可以通过调节cell内外的信息流,在任意的时间间隔内记住或忘记单词。

用于语言生成的LSTM

自然语言生成的演变

使用LSTM生成句子

把下面这句话作为模型的输入:“I am from Spain. I am fluent in ____.”,为了准确预测下一个单词是“Spanish”,该模型将重点放在前面句子中的“Spain”上,并利用cell的记忆“记住”它。该信息在处理序列时由cell存储,然后用于预测下一个单词。当遇到句号时,forget gate会意识到句子上下文中可能发生了更改,可以忽略当前的cell状态信息。这使得网络可以选择性地只跟踪相关的信息,同时最小化梯度消失问题,这使得模型可以在更长的时间内记住信息。

然而,由于仍存在从先前cell到当前cell的复杂顺序路径,因此可以保存多少信息是有限制的。这将LSTM能够记住的序列长度限制为几百个单词。另一个缺陷是LSTM由于高计算要求而非常难以训练。由于它们的顺序性,它们很难并行化,限制了它们利用gpu和TPU等现代计算设备的能力。

Transformer

Transformer在2017年谷歌的论文《Attention Is All You Need》中首次提出,提出了一种名为“self-attention mechanism”的新方法。Transformers 目前被广泛应用于各种NLP任务,如语言建模、机器翻译和文本生成。transformer 由一组编码器和另一组解码器组成,前者处理任意长度的输入,后者输出生成的句子。

自然语言生成的演变

显示使用transformer 进行机器翻译的动画

在上面的例子中,编码器处理输入句子并为其生成表示。解码器使用该表示逐字创建输出句子。每个单词的初始表示/嵌入由未填充的圆圈表示。然后,型使用“self-attention”将所有其他单词的信息聚合起来,生成每个单词的新表示,由填满的球表示,由整个上下文通知。然后对所有单词并行地重复该步骤多次,连续地生成新的表示。类似地,解码器从左到右一次生成一个单词。它不仅关注以前创建的其他单词,还关注由编码器开发的最终表示形式。

与LSTM相比,transformer 仅执行小的,恒定数量的步骤,同时应用self-attention mechanism,该机制直接模拟句子中所有单词之间的关系,而不管它们各自的位置如何。当模型处理输入序列中的每个单词时,self-attention允许模型查看输入序列的其他相关部分以更好地编码单词。它使用multiple attention heads,扩展了模型聚焦在不同位置的能力(无论它们在序列中的距离如何)。

最近,对vanilla transformer架构进行了一些改进,显着提高了它们的速度和精度。在2018年,谷歌发布了一篇关于Transformers双向编码器表示的论文(BERT),该论文为各种NLP任务提供了最先进的结果。同样,在2019年,OpenAI发布了一个基于transformer的语言模型,其中包含大约15亿个参数,只需几行输入文本即可生成长篇连贯的文章。

自然语言生成的演变

使用OpenAI的GPT-2模型生成语言

用于语言生成的Transformers

最近,Transformers 也被用于语言生成。在用于语言生成的Transformers 中,最著名的例子是OpenAI的GPT-2语言模型。该模型通过将注意力集中在与预测下一个单词相关的单词上,来学习预测句子中的下一个单词。

自然语言生成的演变

由transformers 中的self-attention mechanism决定的关系

使用Transformers生成文本的基础与机器翻译所遵循的结构类似。如果我们采用一个例句“ Her gown with the dots that are pink, white and ___.“,该模型会预测蓝色,通过self-attention分析列表中之前的单词为颜色(白色和粉色),并理解预期的单词也需要是一种颜色。self-attention允许模型选择性地关注每个单词的句子的不同部分,而不是仅仅记住循环块(RNN和LSTM中)的一些特征,这些特征通常不会用于几个块。这有助于模型回忆起前一句的更多特征,并导致更准确和连贯的预测。与以前的模型不同,Transformers可以在上下文中使用所有单词的表示,而无需将所有信息压缩为单个固定长度表示。这种架构允许Transformers在更长的句子中保留信息,而不会显著增加计算要求。它们在领域的性能也优于以前的模型,无需特定领域的修改。

语言生成的未来

在这篇博客中,我们看到了语言生成的演变,从使用简单的马尔可夫链生成句子到使用self-attention模型生成更长距离的连贯文本。然而,我们正处于生成语言建模的初期,Transformers只是朝着真正文本生成方向迈出的一步。生成模型也正在开发其他类型的内容,如图像、视频和音频。

然而,作为一个社会,我们需要谨慎对待生成模型的应用,因为它们为生成假新闻,虚假评论和在线冒充人们开辟了多种可能性。OpenAI 决定拒绝发布他们的GPT-2语言模型,因为它可能被误用,这证明了我们现在已经进入了一个语言模型足够引起关注的时代。

相关推荐