Focus, Follow, and Forward

Stanford CS224d 课程笔记 Lecture1

Stanford CS224d 课程笔记 Lecture1

Stanford大学在2015年开设了一门Deep Learning for Natural Language Processing的课程,广受好评。并在2016年春季再次开课。我将开始这门课程的学习,并做好每节课的课程笔记放在博客上。争取做到每周一更吧。
本文是第一篇。


NLP简介

NLP,全名Natural Language Processing(自然语言处理),是一门集计算机科学,人工智能,语言学三者于一身的交叉性学科。她的终极研究目标是让计算机能够处理甚至是“理解”人类的自然语言,进而帮助人类解决一些现实生活中遇到的实际问题。这里的语言“理解”是一个很抽象也很哲学的概念。在NLP中,我们将对语言的“理解”定义为是学习一个能够解决具体问题的复杂函数的过程。

对NLP的研究通常在5个Level上进行:

  1. 语音/文本分析:包括语言识别技术、OCR技术、分词技术等
  2. 词形分析:例如分析一个word的前后缀、词根等
  3. 语法分析:从语法结构上分析一个句子的构成
  4. 语义分析:理解一个句子或单词的语义
  5. 篇章分析:理解一段篇章的含义

注意,虽然这5个Level在研究的对象和难度上是一种递进的关系,但对这5个Level的研究并不一定是连续的——例如,我们可以跳过对一个句子语法结构的分析而直接去理解句子的语义。

接下来简单列举一些NLP技术的应用,以让大家对NLP能够处理什么样的问题有一个感性的认识:

  • 简单的任务:拼写检查,关键词检索,同义词检索等
  • 复杂一点的任务:信息提取(比如从网页中提取价格,产地,公司名等信息),情感分析,文本分类等
  • 更复杂的任务:机器翻译,人机对话,QA系统

最后讨论一个问题:Why is NLP so HARD?为什么要把NLP从机器学习的任务列表中单独抽取出来做为一门课程甚至是研究的对象?根本原因在于语言用于表达客观世界的内在复杂性和多义性。举一个简单的例子:"Jane hit June and then she [fell/ran]"。当she所伴随的动作不同(fell or ran),其所指代的对象也发生了变化(June or Jane)。这样的例子太多,显然我们无法通过枚举所有的规则来解决语言内在的复杂性。另一个多义性的例子是:"I made her duck"。我们可以理解为:"I cooked her a duck",或是"I curved her a wooden duck",也可以理解为:"I transformed her into a duck with some magic"。

Deep Learning简介

深度学习是机器学习的一个研究子领域。传统机器学习算法面临的一个问题是,模型的优劣往往很大程度上依赖于特征的选取。例如,对于一个NER问题(Named Entity Recognition,命名实体识别),传统的机器学习算法(如CRF)通常需要输入目标词的大小写特征,词性特征,以及其上下文环境里的词性分布等特征。人工挑选一组合适的特征是一件非常琐碎的活。此外,这些特征往往是data-specific,这意味着,在处理一份新的数据集,比方说是另一门语言的语料,你需要再一次坐下来审视这批数据,以挑选新的特征组合。

毫不夸张的说,在传统机器学习领域,90%的时间被用于数据的处理。算法和模型只是简单的权重优化。

而深度学习的魅力在于,她将特征的提取变成了一个自动化的学习过程。

深度学习是一类特征学习(Representation Learning)。她可以从原始数据(比如原始的像素点,原始的单词甚至是字符)中自动学习到多个层次上的特征表达,并完成最终的分类或翻译的任务。(这里的“深度”一词可能会带来歧义:例如对于我们下一节课将要学习到的word2vec模型。她其实是一个非常浅层的网络模型。)

神经网络家族是深度学习算法的主流模型。我们的课程也主要以介绍不同种类的神经网络及其在NLP领域中的应用为主。也许有人会问,神经网络不过是一组logistic regression单元的堆砌,为什么会有如此优异的特征学习的能力呢?原因在于,我们同时引入了一些基本的建模原则,比如端对端的训练机制。这些指导性原则可以帮助神经元更好地从最终结果中学习到原始输入的特征。此外,人工神经网络模型和神经科学里的脑模型也有着千丝万缕的联系。这些联系在NLP问题中不是那么明显,但在计算机视觉领域(卷积神经网络,CNN)扮演着很重要的角色。

