历史回顾——NLP问题解决方案的演变史

摘要: 回顾NLP问题的解决方案,探寻当下最流行的NLP技术,激发NLP问题新的解决方案!



NLP-深度学习时代之前:

在深度学习来临之前的日子里,在自然语言处理算法(NLP领域出乎意料地有许多相对成功的经典挖掘算法,对于像垃圾邮件过滤词类标记问题可以直接使用可解释的模型来解决它们。

但并非所有问题都可以通过这种方式解决,简单的模型不能充分捕捉语境或反语等细微语言要点。基于总体概括的算法(例如,文字袋bag-of-words))证明了不足以捕捉文本的连续性,而n-gram努力克服这些困难,但受到度灾难严重影响。即使是基于HMM的模型也无法克服这些问题,因为它们是无记忆。

第一个突破——Word2Vec:

语言分析的主要挑战之一是将文本转换为数字输入的方式,只有完成这一步才能使得建模变得可行。在计算机视觉任务中这不是问题,因为在图像中,每个像素都用三个数字来表示,这三个数字描绘了三种基色的饱和度。多年来,研究人员尝试了大量算法来寻找所谓的嵌入,通常指的是将文本表示为矢量。起初,这些方法中的大多数是基于计数单词或短序列的单词(n-gram)。

解决这个问题的最初方法是单热编码,其中来自词汇表的每个单词被表示为仅具有一个非零的唯一二进制向量。一个简单的概括是编码n-gram(连续n个单词的序列)而不是单个单词。这种方法的主要缺点是非常高的维度,每个矢量都有词汇的大小(或者在n-gram情况下甚至更大),这使得建模变得困难。这种方法的另一个缺点是缺乏语义信息,这意味着代表单个单词的所有矢量是等距的。在这种嵌入中,空间同义词就像完全不相关的单词一样远离彼此。使用这种类型的词语表达可能会使得任务变得更加困难,因为它会迫使你的模型记忆特定的单词而不是试图捕获语义。


自然语言处理算法的第一个重大飞跃发生在2013年,随着Word2Vec的推出——一种专门用于生成嵌入的基于神经网络的模型。想象一下,从一系列单词开始,去除中间单词,并通过查看上下文单词(例如CBOW连续袋)来预测它。该模型的另一个版本是要求预测中间词(skip-gram的上下文)。这个想法是违反直觉的,因为这样的模型可能被用在信息检索任务中(某个单词突然不见了,问题是使用它的上下文来预测它),但这种情况很少。相反,事实证明,如果随机初始化嵌入,然后在训练CBOWskip-gram模型时将它们用作可学习参数,则可以获得可用于任何任务的每个单词的矢量表示。通过这种方式,你可以避免记忆特定的词语,而且可以传达不是由单词本身解释的单词的语义含义,而是通过其上下文来解释。


2014年斯坦福大学的研究小组挑战Word2Vec的竞争方案是:手套GloVe他们提出了一种不同的方法,认为在矢量中对单词的语义含义进行编码的最佳方式是通过全局词共现矩阵,而不是像Word2Vec中的局部共现。正如你在图2中看到的,与场景词相比,同现概率的比率能够区分单词。大约1时,两个目标单词经常或很少与上下文单词共同出现。只有当上下文词与目标词中的一个共同出现时,比例要么非常小,要么非常大。这是GloVe背后的力量,确切的算法涉及将单词表示为向量,其方式是它们的差乘以上下文词语等于共现概率的比率。



进一步改进:

尽管新的强大的Word2Vec提高了许多经典算法的性能,但仍然需要能够捕获文本(长期和短期)中的顺序的解决方案。这个问题的第一个解决方案是所谓的递归神经网络(RNN)。RNN利用文本数据的时间特性,通过将字串馈入网络,同时使用存储在隐藏状态中的先前文本的信息。



这个网络在处理局部时间依赖性方面非常有效,但是当呈现长序列时表现很差。这种失败是由于在每个时间步骤之后,隐藏状态的内容被网络的输出覆盖。为了解决这个问题,计算机科学家和研究人员设计了一种新的RNN架构,称为长期短期记忆(LSTM)。LSTM通过在网络中引入一个称为存储单元的额外单元来处理这个问题,这是一种负责存储长期依赖性的机制,以及负责控制单元中信息流的多个门。这是如何工作的呢?在每个时间步骤,忘记门生成一个分数,表示要忘记的存储单元内容的数量。接下来,输入门决定将多少输入添加到存储器单元的内容中。最后,输出门决定将多少存储单元内容生成为整个单元的输出。所有的门都像有规律的神经网络层一样,具有可学习的参数,这意味着随着时间的推移,网络会适应并更好地决定与任务相关的输入类型以及可以忘记哪些信息。


