阅读 688

【译】NLP必读

Language is the blood of the soul into which thoughts run and out of which they grow
‒ Oliver Wendell Holmes

原文:NLP must reads 作者:Rowen Lee

你有没有想过谷歌翻译或者 Siri 是如何工作的? 机器如何理解我们所说的话? 这类问题属于自然语言处理(NLP)领域,这是当今最令人兴奋的研究领域之一。 在这篇文章中,我将分享在现在 NLP 中的技术架构。

当时提到人工智能,脑海中浮现的往往是一些邪恶的终结者试图毁灭世界。但是如果你不考虑部署和清洗数据带来的混乱,人工智能模型本质上其实就是数学预测模型。 作为一个数学模型,它需要数学输入。因此,如果你输入一串单词并期望模型可以真正读懂它理解它,这是没有意义的。

这里整个领域都在致力于寻找词汇的正确数学表示。(但话又说回来,你如何定义"正确"?) ,我会在下一节讨论。

单词表示

“单词表示”的使用近年已经成为NLP系统成功的关键

一种常见的方法是将一个单词转换为一个向量(由数字组成的数组) ;根据流行的观点,一个好的单词表示法最好是考虑到语法、语义和计算需求的表示法。 本文所讨论的是,分布式表示在尝试实现这一点:

一个神经概率语言模型(A Neural Probabilistic Language Model)

什么是分布式表示: 为了更直观理解,我们将它与稀疏表示法(sparse representation)进行比较

稀疏表示(左)与分布式表示(右)。 图片来自quora post

为什么选择分布式表示: 在语料库中使用单词的稀疏表示(比如独热编码(one-hot))会导致维数灾难,即单词向量的维数随着词汇量的增加而增加(作为比较,想象一下如果我们有更多的模式,上面的图会是什么样子)。 因此,分布式表示更为可取。

向量空间中高效的单词表示(Efficient Estimation of Word Representations in Vector Space)

介绍word2vec模型: 它使用了一个两层的神经网络,将文本转换成向量:基于包围它的上下文单词预测这当前词(CBOW),以及基于单词预测它的上下文(Skip-gram)。

图片来自论文

