这7种NLP黑科技让你更好交流!来看一看是什么(Part1)

James Le 人工智能头条 2018-06-09

【导读】本文用简洁易懂的语言,讲述了自然语言处理(NLP)的前世今生。从什么是NLP到为什么要学习NLP,再到如何利用机器学习进行NLP,值得一读。这是该系列的第一部分,介绍了三种NLP技术:文本嵌入、机器翻译、Dialogue 和 Conversations。


作者 | James Le

翻译 | Mandy, Xiaowen

编译 | 专知(公众号ID:Quan_Zhuanzhi)



什么是NLP?


自然语言处理(NLP)是计算机科学、人工智能和语言学的交叉领域。目的是让计算机处理或“理解”自然语言,以执行诸如语言翻译和问题回答等任务。


随着语音接口和聊天机器人的兴起,NLP成为了信息时代最重要的技术之一,是人工智能的重要组成部分。充分理解和表达语言的含义是一个极其困难的目标。为什么?因为人类的语言很特别。


人类语言有何特别之处?如下所示几个方面:


  • 人类语言是一种专门用来传达说话者(或作者)意图的系统。这不仅是一个环境信号,也是一种深思熟虑的交流。此外,它使用了一种编码,小孩可以很快学会。同时它也是会改变的。


  • 人类语言大多是离散的/符号的/分类的信号系统,大概是因为这样信号可靠性更高。


  • 一种语言的分类符号可以以几种方式编码为通信信号:声音,手势,书写,图像等。人类语言可以用其中任何一种信号表示。


  • 人类语言是不明确的(与编程和其他正式语言不同)。因此,对人类语言的表达、学习和使用语言/情境/语境/词汇/视觉知识具有高度的复杂性。


为什么要学习NLP?


从这个研究领域衍生出一批快速增长的有用的应用程序。它们从简单到复杂。以下是其中几个:


  • 拼写检查,关键字搜索,查找同义词

  • 从网站提取信息,例如:产品价格,日期,地点,人员或公司名称

  • 分类:学校课文的阅读水平,长文档的积极/消极情感分析

  • 机器翻译

  • 口语对话系统

  • 复杂的问答系统


 事实上,这些应用程序已经在工业中得到了广泛应用:从搜索(书面和口头)到在线广告匹配; 从自动/辅助翻译到营销或财务/交易的情感分析; 从语音识别到聊天机器人/对话代理(自动化客户支持,控制设备,订购商品)。





深度学习


大多数NLP技术都是由深度学习(机器学习的一个子领域)驱动的。在本世纪初,深度学习才开始再次获得重视,其主要原因如下:


  • 大量的训练数据。

  • 更快的机器和多核CPU/GPU。

  • 具有先进功能和改进性能的新模型和算法:更灵活的中间表示学习,更有效的端到端联合系统学习,更有效的上下文使用和任务之间的转移学习方法,以及更好的正则化和优化方法。


大多数机器学习方法都能很好地工作,因为人工设计的表示和输入特征,以及权重优化,从而可以最好地进行最终预测。另一方面,在深度学习中,表示学习试图自动学习来自原始输入的良好特征或表示。在机器学习中,人工设计的特性常常被过度指定、不完整,并且需要很长时间来设计和验证。相比之下,深度学习的学习特点是易于调整和快速学习。


深度学习提供了一个非常灵活,通用且可学习的框架,用于呈现视觉和语言信息的世界。最初,它在语音识别和计算机视觉等领域取得了突破性进展。最近,深度学习方法在许多不同的NLP任务中获得了很高的性能。这些模型通常可以通过一个端到端模型进行训练,不需要传统的、特定于任务的特性工程。


最近,我完成了斯坦福大学的CS224n自然语言处理与深度学习的综合课程。本课程全面介绍应用于NLP的深度学习的前沿研究。在模型方面,它涵盖了词向量表示,基于窗口的神经网络,循环神经网络,长-短期记忆模型,递归神经网络和卷积神经网络,以及一些涉及存储器组件的最新模型。


在编程方面,我学会了实现,训练,调试,可视化和创建我自己的神经网络模型。在这个2部分组成的系列中,我想分享我学到的7种主要的NLP技术,以及使用它们的主要深度学习模型和应用。


注意:您可以在这个GitHub Repo上访问来自CSS 224的课程和编程作业。


https://github.com/khanhnamle1994/natural-language-processing


技术1:文本嵌入(Text Embeddings)


在传统的NLP中, 我们把单词看成是离散符号, 然后用一个one-hot向量来表示。向量的维数是整个词库中单词的数量。单词作为离散符号的问题在于, 对于一个one-hot向量来说,没有自然的相似性概念。因此, 另一种方法是学习在向量本身中的编码相似性。核心思想是一个词的意思是由经常出现在其附近的词给出的