20世纪90年代后期以来,LSTM实际上已经存在,但是它们在计算和记忆方面都非常昂贵,所以直到最近,由于硬件的显着进步,在合理的时间内训练LSTM网络变得可行。目前,存在许多LSTM的变体,例如mLSTM其引入了对输入GRU乘法依赖性,由于存储单元更新机制的智能化简化,显着减少了可训练参数的数量。


不久之后,这些模型的性能明显优于传统方法,但研究人员渴望获得更多。他们开始研究卷积神经网络在计算机视觉领域取得了不错的成功,并想知道这些概念是否可以纳入NLP。它很快证明,用一维滤波器(处理一个小句子)简单地替换2D滤波器(处理图像的一小部分,例如3×3像素的区域)使其成为可能。与2D CNN类似,这些模型随着第一层处理原始输入和其前一层的所有后续图层处理输出而变得更深入,学习越来越多的抽象特征。当然,一个单词嵌入(嵌入空间通常大约300个维度)比单个像素承载更多的信息,这意味着没有必要像图像一样使用如此深的网络。你可能会认为它是嵌入式应用程序应该在前几层完成的,所以它们可以被跳过。这些直觉在各种任务的实验中被证明是正确的。1D CNNRNN更轻更精确,并且由于更容易的并行化,所以可以训练更快的数量级。


尽管CNN做出了令人难以置信的贡献,但这些网络仍然存在一些缺点。在经典的设置中,卷积网络由多个卷积层组成,负责创建所谓的特征映射和将其转换为预测的模块。特征映射本质上是从文本(或图像)中提取的高级特征,用于保存它在文本(或图像)中出现的位置。预测模块在特征映射上执行聚合操作,或者忽略特征的位置(完全卷积网络)或学习特定特征最经常出现的位置(完全连接的模块)。这些方法的问题出现在例如问题回答中任务,其中模型应该给出文本和问题的答案。在这种情况下,如经典预测模块所做的那样,将文本所携带的所有信息存储在单个文本中是困难的并且通常是不必要的。相反,我们希望将重点放在文本的粒子部分,其中为特定问题存储了最关键的信息。注意机制解决了这个问题,该机制根据基于输入的相关内容权衡文本的部分内容。这种方法也被发现对于文本分类或翻译等经典应用是非常有用。OpenAI联合创始人兼研究总监llya Sutskever接受采访时表示最近推出的注意机制使我非常兴奋,因为它简单并且它工作得很好。虽然这些模式是新的,但我相信他将在未来的深度学习中发挥非常重要的作用。

典型的NLP问题:

有很多语言任务,对人类来说简单,但对于一台机器来说却是非常困难的。这种困难主要是由于讽刺和成语等语言上的细微差别。让我们来看看研究人员是如何试图解决的一些NLP领域:

最常见也可能是最简单的:情绪分析。它本质上决定了演讲者/作家对特定主题的态度或情感反应,情绪可能是积极的,中性的和消极的。看看这篇关于使用深度卷积神经网络来检测推文中的情绪的文章


另外一个案例就是文档分类,我们不是将三种可能的标志之一分配给每篇文章,而是解决普通的分类问题。根据深度学习算法的全面比较,可以肯定地说,深度学习是进行强类型分类的方式。


机器翻译的自然语言处理算法:

我们转向真正的具有挑战的领域:机器翻译。机器翻译长时间以来一直是一个严峻的挑战。知道这一点非常重要,这与我们前面讨论的两个完全不同。对于这项任务,我们需要一个模型来预测单词序列,而不是标签。机器翻译可以说明深度学习的重要性,因为它在顺序数据方面已经取得了难以置信的突破。在这篇博客文章中,它们利用Recurrent Neural NetworksRNN解决翻译问题,在这篇文章中,你可以了解他们如何达到最新的结果。




假设你需要一个自动的文本摘要模型,并且你希望它只提取文本中最重要的部分,同时保留所有的含义。这需要一种能够理解整个文本的算法,同时关注具有大部分含义的特定部分。这个问题可以通过前面提到的注意机制来解决,它可以作为模块在端到端解决方案中引入。


自然语言生成:

