CS224n NLP-Lecture 1: Introduction/第一讲-NLP和深度学习入门
课件: lecture01(链接地址: https://download.****.net/download/qq_34243930/10982630 )
观看视频1(链接地址: https://www.bilibili.com/video/av41393758/?p=1 )
正巧在2017年,旧版的CS224d与旧版CS224n合并为新版CS224n,14课升级为18课,加量不加价,也算是给有心人的一种特典奖励吧。
新旧CS224对比
这门课在2016年之前叫做CS224d: Deep Learning for Natural Language Processing,之后改名为CS224n: Natural Language Processing with Deep Learning。从两者的命名来看,旧版“为自然语言处理准备的深度学习”似乎以深度学习为中心;新版“用深度学习进行自然语言处理”似乎更贴切一些。内容上的区别,除了新版多了4课之外,课程表上的“for某某NLP任务”也被去掉了。估计是不希望限制大家的想象力吧。实际上新版的内容是两门课程的合并:This course is a merger of Stanford’s previous cs224n course (Natural Language Processing) and cs224d (Deep Learning for Natural Language Processing).
那到底应该选择哪个版本呢?亲身体会一下不就知道了。我看完了旧版的第一课和新版的第一课,直观的印象是:旧版主讲人Richard Socher年轻有为,刚拿到PhD就已是领域内的超新星;新版主讲人是泰斗Chris Manning和Richard Socher,两人分别负责不同的章节。Manning在教学上经验更丰富,章节层次感强。虽然年纪大了,但授课激情不输给年轻人。更深刻的比较现在无法给出,毕竟我也没有完整学完两版课程。但个人还是偏好新版的课程;从另一个无关紧要的角度讲,旧版的课件是投影到幕布上再录制回去的,新版是直接穿插到视频中的;新版油管上有1080P的,而旧版只有720P的,当然新版好了。
什么是自然语言处理
这是一门计算机科学、人工智能以及语言学的交叉学科。虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部分。这个星球上有许多生物拥有超过人类的视觉系统,但只有人类才拥有这么高级的语言。
自然语言处理的目标是让计算机处理或说“理解”自然语言,来完成有意义的任务,比如订机票、购物或QA等。完全理解和表达语言是极其困难的,完美的语言理解等效于实现人工智能。
自然语言处理涉及的几个层次
作为输入一共有两个来源,语音与文本。所以第一级是语音识别和OCR或分词(事实上,跳过分词虽然理所当然地不能做句法分析,但字符级也可以直接做不少应用)。接下来是形态学,援引《统计自然语言处理》中的定义:
形态学(morphology):形态学(又称“词汇形态学”或“词法”)是语言学的一个分支,研究词的内部结构,包括屈折变化和构词法两个部分。由于词具有语音特征、句法特征和语义特征,形态学处于音位学、句法学和语义学的结合部位,所以形态学是每个语言学家都要关注的一门学科[Matthews,2000]。
下面的是句法分析和语义理解,即语义理解,得出句子含义。
但,仅仅知道句子中每个词语的含义不足以真正理解人类语言,许多含义是通过上下文来传达的,需要根据上文语境理解下文,这就引出了语用学和语篇处理等研究领域。
这门课主要关注画圈的部分,其中,中间的两个是重中之重,虽然深度学习在语音识别上的发力最大。
自然语言处理应用
从简单到复杂有:
1、拼写检查、关键词检索、搜索引擎联想同义词及类似你可能想查询的内容……
2、文本挖掘,我们希望计算机能够阅读文本信息、网站、报纸或其他来源。提取信息,从而充分理解文本。(例如产品价格、日期、时间、地点、人名、公司名)
3、文本分类(如判定文档的阅读难度、判断某条推文说的正面还是负面的消息)
4、机器翻译
5、构建口语对话系统
6、复杂QA系统
在工业界的应用
1、搜索(当你输入的词语后加上句号,搜索引擎会自动把它去除,如果有拼写错误,也会自动纠正,还会给出同义词建议等等。)
2、会根据搜索为你匹配广告
3、自动/辅助翻译
4、情感分析
5、语音识别
6、聊天机器人/管家(助手)等等五花八门。
人类语言的特殊之处
与信号处理、数据挖掘不同,大多数情况,只是处理数据,这都是针对一些随机数据,从中找出规律。
从本质上来说,人类语言并不是如此,人类语言并不是一堆海量数据,让你把它变成有用的信息,几乎所有的人类语言,都是某个人想要传递某个信息,他们为此构建了一条消息,来将信息传递给另一个人。这实际上是指向性明确的,讲某条具体消息传递给其他人。(自然语言的随机性小而目的性强)
语言是用来传输有意义的信息的,这种传输连小孩子都能很快学会(令人惊讶!)。人类语言是离散的符号系统。
我们有表示某些概念的词汇,例如火箭、小提琴,实际上我们是在用符号系统与他人交流。
但又允许出现各种变种,比如“I loooove it”比“I love it”听起来感情更强烈。这种自由性可能是因为语言的可靠性(赘余性),但99%的情况下,都是用这些符号来传递含义。
据推测这都是基于EE信息理论,他们可以非常可靠的进行远距离信息的传输。
所以说语言文字绝对不是形式逻辑或传统AI的产物。
你可以利用不同的连续载体来传递完全相同的信息。
语言符号有多种形式(声音、手势、书写),但在这些不同的形式中,其意义保持不变。
虽然人类语言是明确的符号系统,但符号传输到大脑的过程是通过连续的声学光学信号,大脑编码似乎是连续的**的模式。另外巨大的词表也导致数据稀疏,不利于机器学习。这构成一种动机,是不是应该用连续的信号而不是离散的符号去处理语言。
(哲学历史上的主导观点以及科学和人工智能史上的主导思想就是,将语言的符号体系映射到我们的大脑中,将大脑看成一组符号处理器。但是这看起来并不是大脑的构造基础,我们对大脑的所有认知就是,它们也是一套完全连续运作的系统,因此,深度学习领域产生的一个有意思的想法就是:我们也应该吧大脑想象成具有连续**的模式,这一图显示的就是,我们从连续到符号,再到连续。每次使用语言都是如此,它也指出了我们做语言理解的一个问题,每种语言至少有几万个单词,在语言中,词汇量都非常大,像英语这样的语言还有着巨大的科学词库,但不管怎么统计,都意味着我们已经有了稀疏的问题,这是我们要处理的一个大问题。)
什么是深度学习
深度学习是机器学习的一个分支。总体来说,基本的思想就是怎样让电脑自动学习,而不是人工教授,手工写代码。
深度学习和机器学习的核心区别就在于,对于大多数传统的机器学习,他们都是围绕着决策树,逻辑回归,朴素贝叶斯、支持向量机(SVM)等等这类概念,它的本质再与,我们所做的就是由人类来仔细审视一个特定的问题,人类需要对专业问题理解非常透彻,才能找出解决这个问题的关键要素,然后设计出与该问题相关的重要特征要素。比如地名和机构名识别的特征模板(如上图表格)。然后把特征交给某个机器学习算法(手工写代码,通常是一些Python的代码或类似的代码),比如线性分类器。机器为这些特征调整找到合适的权值,将误差优化到最小。
在这个过程中一直在学习的其实是人类,而不是机器。机器仅仅做了一道数值优化的题目而已。
下面这张图很好地展示了这个过程中的比例:
我们发现,机器学习在实际运用中,大约90%的工作是人类研究如何描述数据,总结出重要特征,只有约10%的工作是电脑运行这一学习算法(learning algorithm)
而深度学习是表征学习的一部分;
表征学习的理念就是,我们可以只向计算机提供来自外界的原始信号,无论是视觉信号还是语言信号,然后,计算机可以自动得出好的特征来很好的完成任务;
所以从某种意义上来说,它是在自己定义特征。
准确地说,深度学习算法试图学习多层特征。
用来学习原始输入的多层特征表示如下右图:
“深度学习”的历史
这门课,我们将着重讨论不同类型的神经网络,目前,他们肯定是一些主流方法,被实践证明了的成功的深度学习方法,但也不是唯一的选择。人们也尝试用其他各种方法,如概率模型,以及其他方法运用于深度架构中。
你会发现,这里有许多神经血术语,某些情况下,确实与神经科学有一定的联系。
统计学家会说,哦,不过是一些逻辑回归单元的堆砌而已。也许的确如此,但这还是以偏概全的说法(电子计算机还是一堆半导体的堆砌呢,大脑还是一堆神经元的堆砌呢)。人们目前所构建的网络架构,通过复杂的神经单元的不同堆栈,最终形成的行为和思维方式,与早期的统计学思维是完全不同的。
这门课不会回顾历史(像Hinton老爷子那样博古通今,感兴趣的可以去上图看这个论文),而只会专注当前在NLP领域大放异彩的方法。
为什么需要研究深度学习
1、手工设计的特征往往太过具体而且不完整,需要花费很长时间来设计和验证,而且最终只能达到一定的表现水平,还不易拓展
2、自动学习的特征适应性强,训练的快,方便拓展
3、深度学习提供了一种非常灵活、通用的学习框架,可用来表示各种类型的信息,世界信息、语言信息、视觉信息
4、深度学习既可以无监督学习,也可以监督学习
深度学习可追溯到八九十年代,但在2010年左右才崛起(最先是语音与图像,后来才是NLP),那之前为什么没有呢?
与Hinton介绍的一样,无非是以前数据量不够,计算力太弱。当然,最近也的确有许多新模型,新算法。
语音识别中的深度学习
深度学习zhenzheng意义上的第一个重大突破是语音识别。
语音识别已经经历了数十数百年人的研究,有一些大公司有非常标准化的技术,利用高斯混合模型进行声学分析,还有隐马尔可夫模型等等。人们努力了几十年,每年只能提高几个百分点的正确率。研究显示,当换用深度学习模型进行语音识别,文字识别错误率一下子大幅下降了,大约可减少30%的文字错误率。
突破性研究来自Hinton老爷子的学生,具体参考:http://www.hankcs.com/ml/hinton-deep-neural-nets-with-generative-pre-training.html#h3-11
计算机视觉中的深度学习
深度学习第二个巨大成功的例子。
当用GPU上运行的深度神经网络,降低了超过三分之一的误差,并在不断进步。
突破性研究还是来自Hinton的学生。
课程相关要求
课程主页:http://www.stanford.edu/class/cs224n/
有4次编程练习,会用到TensorFlow。
为什么NLP那么困难?
1、语言/情景/世界/视觉知识的表达、学习和使用的复杂性。
2、人类语言是模糊的,不像编程和其他正式语言。
3、人类语言的解读依赖于现实世界、常识以及上下文。
人类语言是充满歧义、模棱两可的,不像编程语言那样明确。编程语言中有各种规则,各种变量名,但人类语言中只有少数几个代词可以用,你得思考到底指代的是谁……
人类语言的解读依赖于现实世界、常识以及上下文。由于说话速度书写速度阅读速度的限制,人类语言非常简练,省略了大量背景知识。
接下来是几个英文的歧义例子,对native speaker而言很有趣。
1、The Pope’s baby steps on gays
结构歧义,可以理解为The Pope’s baby + steps on gays“教皇的孩子踩了同性恋”,也可以理解为The Pope’s baby steps + on gays“教皇在同性恋问题上裹足不前”。
2、 Boy paralyzed after tumor fights back to gain black belt
语言的模糊性。
Boy paralyzed + after tumor fights back to gain black belt
当肿瘤反击赢得黑带以后,小男孩瘫痪了。
Boy paralyzed after tumor+ fights back to gain black belt
男孩,在因肿瘤瘫痪后,与疾病抗争获得了黑带。
旧版CS224d里面还有个更直观的例子,推特上关于电影明星“海瑟薇”的评论影响了保险公司哈撒韦的股价,因为两者拼写是一样的。
说明某些“舆情系统”没做好命名实体识别。
Deep NLP = Deep Learning + NLP
将自然语言处理的思想与表示学习结合起来,用表征学习和深度学习的手法解决NLP目标。这提高了许多方面的效果:
1、层次:语音、词汇、句法、语义
2、工具:词性标注、命名实体识别、句法\语义分析
3、应用:机器翻译、情感分析、客服系统(聊天助手)、问答系统
深度学习的一个魅力之处是,它提供了一套“宇宙通用”的框架解决了各种问题。虽然工具就那么几个,但在各个领域广泛适用,以非常高的准确性解决各种问题。
word vector
我们将把某个词的含义用一个数字向量来表示。
一般至少会用25维向量。通常会用300维向量。
当我们有了单词的向量,这就意味着,我们将单词放在了高维向量空间中。我们会发现,当我们有了那些利用深度学习来学习单词向量方法,将单词放在了高维向量空间中,这些空间就成为了非常棒的语义空间,具有相似含义的词汇将在矢量空间中形成聚集块。不仅如此,我们会发现,向量空间中存在方向,他们会透露关于成分和意义的信息。
而人类的问题之一就是,人类不善于解读高维空间,所以不得不把它映射至二维或者三维空间,因此上图背景你可以看到一片单词云,这是一个单词向量空间的二维投影。
PCA,主成分分析法
t-SNE,一种常用的非线性降维
词的相似
与“青蛙”最相似的单词
因此,这些词义的向量是做研究很好的切入点。
NLP表示层次:形态学
传统方法在形态级别的表示是词语的组成部分:前缀+词干+后缀
深度学习(DL)中把词语的组成部分也作为代表单词部分含义的各个向量:需要做的,就是建立一个神经网络,将多个词素向量构成相同纬度语义更丰富的词向量。
NLP工具:句法分析(句子结构分析,发现句法停顿处)
Danqi Chen的A Fast and Accurate Dependency Parser using Neural Networks(PDF:https://download.****.net/download/qq_34243930/10991211 ) 她用神经网络进行依存句法分析,做的非常成功。她是这门课的TA。
NLP语义层面的表示(句子的含义)
传统方法是手写大量的规则函数,叫做Lambda calculus:
基于微积分的语义理论,对每个单词手动地赋予语义函数,然后用一个合理的算法,研究如何将词汇意义结合起来,获得一种语义表达。
我们的思路是,在深度学习中,每个句子、短语和逻辑表述都是向量。神经网络负责它们的合并。
情感分析
这是Richard曾经做过的一个项目,当时他是博士生,在做情感分析,他试着改进语义表征,更加严谨、真实的语义表征,能更好的理解句子中的正面和负面情绪。他的方法就是,搞清楚句子中哪些部分有不一样的含义。例如这句话:这部电影并不注重聪明、机智或任何其他类型的高级幽默。This movie doesn’t care about cleverness, wit or any other kind of intelligent humor.
系统可以非常准确的判断出这里有一堆积极的词汇,例如聪明,机智,高级幽默。但也是传统的情感分析习题容易出错的地方,它们会判断,这是一个积极地句子。但是神经网络系统会注意到这句话一开始说的是,doesn’t care 不注重…它会准确地判断这个句子的整体情绪是否定的。
传统方法是请一两百个工人,手工搜集“情感极性词典”在词袋模型上做分类器。
深度学习复用了RNN来解决这个问题,它可以识别“反话”的情感极性。
注意这只是为了方便理解的示意图,并不是RNN的工作流程。私以为这张图放在这里不合适,可能会误导一部分人,以为神经网络就是这样的基于规则的“决策树”模型。
QA
传统方法是手工编写大量的逻辑规则,比如正则表达式之类:
深度学习依然使用了类似的学习框架,把事实储存在向量里:
客服系统(聊天助手)
一个简单而成功的例子是谷歌收件箱应用程序中提供的自动回复(建议回复)功能。这是一个强大的、通用的神经语言模型技术的应用程序,它是一个循环神经网络的一个实例。
即运用循环神经网络(RNN)阅读消息,然后对信息提出三条建议回复
基于深度神经网络的语音识别系统表现的完美。
这是Neural Language Models的又一次成功应用,Neural Language Models是基于RNN的:
机器翻译
传统方法在许多层级上做了尝试,词语、语法、语义之类。这类方法试图找到一种世界通用的“国际语”(Interlingua)来作为原文和译文的桥梁。
而Neural Machine Translation将原文映射为向量,由向量构建译文。也许可以说Neural Machine Translation的“国际语”是向量。
Neural Machine Translation运用了一个大型的、深层的循环神经网络,它通过阅读源语句生成向量来代表已有的句子,当到达句子结尾,则开始在翻译过程中生成单词(这被称为一种神经语言模型)。
结论:所有层级的表示(声音,词的部分,单词,句子,对话…)都是向量。
你可能认为在这样庞大的数字向量中没有结构,但我们可以将向量变形,变成一个矩阵或者更高阶的阵列,我们称之为Tensor。我们可以说向量的不同部分或不同方向,代表不同的信息,这实际上是一个非常灵活的数据结构。
这可能是因为向量是最灵活的形式,它的维度是自由的,它可以组合成矩阵,或者更高阶的Tensor。事实上,在实践的时候向量和矩阵没什么本质区别,经常看到为了效率或单纯的美观而pack成矩阵unroll成向量的操作。