文本嵌入是字符串的实值向量表示形式。我们为每个单词构建一个稠密的向量, 这样做是以便它与出现在相似上下文中的单词向量相似。对于大多数深度NLP任务而言,词嵌入被认为是一个很好的起点。它们允许深度学习在较小的数据集上有效,因为它们通常是深度学习体系结构的第一批输入,也是NLP中最流行的迁移学习方式。词嵌入中最流行的方法是Google(Mikolov)的Word2vec和Stanford(Pennington,Socher和Manning)的GloVe。让我们深入研究这些词汇表达:



在Word2vec中,我们有一个庞大的文本语料库,其中固定词汇表中的每个词都由一个向量表示。然后我们在文本中遍历每一个位置t,它有一个中心词c和上下文词o。接下来,我们使用c和o的词向量的相似度来计算给定c的o的概率(反之亦然)。我们不断地调整词向量来最大化这个概率。


为了有效地训练Word2vec,我们可以从数据集中去除无意义(或更高频率)的单词(例如a,the,of,then ...)。这有助于提升模型的准确性和减少训练时间。 此外,我们可以对每个输入使用negative sampling,即更新所有正确标签的权重,但只更新少数不正确标签的权重。


Word2vec有两个值得注意的模型变体:



  1. Skip-Gram:我们考虑一个包含k个连续项的上下文窗口。然后我们跳过其中一个词,尝试学习一个神经网络,它获取除跳过的项之外的所有项并预测跳过的项。因此,如果两个词在一个大语料库中重复地共享相似的上下文,那么这些词的嵌入向量就是相似的。


  2. Continuous Bag of Words:我们在一个大的语料库中获取大量的句子。每当我们看到一个单词,我们就会联想到周围的单词。然后我们将上下文单词输入到一个神经网络中,并在这个上下文中预测这个中心词。当我们有数千个这样的上下文词和中心词时,我们就会有一个用于神经网络的数据集的实例。我们训练神经网络,最后编码的隐藏层输出表示一个特定的词嵌入。当我们通过大量的句子进行训练时,相似上下文中的单词会得到相似的向量。



Skip-Gram和CBOW的一个不足是它们都是基于窗口的模型,这意味着语料库的共现(co-occurrence)统计信息没有得到有效利用,导致次优嵌入(suboptimal embeddings)。GloVe模型试图通过将一个词的含义与整个观察语料库的结构结合起来,来解决这个问题。


GloVe模型试图通过捕获嵌入整个观察语料库结构的一个词的含义来解决这个问题。为了做到这一点,模型对单词的全局共现数进行训练,并通过最小化最小二乘误差来充分利用统计数据,从而产生一个有意义的子结构的词向量空间。这样的做法用向量距离来保留了单词的相似性。


除了这两种文本嵌入外,还有许多最近开发的高级模型,包括FastText,Poincare Embeddings,sense2vec,Skip-Thought,Adaptive Skip-Gram。我强烈建议大家去看一看。


技术2:机器翻译


机器翻译是语言理解的经典测试。它由语言分析和语言生成两部分组成。大型机器翻译系统有巨大的商业用途,因为全球语言是一个每年400亿美元的产业。给你一些值得注意的例子:


  • 谷歌翻译每天翻译1000亿字。

  • Facebook使用机器翻译自动翻译帖子和评论中的文字,以打破语言障碍,让世界各地的人们相互交流。

  • eBay使用机器翻译技术来实现跨境贸易,并连接世界各地的买家和卖家。

  • 微软为Android、iOS和亚马逊Fire的终端用户和开发人员提供基于人工智能的翻译,无论他们是否可以访问互联网。

  • 早在2016年,Systran就成为首家推出30多种语言的神经机器翻译引擎的软件提供商。


在传统的机器翻译系统中,我们必须使用平行语料库——文本的集合,每个文本都被翻译成一种或多种不同于原文的其他语言。例如,给定源语言f(例如法语)和目标语言e(例如英语),我们需要构建多个统计模型,包括使用贝叶斯规则的概率公式、在平行语料库上训练的翻译模型p(f|e)和在仅限英语语料库上训练的语言模型p(e)。


不用说,这种方法忽略了数百个重要的细节,需要大量的人工特征工程,由许多不同的和独立的机器学习问题组成,总体而言是一个非常复杂的系统。


神经机器翻译是通过一个称为递归神经网络(RNN)的大型人工神经网络对整个过程进行建模的方法。 RNN是一个有状态的神经网络,它和过去通过时间来连接。神经元的信息不仅来自上一层,而且来自更前一层的信息。这意味着,我们输入和训练网络的顺序很重要:输入“Donald”,然后输入“Trump”,可能会产生与输入“Trump”和输入“Donald”不同的结果。