你可能已经注意到所有上述任务都有一个共同点。对于情绪分析,文章是分为积极的,消极的或中立的。在文档分类中,每个例子都属于一个类。这意味着这些问题属于监督式学习的问题。但,当你想让你的模型生成文本时,事情会变得棘手。


Andrej Karpathy在其优秀的博客文章中详细介绍了RNN如何解决这个问题。他展示了一个例子,用于生成新的莎士比亚小说或如何生成似乎是由人类编写的源代码,实际上他并没有做任何事情。这些都是很好的例子,这可以说明这种模型是非常强大的,但也有这些算法的真实商业应用。想象一下,你希望以广告为目标,并且不希望它们通过将相同的消息复制并粘贴到每个人而变得通用。编写数千个不同版本的程序绝对是不可能的,因此一个广告生成工具就可能派上用场。


RNNs在字符级别生成文本方面表现得相当好,这意味着网络可以预测生成连续字母(也包括空格,标点符号等)。然而,事实证明,这些模型生成声音是非常困难的。这是因为要产生一个单词只需要几个字母,但是产生高质量声音时,即使是16kHz采样,也会有数百甚至数千个点形成口语单词。研究人员再一次转向CNN,并取得了巨大成功。DeepMind的数学家开发了一个非常复杂的卷积生成WaveNet模型,它通过使用所谓的attrous卷积来处理非常大的(实际原始输入的长度)问题。这是目前最先进的模型,其性能明显优于其他所有基线,但使用起来非常昂贵,即需要90秒才能生成1秒的原始音频。这意味着还有很多需要改进的空间,但这绝对是在正确的道路上。


概括:

深度学习最近出现在NLP中,由于计算问题,我们需要更多地了解神经网络以了解它们的能力,这样才能更好的解决NLP问题。


本文由阿里云云栖社区组织翻译。

文章原标题《Natural Language Processing Algorithms (NLP AI)

作者:sigmoidal

译者:虎说八道,审校:。


原文链接


干货好文,请关注扫描以下二维码:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于signed和unsigned进行整形提升所出现的问题

看如下代码: int main() {char a -1;signed char b -1;unsigned char c -1;printf("a%d,b%d,c%d", a, b, c);return 0; }输出结果如下图所示 为什么会出现这种结果呢,现在我来分析一下 内存中存储这些变量都是以补码的方式进行存储&#x…

flowable BPMN的组件汉化

1.背景: 现在flowable流程设计器已经部分做了汉化,但是bpmn的组件还是没有汉化的,这样对我们中国 人来说就不是很方便。 2.效果:如何实现这一效果呢? 3.实现 3.1. stencilset_bpmn.json拷贝这个json文件到我们的资源…

华为确认与三家EDA公司停止合作;开源安卓恶意软件窃取用户隐私信息;三星高通回应7纳米EUV工艺问题……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 速腾聚创与英国 Aidrivers达…

MaxCompute Console 实用小命令

摘要: MaxCompute Console 可以从 这里 下载。在阿里云官网可以查看 帮助文档。 这里跟大家分享一些 MaxCompute Console 中实用的小命令。 MaxCompute Console 可以从 这里 下载。在阿里云官网可以查看 帮助文档。 这里跟大家分享一些 MaxCompute Console 中实用的…

一个form 如何做两次提交_如何做一个优秀的家长

如何做一个优秀的家长文|潍坊坊子崇文中学父母对待孩子无外乎三种情况:一是事事管、时时管,做了很多事,效果却不好;二是什么都不管,什么都不做,放任自流,不闻不问,结果更不好&#x…

动态执行shell脚本

文章目录一、linux动态执行指定脚本二、需求思路分析①我要做什么?②先手动执行一遍流程③ 把执行命令记录下来三、动态执行脚本①手动制作脚本②脚本升级③ 脚本截图一、linux动态执行指定脚本 脚本目录 /app/CodeQualityScan/gblfy_cx/脚本名 sonar-scanner.sh用…

用冒泡排序的思想,模拟实现qsort函数