为什么我们要采用深度学习模型对NLP问题进行建模?这是因为,与传统的机器学习算法相比,深度学习模型通常不需要特定领域的先验知识,因此可以快速高效地进行特征的学习。与此同时,深度学习提供了一套灵活通用的特征学习框架(适用于包括语音、文字、视觉信息在内的多种数据的学习)。最后,深度学习可以有监督或无监督地从大量原始语料中学习到有用的特征。

另一个有趣的问题是:考虑到神经网络并不是近些年才提出的新技术,为什么直到现在深度学习才突然被人们所关注呢?这主要得益于近些年大数据的兴起和高速CPU/GPU的发展。数据是深度学习的食物。而高性能的计算资源可以帮助深度学习更好地消化这些食物。当然,深度学习的发展也离不开一些新的模型算法的提出(比如end-to-end的模型框架,机器翻译中的attention机制等)。

最后,对深度学习的发展历史感兴趣的同学,可以进一步阅读这篇文献:Deep Learning in Neural Networks: An Overview

Deep Learning + NLP = Deep NLP

Deep Learning的技术首先是在语音识别和计算机视觉的领域里取得了重大突破,直到近些年才被广泛地应用于NLP领域中。接下来,我们简单看下深度学习模型是如何帮助解决NLP难题的 。

  1. 语音Phonology:
    传统的语音识别模型是通过人工建立一张语音词表,将相似发音的字母划分为一类;并借助一个分类模型实现语音到字母的转译。而深度学习模型将语音表达为一个embedding向量,可以直接从语音的向量特征中预测相应的单词。
  2. 词形Morphology:
    传统的词形学将一个单词拆分为前缀、词干、后缀的表达,这些前后缀和词干统称为Morpheme。而深度学习将每一个Morpheme都处理成一个向量的表达,并借助于一个Recursive Neural Network将不同的Morpheme向量拼接成一个向量——这个向量代表了相应的Morpheme拼接后得到的单词。
    这种将word表达成向量的思想在Deep NLP中十分基础。如果我们将这些词向量投影到一个二维平面上,会发现一些有趣的pattern。例如,相似的动词集中出现在平面的同一片区域内。
  3. 句法分析Syntax
    在得到了词的表达后,接下来我们讨论句子的结构。
    传统的句法分析将一个完整的句子解析成一棵语法树——每一个节点对应着一个特定的语法单元(例如,NP或VP)。而在深度学习中,我们可以对词向量进行计算,得到短语乃至整个句子的向量表达。并基于这些向量完成后续的分类预测等任务。
  4. 语义分析Semantics
    传统的语义分析借助于一种叫做Lambda Calculus的技术。基本思想是在一棵句法树上递归地调用人工事先设定的Lambda函数进行语义的计算。而在深度学习中,同样地,我们对每一个单词,每一个短语,乃至每一个逻辑关系(比如A∈BA∈B)都用一个向量去表达。借助于神经网络的计算,我们可以准确地预测两个句子之间的逻辑关系(例如,if "all reptiles walk" then "some turtles move")。有趣的是,在深度学习中,我们并不需要事先指定"reptiles"和"turtles","walk"和"move"之间的逻辑关系。

可以看出,与传统的NLP技术相比,Deep NLP核心思想在于 :everything can be a vector。无论是low level的音频,还是high level的短语。深度神经网络模型将低level的vector组装成更高level的vector,进一步完成分类、翻译等高级任务。


本节课的内容不多,主要是对NLP和深度学习技术的一个概要性介绍。下一节课,我们将开始学习计算word vector的几种常用模型。

 