标准的神经机器翻译是一种端到端神经网络,源语句由一个称为编码器(encoder)的RNN编码,目标词使用另一个称为解码器(decoder)的RNN进行预测。RNN编码器逐个读取一个源语句,然后在最后的隐藏状态汇总整个源语句。RNN解码器使用反向传播学习这个最后的汇总并返回传播后版本。神经机器翻译从2014年作为一项边缘研究活动发展到2016年成为被广泛采用的机器翻译的主流方式,这一过程令人惊叹。那么,使用神经机器翻译的最大优势是什么?


  1. 端到端训练:NMT中的所有参数都被同时优化,以最小化网络输出上的损失函数。

  2.  分布式表示具有优势:NMT更好地利用单词和短语的相似性。

  3.  更好地探索上下文:NMT可以使用更多的上下文——源文本和部分目标文本——来更准确地翻译。

  4. 更流畅的文本生成:深度学习的文本生成比平行语料库的生成质量高得多。


RNNs的一个大问题是梯度消失(或爆炸)问题,其中取决于所使用的激活函数,随着时间的推移信息会迅速丢失。直观地说,这不会是一个很大的问题。因为这些只是权重而不是神经元状态,但是时间的权重实际上是存储过去信息的地方;如果权重达到了0或1,000,000,那么前面的状态将不会提供很多信息。因此,RNNs在记忆之前的单词非常困难,并且只能根据最近的单词做出预测。


长/短期记忆(LSTM)网络试图通过引入门(gate)和明确定义的记忆单元(memory cell)来解决梯度消失/爆炸问题。每个神经元都有一个memory cell和三个gate:input,output和forget。这些门的功能是通过停止或允许信息流来保护信息。


  • input gate确定来自前一层的信息有多少存储在单元中。

  • 输出层接受另一端的任务,并确定下一层有多少人知道这个单元的状态。

  • forget gate的作用起初看起来有点奇怪,但有时最好还是忘掉:如果是学习一本书,翻开新的一章,那么网络可能有必要忘掉前一章中的一些人物。


LSTMs已经被证明能够学习复杂的序列,比如像莎士比亚一样进行写作或创作原始的音乐。请注意,这些门中的每一个都对前一个神经元中的一个单元具有权重,因此它们通常需要更多资源才能运行。LSTM目前非常流行,并且在机器翻译中被广泛使用。除此之外,它是大多数序列标签任务的默认模型,其中有大量的数据。


Gated recurrent units(GRU)是LSTMs的一个微小变型,也是神经机器翻译的扩展。它们少了一个gate,连线方式略有不同:它们没有一个input、output和一个forget gate,而是一个update gate。这个update gate决定从上一个状态保存多少信息,以及从上一个层输入多少信息。


reset gate的功能与LSTM的forget gate非常相似,但位置稍有不同。它们总是发送它们的全部状态——它们没有输出门。在大多数情况下,它们的功能与LSTMs非常相似,最大的区别是GRUs稍微快一些,更容易运行(但也更不容易表达)。在实践中,这些往往会互相抵消,因为你需要一个更大的网络来重新获得一些表示能力,这反过来又抵消了性能优势。在一些不需要额外表示的情况下,GRU可以胜过LSTM。



除了这三种主要体系结构之外,近年来神经机器翻译系统也有了进一步的改进。以下是最显著的发展:


  • Sequence to Sequence Learning with Neural Networks【1】证明了LSTM在神经机器翻译中的有效性。它提出了序列学习的一种通用的端到端方法,对序列结构进行了最少的假设。该方法使用多层Long Short Term Memory(LSTM)将输入序列映射为固定维度的向量,然后再通过另一个深度LSTM对目标序列进行解码。


  • Neural Machine Translation by Jointly Learning to Align and Translate【2】引入了NLP中的注意力机制(将在下一篇文章中介绍)。认识到使用固定长度的向量是提高NMT性能的瓶颈,作者建议通过允许模型自动(软)搜索与预测目标相关的源句子来进行扩展,而不必将这些部分明确地形成为一个固定的长度。


  • Convolutional over Recurrent Encoder for Neural Machine Translation【3】在NMT标准RNN编码器中增加了卷积层,以便在编码器输出中捕获更广泛的上下文。


  • 谷歌建立了自己的NMT系统,称为Google’s Neural Machine Translation【4】,它解决了准确性和部署方便性方面的许多问题。该模型由一个深度LSTM网络组成,该网络包含8个编码器和8个解码器层,使用残差连接以及从解码器网络到编码器的注意力连接。