首先,要理解什么是冒泡排序,冒泡排序首先就是把无序的一组数,转化成为有序的,像冒泡一样,把排序好的数,一点点的冒出来,比如如下代码 void buffle_sort(int* arr,int sz){//i代表了需要冒泡排序…

关于机器学习,你需要知道的三件事!

摘要: MATLAB开发运营团队深度解析何为机器学习,什么时候使用机器学习,如何选择机器学习算法,MATLAB到底能为机器学习提供怎样的便利?机器学习是一种数据分析技术,让计算机执行人和动物与生俱来的活动&…

京东云的区块链“经”

戳蓝字“CSDN云计算”关注我们哦!就在不久前,京东云在北京国家会议中心召开“区块链京东云 大有可为”战略合作媒体沟通会。会上,京东云与京东数科宣布了在区块链技术服务领域深度合作,重磅发布了智臻链“云”建设规划&#xff0c…

MaxCompute Tunnel SDK数据上传利器——BufferedWriter使用指南

摘要: MaxCompute 的数据上传接口(Tunnel)定义了数据 block 的概念:一个 block 对应一个 http request,多个 block 的上传可以并发而且是原子的,一次同步请求要么成功要么失败,不会污染其他的 b…

cnpm不是内部或外部命令 cnpm: command not found 解决方案 cnpm

问题是处在于 你没用用淘宝的镜像 安装cnpm npm install cnpm -g --registryhttps://registry.npm.taobao.org验证 cnpm -v

库函数strlen的模拟实现

1、对于strlen这个库函数来说&#xff0c;主要就是求字符串的长度的&#xff0c;无论何时&#xff0c;只要遇到‘\0’,求得的长度都会戛然而止&#xff0c;可以看一下例子 #include<stdio.h> #include<string.h> int main(){char* str1[]"abcdef";char*…

MaxCompute 中的Code Generation技术简介

摘要&#xff1a; 前言 在《数据库系统中的Code Generation技术介绍》中&#xff0c;我们简单介绍了一下Code Generation技术及其在大规模OLAP系统&#xff0c;特别是大规模分布式OLAP系统中的重要性。MaxCompute采用了Code Generation技术来提高计算效率。在MaxCompute 前言 …

java调用python_Python教程:17个冷门但实用的小技巧

Python是机器学习的主流语言&#xff0c;没有之一。今年5月&#xff0c;它首次在PYPL排行榜上超越JAVA&#xff0c;成为全球第一大编程语言。而一个月后&#xff0c;Stack Overflow也分享了最新的编程语言浏览量统计数字&#xff0c;结果显示&#xff0c;Python的月活历史性地超…

Hadoop精华问答 | NameNode的工作特点

我们很荣幸能够见证Hadoop十年从无到有&#xff0c;再到称王。感动于技术的日新月异时&#xff0c;让我们再来看看关于Hadoop的精华问答。1Q&#xff1a;NameNode的工作特点A&#xff1a;NameNode始终在内存中保存metedata&#xff0c;用于处理“读请求”&#xff0c;到有“写请…

五个非常实用的自然语言处理资源

摘要&#xff1a; 正在学习NLP&#xff0c;手中没有资源&#xff1f;快来看看这些免费的NLP学习资源吧&#xff01;如果你对自然语言处理方面的资源感兴趣&#xff0c;请仔细阅读本篇文章。运行数据科学POC的7个步骤网上有很多依靠深度学习方法的NLP资源&#xff0c;有一些资源…

'umi' 不是内部或外部命令,也不是可运行的程序 或批处理文件或umi: command not found

1.#首先&#xff0c;需要安装Node.js &#xff08;一路下一步安装&#xff09;&#xff0c;并确保 node 版本是 8.10 或以上。&#xff08;mac 下推荐使用 nvm 来管理 node 版本&#xff09; #安装完成后&#xff0c;通过node -v 命令查看其版本号 node -v2.推荐使用 yarn 管…

库函数strcpy函数的实现

strcpy指的是字符串的拷贝&#xff0c;就是把源字符串拷贝到目标空间里面 1、源字符串的拷贝是是以‘\0’结尾的&#xff0c;同时会将字符串中的’\0’拷贝过去 #include<stdio.h> int main(){char arr1[20]"xxxxxxxxxxxxx";char arr2"hello world"…

机器学习和人工智能的初学指南

摘要&#xff1a; 作者自学机器学习和人工智能&#xff0c;站在一个初学者的角度来回顾这些经历并编写这篇适合初学者的指南。我自学过一年机器学习和人工智能&#xff0c;我认为初学者在该领域还没有一个学习的途径&#xff0c;这是我创建这个指南的目的。在过去的几个月里&am…

idle显示出错信息 python_原来学Python最好的书是这一本?它在bookauthority里排名第三...

有一本学Python的书&#xff0c;也许你还没有关注到&#xff0c;它在bookauthority的Python类目中排名第三&#xff0c;要胜过太多太多的Python书。那就是《Python编程快速上手 让繁琐工作自动化》。就它本身来说&#xff0c;这本书不会让你变成一个职业软件开发者&#xff0c;…