Deep Learning for Natural Language Processing1的更多相关文章

  1. Deep Learning Libraries by Language

    Deep Learning Libraries by Language Tweet         Python Theano is a python library for defining and ...

  2. Deep Learning for Nature Language Processing --- 第四讲(下)

    A note on matrix implementations 将J对softmax的权重W和每一个word vector进行求导: 尽量使用矩阵运算(向量化).不要使用for loop. 模型训练 ...

  3. Transformation-Based Error-Driven Learning and Natural Language Processing: A Case Study in Part-of-Speech Tagging

    http://delivery.acm.org/10.1145/220000/218367/p543-brill.pdf?ip=116.30.5.154&id=218367&acc=O ...

  4. (转) Deep Learning Resources

    转自:http://www.jeremydjacksonphd.com/category/deep-learning/ Deep Learning Resources Posted on May 13 ...

  5. (转) Awesome Deep Learning

    Awesome Deep Learning  Table of Contents Free Online Books Courses Videos and Lectures Papers Tutori ...

  6. 机器学习(Machine Learning)&深度学习(Deep Learning)资料

    <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...

  7. Deep learning的一些教程 (转载)

    几个不错的深度学习教程,基本都有视频和演讲稿.附两篇综述文章和一副漫画.还有一些以后补充. Jeff Dean 2013 @ Stanford http://i.stanford.edu/infose ...

  8. 机器学习(Machine Learning)&深入学习(Deep Learning)资料

    <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost 到随机森林. ...

  9. 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

随机推荐

  1. Activiti+oracle 启动项目时不能自动建表或更新表的问题分析及解决办法

    现象描述:按照正常配置,第一次启动时不能自动建表 关键配置片段如下: <bean id="processEngineConfiguration" class="or ...

  2. 流程控制 - PHP手册笔记

    脚本由语句构成,语句靠流程控制实现功能,这一节主要介绍了几个关键字的使用. elseif elseif和else if的行为完全一样,如果用冒号来定义if/elseif条件,那就不能用两个单词的els ...

  3. flask-script 安装问题

    > 昨天开始看 flask,第二章最后提到使用 Flask-Script 支持命令行选项,但是用书上的方法安装却出现了问题. 错误信息: 注意最后两行: Could not find a ver ...

  4. iis 回收工作进程时出错的解决办法

    第一种解决方案: iis6系统默认的工作进程回收时间是29个小时有很多问题是在回收工作进程后出现很多问题如典型的500错误等经过我做服务器的一段时间的观察大家可以不用回收工作进程而是把应用程序池的最大 ...

  5. 如何让FPGA中的SPI与其他模块互动起来

    在上一篇文章<FPGA的SPI从机模块实现>中,已经实现了SPI的从机模块,如何通过SPI总线与FPGA内部其他模块进行通信,是本文的主要讨论内容. 一. 新建FPGA内部DAC控制模块 ...

  6. uva12096 The SetStack Computer By sixleaves

    代码     typedef  map<Set,  vector<Set> Setcache;                  stack<               ci ...

  7. poj 2425 A Chess Game_sg函数

    题意:给你一个有向无环图,再给你图上的棋子,每人每次只能移动一个棋子,当轮到你不能移动棋子是就输了,棋子可以同时在一个点 比赛时就差这题没ak,做了几天博弈终于搞懂了. #include <io ...

  8. API经济产业

    技术大咖为我们铺好了前进道路,我们为什么还要敬而远之舍近索远呢?充分利用开源,利用API进行App有效整合. 为应用添加日志功能,Loggly; 为应用添加用户管理和身份认证模块,Stormpath; ...

  9. IOS开发之——获取屏幕的尺寸及各模拟器代表的型号

    获取屏幕尺寸 [[[UIScreen mainScreen] currentMode].size.width]; [[[UIScreen mainScreen] currentMode].size.h ...

  10. [week1]每周总结与工作计划

    实在不想说这句俗话,因为实在太俗了.但是俗话说,“吾日三省吾身”,我虽然难以做到每天反省那么多次,但是每周来一次就很不错了.于是我决定: 从这周开始准备每周都写每周总结与工作计划. 很好,就这样说定了 ...