人们对人工智能的兴趣随着科幻电影的诞生和发展变得愈发浓厚。每当咱们听到“人工智能”这个词,便会联想到《终结者》、《黑客帝国》、《我,机器人》等电影。算法
机器人具备独立思考的能力在目前看来还比较遥远,但机器学习和天然语言理解领域已经在过去几年取得了重大进展。我的助理(Siri/Alexa)、聊天机器人及问答机器人等应用程序正悄无声息地改变着人们的生活方式。网络
人们须要理解大量有歧义且结构多变的语言并从中获取意义,这促使天然语言理解(Natural Language Understanding,NLU)和天然语言生成(Natural Language Generation, NLG)成为人工智能中发展最快的应用。Gartner预测,“到2019年,天然语言生成将是90%的现代BI和分析平台的标准特征”。本文将回顾NLG的历史,并展望其将来。机器学习
什么是NLG?
NLG经过预测句子中的下一个单词传达信息。使用语言模型可以预测下一个可能出现的单词,也就是找到单词在序列中的几率分布。举个例子,预测“I need to learn how to __”的下一个单词,语言模型会计算下一个单词,如“write”,“drive”可能出现的几率。RNNs及LSTMs等高级神经网络可以处理较长的句子,提升了语言模型预测的准确性。ide
马尔可夫链(Markov Chains)
马尔可夫链是最先用于语言生成的算法。它经过当前单词预测句子中的下一个单词。举个例子,模型经过下面两个句子进行训练,“I drink coffee in the morning”和“I eat sandwiches with tea”。“drink”后面出现“coffee”的几率是100%,“I”后面出现“eat”和“drink”的几率分别为50%。马尔可夫链在计算下一个单词出现几率的时候,会把每一个单词之间的关系考虑进去。该模型最先用于为智能手机输入句子提供下一个单词生成建议。学习
但因为仅注意当前单词,马尔可夫模型没法探测当前单词与句子中其它单词的关系以及句子的结构,使得预测结果不够准确,在许多应用场景中受限。编码
循环神经网络(Recurrent Neural Network, RNN)
神经网络启发于人类大脑的工做原理,经过对输入和输出数据之间的非线性关系进行建模,为计算提供了一种新的方法,用于语言建模即称为神经语言建模。人工智能
RNN是神经网络的一种,它可以捕捉输入数据的序列特征。经过前馈网络处理序列中的每个item,并将模型的输出做为序列的next item,此过程可以帮助存储前面每步的信息。这样的“记忆”使得RNN在语言生成中有着出色的表现,由于记住过去的信息可以帮助更好的预测将来。与马尔可夫链不一样的是,在进行预测时,RNN不只关注当前单词,还关注已经处理过的单词。翻译
利用RNN进行语言生成
在RNN的每一次迭代中,模型都能在其“记忆”单元中存储出现过的单词,以及计算下一个单词出现的几率。举个例子,有“We need to rent a __”,此时要预测句子中的下一个单词。模型可以记住在词典中每一个单词随前面单词出现的几率。在上述例子中,“house”或者“car”比“river”和“dinner”有着更高的出现几率。“记忆”单元选择几率更高的单词,并对其进行排序,而后进行下一次迭代。orm
但RNN有一个很大的问题——梯度消失。随着序列长度的增长,RNNs不能存储那些好久前遇到的单词,便只能根据最近的单词进行预测。这使得RNNs没法应用于生成连贯的长句子。视频
长短时间记忆网络(Long Short-Term Memory, LSTM)
长短时间记忆网络是RNNs的变体,比vanilla RNNs更适合处理长序列。LSTM应用普遍,其与RNNs的结构相似。不一样的是,RNNs只有一个简单的层结构,而LSTM内部有4个层结构。一个LSTM由4部分组成:cell,输入门,输出门以及遗忘门。
利用LSTM进行语言生成
示例,输入句子为“I am from Spain. I am fluent in ___”。为了正确预测出下一个单词“Spanish”,LSTM会更加关注上一句中的“Spain”而且利用cell对其进行记忆。在处理序列时cell会对获取的信息进行存储,这些信息会用于预测下一个单词。当遇到句号时,遗忘门会意识到句子中的上下文发生了改变,并忽略当前cell中存储的状态信息,换句话说,遗忘门的做用是让循环神经网络“忘记”以前没有用到的信息。
LSTM及其变体可以解决梯度消失问题并生成连贯的句子。可是,LSTM也有其局限性:计算要求高,难以训练。
Transformer
Transformer在2017年,由Google团队在论文《Attention Is All You Need》中首次提出,并涉及到一种名为“self-attention mechanism”的新方法。Transformers目前普遍用于解决NLP问题,例如语言建模,机器翻译以及文本生成等。Transformer模型由一组编码器和一组解码机器组成,前者负责处理任意长度的输入,后者负责输出生成的句子。
在上述示例中,编码器处理输入句子,并为其生成表示。解码机器利用表示生成用于输出的句子。每一个单词最初的表示或嵌入由空心圆表示。接下来,Transformer模型利用self-attention机制获取全部其余单词之间的关系,生成每一个单词的新表示,如图中的实心圆。对每一个单词重复该步骤,连续生成新的表示,相似地,解码机器从左往右依次生成单词。
与LSTMs不一样的是,Transformer须要的步骤少,应用self-attention机制可以在不考虑单词位置的状况下,直接捕捉句子中全部单词之间的关系。
最近,许多研究学者对vanilla transformer模型进行了改进,提高了速度与精度。在2018年,谷歌提出BERT模型,此模型在各类NLP任务中均取得了最早进的结果。在2019年,OpenAI发布了一个基于transformer的语言模型,只须要输入几行文本就能够生成长篇文章。
利用Transformers进行语言生成
Transformer模型一样能够用于语言生成,最著名的要数OpenAI提出的GPT-2语言模型。该模型经过将注意力集中在与预测下一个单词相关的单词上,更好的学习并预测句子中的下一个单词。
使用Transformer进行文本生成与机器翻译所遵循的结构相似。举个例子,“Her gown with the dots that are pink, white and ____”。经过利用self-attention机制对前面所出现的颜色(白色和粉色)进行分析,理解须要预测的单词也是一种颜色,此时模型的输出为“blue”。Self-attention可以帮助模型选择性地关注每个单词在句子中担任的角色,而不只仅是经过循坏记住些许特征。
语言生成的将来
本文带咱们纵览了语言生成的发展,从利用马尔可夫链预测下一个单词,到使用self-attention生成连贯的文章。可是,咱们仍处于生成语言建模的初期,从此还会往自主生成文本的方向迈进。生成模型也将用于图像、视频、音频等内容的开发。
原文连接 本文为云栖社区原创内容,未经容许不得转载。