PRML读书笔记——线性回归模型(下)

CS224N NLP with Deep Learning: Lecture 1 课程笔记

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 \in 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的几种常用模型。

2017/5/14 posted in  CS224n

PRML读书笔记——线性回归模型(上)

本章开始学习第一个有监督学习模型——线性回归模型。"线性"在这里的含义仅限定了模型必须是参数的线性函数。而正如我们接下来要看到的,线性回归模型可以是输入变量\(x\)的非线性函数。

书中首先对回归问题给出了一个简短的不那么正式的定义:

Given a training data set comprising \(N\) observations \(\{x_n\}\), where \(n = 1, ... , N\), together with corresponding target values \(\{t_n\}\), the goal is to predict the value of \(t\) for a new value of \(x\).

而解决这个问题有两种思路:一种是直接对\(x \rightarrow t\)的映射\(y(x)\)进行建模,类似判别式模型的建模思路;另一种则从概率的角度出发,首先建模预测变量\(t\)的条件概率分布\(p(t|x)\),然后通过最小化一个损失函数——对于实数变量通常是均方误差(squared loss)——给出\(t\)的一个最优估计:\(y(x)=E_t[t|x]\)。(注意区分这里的损失函数和用于参数回归的损失函数。)

特征选择中的常用指标

在特征选择中,有三类常用的指标:信息增益;信息增益率;和基尼系数。这些指标也是决策树算法的基础。现摘录这三个指标的定义如下:

  1. 信息增益(Information Gain)
    特征\(T\)为分类系统\(C\)带来的信息增益为:
    \[\begin{aligned}
    GainEntropy(T) &= Entropy(C) − Entropy(C|T) \\
    &= Entropy(C) − \sum_i{p(T_i)Entropy(C|T_i)} \\
    \end{aligned}\]
    其中,\(Entropy(C)\)为系统关于分类属性\(C\)的信息熵,定义了系统描述某一个分类所需要的平均信息量。计算公式为:
    \[Entropy(C) = -\sum_i{p(C_i)\log_2{p(C_i)}}\]
    \(Entropy(C|T_i )\)为固定特征\(T=T_i\)下系统关于分类属性\(C\)的条件信息熵,计算公式为:
    \[Entropy(C|T_i) = -\sum_j{p(C_j|T_i)\log_2{p(C_j|T_i)}}\]

Read more   2016/9/14 posted in  研究笔记-其他

word2vec前世今生

2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注。首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性。随着深度学习(Deep Learning)在自然语言处理中应用的普及,很多人误以为word2vec是一种深度学习算法。其实word2vec算法的背后是一个浅层神经网络。另外需要强调的一点是,word2vec是一个计算word vector的开源工具。当我们在说word2vec算法或模型的时候,其实指的是其背后用于计算word vector的CBoW模型和Skip-gram模型。很多人以为word2vec指的是一个算法或模型,这也是一种谬误。接下来,本文将从统计语言模型出发,尽可能详细地介绍word2vec工具背后的算法模型的来龙去脉。

Read more   2016/7/17 posted in  研究笔记-论文

AlphaGo原理解读

Read more   2016/5/16 posted in  研究笔记-论文

PRML读书笔记——机器学习导论

什么是模式识别(Pattern Recognition)?

按照Bishop的定义,模式识别就是用机器学习的算法从数据中挖掘出有用的pattern。

人们很早就开始学习如何从大量的数据中发现隐藏在背后的pattern。例如,16世纪的Kepler从他的老师Tycho搜集的大量有关于行星运动的数据中发现了天体运行的规律,并直接导致了牛顿经典力学的诞生。然而,这种依赖于人类经验的、启发式的模式识别过程很难复制到其他的领域中。例如手写数字的识别。这就需要机器学习的技术了。(顺便提一下,开普勒定律在物理学中只是一种唯象的理论,它只对物理事实抽象出概括性的描述,而没有解释内在的原因,也就是牛顿的万有引力定律(其实在更高的层次上,万有引力也是一种唯象的理论,它的解释由量子引力理论给出)。这也意味着,在大数据的机器学习时代,我们挖掘出来的知识更多的也只是一种相关性的规律。)

Nature Review: Deep Learning

如今,机器学习的技术在我们的生活中扮演着越来越重要的角色。从搜索引擎到推荐系统,从图像识别到语音识别。而这些应用都开始逐渐使用一类叫做深度学习(Deep Learning)的技术。

Read more   2016/5/14 posted in  研究笔记-论文