Glove: 词表示的全局向量ーー斯坦福 NLP(GloVe: Global Vectors for Word Representation — Stanford NLP

一个全局方法: 在整个语料库中考虑了词-词同现概率的词向量表示。 它克服了 word2vec 模型只考虑相邻词而不考虑整个语料统计的缺点。

现在我们已经有了词的数学表示,接下来我们要做什么呢? RNN要上场了。

循环神经网络——RNN(Recurrent Neural Networks)

语言是有序列的,因此在自然语言处理问题中常用的模型之间具有相似的性质,也就不足为奇了。 一个使用广泛的模型是 RNN,Andrej Karpathy 在他的博客中称之为"magical"。 你可以把它想象成一次只能输入一个单词的机器。 它会记住你之前输入到"记忆"(有时称为隐含向量)中的所有单词。

以下是我从他的博客文章中得出的主要结论::

  • 普通神经网络和卷积网络的主要问题,是它们每次的输入和输出向量(单词)必须是固定长度的
  • 而在循环网络中,输入和输出向量的尺寸可以不是固定的。可以想象,在语言翻译任务中,需要翻译的句子长度是不同的。

  • RNN 的一个局限性是,如果它有太多的"内存",也就是如果隐藏层向量尺寸的话,它的计算成本会非常高。 解决这个问题的一个尝试是一个叫做神经图灵机(Neural Turing Machine)的模型 。它有一个外部内存系统,允许它读写特定的内存位置。在涉及复制和排序数据序列的任务中,NTM 的性能优于普通的LSTM。然而,我并没有听到很多人在语言建模任务中使用 NTM。

语言翻译任务( Language Translation Tasks)

端到端的神经机器翻译系统(Neural machine translation by jointly learning to align and translate)

什么是神经机器翻译: 这是一个神经网络在翻译任务中的实际应用。 一种流行的方法是使用编码器和解码器系统,正如这篇文章使用 RNN 编解码器进行统计机器翻译,从而学习短语表示(Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation)中所讨论的。 然而,当输入序列太长时,系统就会出现问题,因为网络需要将太多的信息压缩成一个向量。

编码器和解码器的行为: 黑紫色圆圈是解码器的输出。它们是由编码器输出(浅紫色圆圈)和上一步解码器输出形成的。为了简单起见,这里只显示前两个单词的箭头

主要观点: 在语言翻译任务中,输入词和输出词之间存在"对齐"关系。 具体来说,每个翻译出来的单词都与输入文本中的特定单词存在相关性。

一种新的技术: 文章介绍了一种称为RNNSearch的新模型,其中解码器具有注意力机制。 这减轻了编码器不得不在源语句中存储所有信息的负担。

注意事项: 文章不涉及未知或罕见词语的表示。

法语和英语之间的翻译。 较浅的颜色表明词对之间的关系更密切。 图片来自论文

基于循环注意力建模的机器翻译 (Neural Machine Translation with Recurrent Attention Modeling)

文章介绍了一种新技术。 考虑每个单词在翻译过程中应该更关注原句中哪一些关键性词语,从而达到优化模型的目的。

结果: 该模型在英德翻译和中英翻译任务中的表现优于RNNSearch

基于注意力的机器翻译(Effective approaches to attention-based neural machine translation)

创新点: 文章介绍了两种基于注意力的模型:一种是全局模型,其中所有源词都被注意; 另一种是局部模型,其中每次只考虑源词的子集。

它与现有的模型相比如何? 全局注意力的概念类似于RNNSearch模型中使用的概念,但是进行了一些简化。对于局部注意力,它是一个软和硬注意力模型的混合,正如这篇文章显示,关注和讲述: 视觉注意的神经图像标题生成(Show, attend and tell: Neural image caption generation with visual attention)所讨论的。

注意力才是你需要的(Attention is All You Need)

这次有什么不同: 典型的神经机器翻译模型使用 RNN 作为编解码系统的底层框架。 这种方法存在两个主要问题:

  • (1)由于 RNNs 的顺序特性,不可能进行并行处理;
  • (2) RNNs 不能建立长期依赖关系的模型。

关键点: 翻译任务不仅仅是将一个单词映射到另一个单词。我们需要注意多种关系,即输入单词之间的依赖关系

  • (1)输入单词与输出单词之间的依赖关系
  • (2)输出单词之间的依赖关系
  • (3)与通过编码器的潜在状态学习这些依赖关系不同,我们可以通过注意力机制这样做。

A new type of attention. This paper introduces the transformer model, which replaces the RNN with a multi-head attention that consist of multiple attention layers.

提出一种新型的注意力: 文章介绍了transformer模型,由多个注意力层组成的“多头注意力”来代替RNN

为什么它受到如此多的关注: 这是第一个完全基于注意力的序列映射模型。 由于模型中缺少循环层,其训练速度明显加快,甚至优于以前发表的所有模型。

谷歌机器翻译系统: 跨越人机翻译的鸿沟(Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation)

动机和目标: 典型的神经机器翻译模型不能扩展到大型数据集,缺乏鲁棒性,难以部署。 这种翻译模式旨在克服这些问题,并在翻译质量方面超越当前的翻译水平。

谷歌多语种机器翻译系统: 实现Zero-Shot翻译(Google’s Multilingual Neural Machine Translation System: Enabling Zero-Shot Translation)

谷歌是如何改进之前的模型的? 之前由 Google 引入的最先进的 GNMT(Google’s Neural Machine Translation),很难扩展到多种语言。通过在输入语句中引入一个附加标记来指定目标语言,该模型可以实现零镜头翻译。

什么是zero-shot翻译? 在语言对之间进行翻译的能力是该模型从未见过的。 例如,如果使用日本英语和韩国英语的例子来训练模型,它也能够在测试期间进行韩国日语翻译。

也许... 这个模型发现了一种"通用的语言表示"?

实现人文平等的汉英新闻自动翻译(2018)(Achieving Human Parity on Automatic Chinese to English News Translation (2018))

主要贡献: 本文介绍了一种新的衡量翻译质量的方法,描述了实现中英文翻译任务的技术。

潜在的限制: 所描述的技术可能不适用于其他语言之间的翻译。

情感分析

学习生成评论并发现情绪(Learning to Generate Reviews and Discovering Sentiment

这是什么意思呢: 作者首次使用非监督式学习来生成评论文本的表示。他们最终发现了一个学习表征的单元,可以相当准确地传达情绪。因此,训练好的模型可以作为情感分类器。

类似的方法:对监督式学习问题引入"预训练"步骤并不是什么新鲜事ー参见这篇文章半监督序列学习(Semi-supervised sequence learning)。 或者,可以优化单词嵌入,使其捕获情感信息,比如这篇文章Refining Word embedding for Sentiment Analysis中讨论的那样。

缺点:这种表示学习对它们所受训练的数据分布非常敏感。例如,我们可能无法使用不同的训练数据复现实验结果。

研究人员发现,一个单位的文本表征能够相当准确地传达情绪。绿色高亮表示积极情绪,红色表示消极情绪。 图片来自论文

梯度问题 Gradient problems

要理解一篇文章或一段音频,你必须连接现在和过去的信息,即捕捉长程的依赖关系。 Rnn 是目前使用反向传播捕获依赖关系的最先进方法。然而,它会导致梯度消失或梯度爆炸,特别是对于深层网络和长序列数据。 一个解决方案是使用 lstm,这是 RNN 的一个更复杂的变体。然而,它可能会变得过于复杂而难以训练。因此,大多数研究人员坚持使用 RNN,但进行了一些有效的训练调整:

  • 贝叶斯RNN(Bayesian RNN) , 采用后验逼近(posterior approximation )和截断梯度的方法,提高了 RNN 的性能

  • 基于时间序列截断反向传播(BPTT)和引入额外的无监督损失,迫使 RNN 重建或预测部分记忆:

    截断反向传播并加上一个辅助的无监督损失

  • Recurrent Highway Networks,是RNNs的一个变种,它引入了Highway层,使得训练非常深入的前馈网络成为可能

可能RNN并没有那么好?

训练RNN是很困难的,因为它们需要大量的内存和计算能力。所以主张使用 CNN 或在 RNN 模型上引入注意力机制的人越来越多:

用于序列建模的通用卷积和递归网络的实证评价(An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling)

这篇文章是对序列建模问题中,常用的递归和卷积结构进行了系统性评价。论证了RNN网络在序列建模任务中不如卷积网络的应用,指出需要重新考虑RNN在序列建模任务中表现的其实并不好。

深度卷积网络文本分类(Very Deep Convolutional Networks for Text Classification)

文章介绍了一种新的自然语言处理问题的体系结构,包括多个卷积和最大池化层(max pooling layers.)。 它强调体系结构深度有助于在 NLP 问题中获得更好的结果。

结语

所有的模型都是错误的,只不过有些模型看上去有用而已 - George E. P. Box

人类的语言是复杂的。

与图像可以用明确的数字像素表示不同,语言不仅仅是在纸上组合起来的弯弯曲曲的标记或大声把它读出来就可以。在交织在一起的人物和文字之间,有一种微妙的情感、历史和文化的暗示,这些数学模型可能有点太简单了,他们难以理解真正的语言(他们真的能理解吗?)

也许高级聊天机器人(比如电影《她》中的萨曼莎)的出现还需要一些时间。

关注下面的标签,发现更多相似文章
评论