人们对人工智能的兴趣随着科幻电影的诞生和发展变得愈发浓厚. 每当我们听到 "人工智能" 这个词, 便会联想到《终结者》,《黑客帝国》,《我, 机器人》等电影.
机器人具有独立思考的能力在目前看来还比较遥远, 但机器学习和自然语言理解领域已经在过去几年取得了重大进展. 个人助理(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 等高级神经网络能够处理较长的句子, 提高了语言模型预测的准确性.
马尔可夫链(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" 有着更高的出现概率."记忆" 单元选择概率更高的单词, 并对其进行排序, 然后进行下一次迭代.
但 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》 https://goo.gl/dwSBxB 中首次提出, 并涉及到一种名为 "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 语言模型 https://openai.com/blog/better-language-models/ . 该模型通过将注意力集中在与预测下一个单词相关的单词上, 更好的学习并预测句子中的下一个单词.
使用 Transformer 进行文本生成与机器翻译所遵循的结构类似. 举个例子,"Her gown with the dots that are pink, white and ____". 通过利用 self-attention 机制对前面所出现的颜色 (白色和粉色) 进行分析, 理解需要预测的单词也是一种颜色, 此时模型的输出为 "blue".Self-attention 能够帮助模型选择性地关注每一个单词在句子中担任的角色, 而不仅仅是通过循坏记住些许特征.
语言生成的未来
本文带我们纵览了语言生成的发展, 从利用马尔可夫链预测下一个单词, 到使用 self-attention 生成连贯的文章. 但是, 我们仍处于生成语言建模的初期, 今后还会往自主生成文本的方向迈进. 生成模型也将用于图像, 视频, 音频等内容的开发.
来源: https://yq.aliyun.com/articles/695000