Deep Learning for Natural Language Processing1
Stanford CS224d 课程笔记 Lecture1
Stanford CS224d 课程笔记 Lecture1
Stanford大学在2015年开设了一门Deep Learning for Natural Language Processing的课程,广受好评。并在2016年春季再次开课。我将开始这门课程的学习,并做好每节课的课程笔记放在博客上。争取做到每周一更吧。
本文是第一篇。
NLP简介
NLP,全名Natural Language Processing(自然语言处理),是一门集计算机科学,人工智能,语言学三者于一身的交叉性学科。她的终极研究目标是让计算机能够处理甚至是“理解”人类的自然语言,进而帮助人类解决一些现实生活中遇到的实际问题。这里的语言“理解”是一个很抽象也很哲学的概念。在NLP中,我们将对语言的“理解”定义为是学习一个能够解决具体问题的复杂函数的过程。
对NLP的研究通常在5个Level上进行:
- 语音/文本分析:包括语言识别技术、OCR技术、分词技术等
- 词形分析:例如分析一个word的前后缀、词根等
- 语法分析:从语法结构上分析一个句子的构成
- 语义分析:理解一个句子或单词的语义
- 篇章分析:理解一段篇章的含义
注意,虽然这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难题的 。
- 语音Phonology:
传统的语音识别模型是通过人工建立一张语音词表,将相似发音的字母划分为一类;并借助一个分类模型实现语音到字母的转译。而深度学习模型将语音表达为一个embedding向量,可以直接从语音的向量特征中预测相应的单词。 - 词形Morphology:
传统的词形学将一个单词拆分为前缀、词干、后缀的表达,这些前后缀和词干统称为Morpheme。而深度学习将每一个Morpheme都处理成一个向量的表达,并借助于一个Recursive Neural Network将不同的Morpheme向量拼接成一个向量——这个向量代表了相应的Morpheme拼接后得到的单词。
这种将word表达成向量的思想在Deep NLP中十分基础。如果我们将这些词向量投影到一个二维平面上,会发现一些有趣的pattern。例如,相似的动词集中出现在平面的同一片区域内。 - 句法分析Syntax
在得到了词的表达后,接下来我们讨论句子的结构。
传统的句法分析将一个完整的句子解析成一棵语法树——每一个节点对应着一个特定的语法单元(例如,NP或VP)。而在深度学习中,我们可以对词向量进行计算,得到短语乃至整个句子的向量表达。并基于这些向量完成后续的分类预测等任务。 - 语义分析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的更多相关文章
- Deep Learning Libraries by Language
Deep Learning Libraries by Language Tweet Python Theano is a python library for defining and ...
- Deep Learning for Nature Language Processing --- 第四讲(下)
A note on matrix implementations 将J对softmax的权重W和每一个word vector进行求导: 尽量使用矩阵运算(向量化).不要使用for loop. 模型训练 ...
- 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 ...
- (转) Deep Learning Resources
转自:http://www.jeremydjacksonphd.com/category/deep-learning/ Deep Learning Resources Posted on May 13 ...
- (转) Awesome Deep Learning
Awesome Deep Learning Table of Contents Free Online Books Courses Videos and Lectures Papers Tutori ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料
<Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...
- Deep learning的一些教程 (转载)
几个不错的深度学习教程,基本都有视频和演讲稿.附两篇综述文章和一副漫画.还有一些以后补充. Jeff Dean 2013 @ Stanford http://i.stanford.edu/infose ...
- 机器学习(Machine Learning)&深入学习(Deep Learning)资料
<Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost 到随机森林. ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】
转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...
随机推荐
- CDZSC_2015寒假新人(1)——基础 c
Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the wareho ...
- Python的tkinter和tkinter.messagebox应用-鼠标和键盘命令绑定
__author__ = 'Administrator' from tkinter import * import tkinter.messagebox class MainWindow: def b ...
- Android系统信息
前提:获取的都是AndroidMainfest.xml下的信息 一.PackageManager 负责管理所有已安装的App 二.ActivityInfo 封装了Mainifest中的<acti ...
- centos出现磁盘坏掉,怎么修复和检测。
当dmesg的时候,出现下面的信息说明磁盘有问题 Info fld=0x139066d0 end_request: I/O error, dev sda, sector 328230608 Buffe ...
- SQL Server 内存管理在64位时代的改变
64位机上 地址空间比以前大了去了.它引起的改变多了去了 1.MemToLeave这个词不存在了.因为SQL Server以不再做这种预留空间的事了,也就是说multiple page 想用多少就用 ...
- GO的GDB调试
GoLang语言,学了很久,一直觉得它单步调试有较多问题,最近才知道自已对它了解得太少了.原来GO语言对GDB的版本是至少为gdb7以上,才能比较好的打印任意变量,如果低于这个版本,则才会出一些问题. ...
- POJ 2892 Tunnel Warfare (SBT + stack)
题意:给定了初始的状态:有n个村庄连成一条直线,现在有三种操作: 1.摧毁一个村庄 2.询问某个村庄,输出与该村庄相连的村庄数量(包括自己) 3.修复被摧毁的村庄,优先修复最近被摧毁的........ ...
- VS2010启动奔溃
最近由于项目需要,装了git,需要用bitbucket管理源代码.没想到装了git得插件后 vs2010不能启动,卸载重新安装也行,修复也不行. 解决方案: 删除 目录C:\Users\用户名\App ...
- 常用的IO流
常用的IO流 •根据处理数据类型的不同分为:字节流和字符流 •根据数据流向不同分为:输入流和输出流 字节流:字节流以字节(8bit)为单位,能处理所有类型的数据(如图片.avi等). 字节输入流:In ...
- Java导出excel并下载功能
我们使用的导出并下载功能是利用一个插件叫POI的插件提供的导出功能,很实用:首先先导入Jar包: Jar包下载地址:http://poi.apache.org/ 官方文档地址:http://poi ...