文章目录

  • 什么是NLP?
  • 为什么要学习NLP?
  • 深度学习
    • 技术1:文本嵌入(Text Embeddings)
    • 技术2:机器翻译
    • 技术3:会话

易水寒 发表于 2018-06-10 10:26:10

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

什么是NLP?

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

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

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

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

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

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

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

为什么要学习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。让我们深入研究这些词汇表达:

NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍

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

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

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

NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍

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

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

NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍

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”不同的结果。

NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍

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

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

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

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

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

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

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

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

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

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

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

NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍

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

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

NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍

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

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个解码器层,使用残差连接以及从解码器网络到编码器的注意力连接。

Facebook AI研究人员不使用递归神经网络,而是使用卷积神经网络【5】序列对NMT中的学习任务进行排序。

技术3:会话

关于会话AI的文章很多,其中大部分集中在垂直聊天机器人、messenger平台、商业趋势和创业机会(比如亚马逊Alexa、苹果Siri、Facebook M、谷歌助理、微软Cortana)。人工智能理解自然语言的能力仍然有限。因此,创建完全自动化的开放域会话助理仍然是一个开放的挑战。尽管如此,以下所示的工作对于那些想要寻求对话人工智能下一个突破的人来说是一个很好的起点。

NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍

来自蒙特利尔、佐治亚理工学院、微软和Facebook的研究人员建立了一个神经网络,能够产生上下文敏感的对话反应。这种新型的响应生成系统可以在大量非结构化的Twitter对话中进行端到端训练。当将上下文信息集成到经典的统计模型中时,使用一个递归的神经网络架构来解决稀疏性问题,使系统能够考虑到以前的对话。该模型显示了对上下文敏感和非上下文敏感的机器翻译和信息检索baseline的一致好处。

神经应答机(NRM)是在香港开发的一种基于神经网络的短文本对话响应发生器。它采用通用的编码-解码框架。首先,它将响应的生成形式化为基于输入文本潜在表示的解码过程,而编码和解码都是通过递归神经网络实现的。NRM通过从微博服务收集的大量一轮谈话数据进行训练。实证研究表明,NRM能够对超过75%的输入文本产生语法正确和内容恰当的响应,在相同的环境下表现优于现有技术。

NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍

最后,谷歌的神经会话模型(Neural Conversational Model)是会话建模的一种简单方法。它使用序列到序列( sequence-to-sequence )的框架。该模型通过预测会话中给定前一句的下一句进行对话。该模型的优点在于可以进行端到端的训练,因此需要更少的手工规则。

给出一个大型的会话训练数据集,该模型可以生成简单的会话。它可以从特定领域的数据集以及电影字幕的大的、有噪声的、通用的领域数据集中提取知识。在特定于域的IT help-desk数据集上,该模型可以通过对话找到技术问题的解决方案。在嘈杂的开放域电影副本数据集上,该模型可以执行简单形式的常识推理。

NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍相关推荐

  1. python推导式多行书写_python三种推导式的详细介绍及其应用示例,强调字典推导的重要性...

    前言 列表推导式构建列表的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.自python2.7以后,列表推导和生成器表达式的概念就应用到了字典上,所以就有了字典推导,以后我们还会遇到集合推导 ...

  2. 虚拟网络编辑器三种模式工作原理详细介绍(桥接-网络地址转换-主机模式)

     1.桥接模式(Bridged) 使用该模式的虚拟操作系统是局域网中的一个独立主机,具有独立访问网络中其他主机的功能.它的配置信息由VMnet0虚拟网络提供,不支持DHCP服务.用户需要按照一定的规则 ...

  3. Java处理XML的三种主流技术及介绍

    Java处理XML的三种主流技术及介绍(1) 2012-08-15 10:44 顾彬/冯晨/乔彬 IBM developerWorks 我要评论(0) 字号:T | T XML (eXtensible ...

  4. Tomcat运行三种模式:http-bio|http-nio|http-apr介绍

    转自<tomcat运行三种模式:http-bio|http-nio|http-apr介绍> Tomcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一.不过,许多 ...

  5. java循环do while_Java中for、while、do while三种循环语句的区别介绍

    这篇文章主要介绍了Java中for.while.do while三种循环语句的区别介绍的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 本文通过实例讲解给大家介绍Java中for.whil ...

  6. java中控制反转_Java如何利用IOC控制反转的三种设计模式详解

    这篇文章主要为大家详细介绍了Java使用IOC控制反转的三种设计模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 对于许多开发人员来说,控制反演(IoC)都是一个模糊的概念,因为他们在现实世界中 ...

  7. 【深入理解TcaplusDB技术】详细介绍TDR表数据类型

    [深入理解TcaplusDB技术]详细介绍TDR表数据类型 数据类型 基本数据类型 目前对于C/C++/c#语言,支持的基本数据类型如下表所示: 类型名 分类 存储长度(字节) 取值范围 Byte 字 ...

  8. java利用实现大数阶乘(三种方法)

    java利用实现大数阶乘(三种方法) 法一: for循环 import java.math.BigInteger; import java.util.Scanner; public class das ...

  9. BackSwap银行***利用三种全新技术清空银行帐户

    美国ESET公司的安全专家在最近发现了一种名为"BackSwap(由ESET检测为Win32/BackSwap.A)"的新型银行***,它采用了三种全新的技术从×××那里窃取资金, ...

最新文章

  1. SPOJ Substring Problem(Rabin Karp TLE)
  2. socket心跳检测
  3. java访问控制度_菜鸡的Java笔记 - java 访问控制权限
  4. Python Selenium 常用方法总结
  5. java 的HashMap底层数据结构
  6. nacos 读取纯数字字符 出错 @value
  7. React 新 Context API 在前端状态管理的实践
  8. 反射可以使用lambda吗_必读干货帖|车载对讲机使用地网天线可以降低驻波吗?...
  9. 在vue中实现锚点定位功能
  10. 《项目经验》静态页面图片找不到
  11. 计算机在工程制图上的应用,浅析计算机软件在工程制图中的应用
  12. 衣米魔兽世界怀旧服:相关网友和测试玩家的提问,王乾亨以及衣米魔兽官方的解释与回答内容精选
  13. word2016如何在将指定页设置为首页
  14. 第54届超算TOP500排名,中美各自以数量和性能领先
  15. XPU时代创新者英特尔
  16. 标签体系应用及设计思路
  17. python实现剪刀石头布小游戏
  18. 一、2、JAVA--集合
  19. 收集的优秀的英文歌曲
  20. JSD-2204-WebServer(项目)-Day14

热门文章

  1. 你最拿手的5种程序设计语言是什么?
  2. java double 取余_java中double除法和取余的若干注意
  3. 安兔兔android手机性能排行榜,安兔兔发布:2018年10月国内Android手机性能排行榜...
  4. map集合遍历 java_Java Map集合遍历
  5. Day28 MySQL
  6. java版本双蛇大战
  7. PDF.js 详情解说
  8. 聚名网:又一终端大七位收购BG.cn!现已作为官网启用!
  9. 使用朴素贝叶斯对连续NBA数据集进行分类
  10. 20-【JS全解】JavaScript 的诞生