cs224n课程及NLP相关知识记录

目录

前言

一.L1(NLP及深度学习)

  1.什么是自然语言处理NLP?

①自然语言处理涉及的几个层次

②自然语言处理应用

③人类语言的特殊之处以及使用深度学习而不是机器学习与NLP结合的原因

2.什么是深度学习?

①为什么需要研究深度学习

②深度学习的应用场景

3.为什么NLP难

4.深度学习和NLP的结合

①NLP表示层次:形态级别

②NLP语义层面的表示

③与传统机器学习应用场景下的实例对比

二.L2(词向量)

1.计算机对词语意思的处理

①discrete representation的问题

②从symbolic representations到distributed representations

③Distributional similarity based representations

④词嵌入Word Embedding和词向量

2.word2vec

①CBOW 模型

②Skipgram(用中间词去预测窗口两侧的词)

③word2vec细节

④Softmax function(归一化处理):从实数空间到概率分布的标准映射方法

⑤损失函数及训练


前言

斯坦福大学CS224N课程是关于NLP的课程,笔者综合网络上出现的各种笔记和整理资料,在学习的过程中从个人的角度对课程知识点进行了如下整理。


一.L1(NLP及深度学习)

  1.什么是自然语言处理NLP?

这是一门计算机科学、人工智能以及语言学的交叉学科。虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部分。众多生物中只有人类才拥有这么高级的语言。

自然语言处理的目标是让计算机处理或说“理解”自然语言,以完成有意义的任务。

①自然语言处理涉及的几个层次

作为输入一共有两个来源,语音与文本。所以第一级是语音识别和OCR或分词(事实上,跳过分词虽然理所当然地不能做句法分析,但字符级也可以直接做不少应用)。

下面的是句法分析和语义分析,最后面的在中文中似乎翻译做“对话分析”,需要根据上文语境理解下文。

这门课主要关注画圈的三个部分,其中中间的两个是重中之重,虽然深度学习在语音识别上的发力最大。

②自然语言处理应用

文本分类;文本挖掘;知识图谱;关键词检索;机器翻译;聊天机器人……

③人类语言的特殊之处以及使用深度学习而不是机器学习与NLP结合的原因

与信号处理、数据挖掘不同,自然语言的随机性小而目的性强;语言是用来传输有意义的信息的,这种传输连小孩子都能很快学会。人类语言是离散的、明确的符号系统。但又允许出现各种变种,比如颜文字,随意的错误拼写“I loooove it”。这种自由性可能是因为语言的可靠性(赘余性)。所以说语言文字绝对不是形式逻辑或传统AI的产物。

语言符号有多种形式(声音、手势、书写),在这些不同的形式中,其意义保持不变虽然人类语言是明确的符号系统,但符号传输到大脑的过程是通过连续的声学光学信号,大脑编码似乎是连续的激活值上的模式。另外巨大的词表也导致数据稀疏,不利于机器学习。这构成一种动机,是不是应该用连续的信号而不是离散的符号去处理语言。

2.什么是深度学习?

这是机器学习的一个子集。传统机器学习中,人类需要对专业问题理解非常透彻,才能手工设计特征(人的年龄,职业,居住地,性别……)。然后把特征交给某个机器学习算法,比如线性分类器。机器为这些特征调整找到合适的权值,将误差优化到最小。在这个过程中一直在学习的其实是人类,而不是机器。机器仅仅做了一道数值优化的题目而已。整个机器学习过程中,90%的任务是由人类完成,机器只负责了优化部分,因此与“学习”其实相关不大。

而深度学习是通过机器对样本的训练来自动简历特征,而不是由人类指定。

①为什么需要研究深度学习

  • 手工指定特征耗时耗力,还不易拓展

  • 自动特征学习快,方便拓展

  • 深度学习提供了一种通用的学习框架,可用来表示世界、视觉和语言学信息

  • 深度学习既可以无监督学习,也可以监督学习

②深度学习的应用场景

语音识别+视觉

3.为什么NLP

人类语言是充满歧义的,不像编程语言那样明确。编程语言中有各种变量名,但人类语言中只有少数几个代词可以用,你得思考到底指代的是谁……

人类语言的解读依赖于现实世界、常识以及上下文。由于说话速度书写速度阅读速度的限制,人类语言非常简练,省略了大量背景知识。

接下来是几个英文的歧义例子,对native speaker而言很有趣。为了完整性只看一个:

The Pope’s baby steps on gays

主要歧义发生在baby上面,可以理解为“教皇的孩子踩了基佬”,也可以理解为“教皇在同性恋问题上裹足不前”。

4.深度学习和NLP的结合

将自然语言处理的思想与表示学习结合起来,用深度学习的手法解决NLP目标。这提高了许多方面的效果:

  • 层次:语音、词汇、语法、语义

  • 工具:词性标注、命名实体识别、句法\语义分析

  • 应用:机器翻译、情感分析、客服系统、问答系统

深度学习的一个魅力之处是,它提供了一套“宇宙通用”的框架解决了各种问题。虽然工具就那么几个,但在各行各业都适用。

NLP表示层次:形态级别

传统方法在形态级别的表示是词素,词素是比词低一级的单位,词是语言中能够独立运用的最小单位,是指词在句法结构中的地位和作用而言的。深度学习中把词素也作为向量,多个词素向量构成相同纬度语义更丰富的词向量。

NLP语义层面的表示

传统方法是手写大量的规则函数,叫做Lambda calculus,在深度学习中,每个句子、短语和逻辑表述都是向量。神经网络负责它们的合并。

③与传统机器学习应用场景下的实例对比

在对于句子的情感分析中:

传统方法是请一两百个工人,手工搜集“情感极性词典”在词袋模型上做分类器。

深度学习复用了RNN来解决这个问题,它可以识别“反话”的情感极性。

在QA系统中:

传统方法是手工编写大量的逻辑规则,比如正则表达式之类。

深度学习依然使用了类似的学习框架,把事实储存在向量里:

短信自动回复:

Google的收件箱系统运用深度学习与NLP结合,系统会自动给出几种针对邮件内容的回复内容。

机器翻译:

传统方法在许多层级上做了尝试,词语、语法、语义之类。这类方法试图找到一种世界通用的“国际语”(Interlingua)来作为原文和译文的桥梁。

而Neural Machine Translation将原文映射为向量,由向量构建译文。也许可以说Neural Machine Translation的“国际语”是向量。

综上:深度学习中所有层级的表示都是向量

二.L2(词向量)

1.计算机对词语意思的处理

过去几个世纪里一直用的是分类词典。计算语言学中常见的方式是WordNet那样的词库。比如NLTK中可以通过WordNet查询熊猫的hypernyms (is-a,上位词),得到“食肉动物”“动物”之类的上位词。也可以查询“good”的同义词——“just品格好”“ripe熟了”。

①discrete representation的问题

  • 这种discrete representation(离散表示)虽然是种语言学资源,但丢失了韵味。比如这些同义词的意思实际上还是有微妙的差别:adept, expert, good, practiced, proficient, skillful

  • 缺少新词

  • 主观化

  • 需要耗费大量人力去整理

  • 无法计算准确的词语相似度

无论是规则学派,还是统计学派,绝大多数NLP学家都将词语作为最小单位。事实上,词语只是词表长度的one-hot向量,这是一种localist representation(大概是借用localist“局部”的意项)。在不同的语料中,词表大小不同。Google的1TB语料词汇量是1300万,这个向量太长了。

②从symbolic representations到distributed representations

词语在符号表示上体现不出意义的相似性,比如Dell notebook battery size和Dell laptop battery capacity。而one-hot向量是正交的,无法通过任何运算得到相似度。不同的词语即使意思相近,它们的one-hot向量也并不会体现出任何相关性。因此需要找到一种用向量直接编码含义的方法。

③Distributional similarity based representations

语言学家J. R. Firth提出,通过一个单词的上下文可以得到它的意思。J. R. Firth甚至建议,如果你能把单词放到正确的上下文中去,才说明你掌握了它的意义。这是现代统计自然语言处理最成功的思想之一。

④词嵌入Word Embedding和词向量

第一种一般认为是one-hot表示法,第二种表征方法称之为词嵌入技术。词嵌入的基本想法就是将词汇表中的每个单词表示为一个普通向量,这个向量不像 one-hot 向量那样都是 0或者1,也没有 one-hot 向量那样长,大概就是很普通的向量,比如长这样:[-0.91, 2, 1.8, -.82, 0.65, ...]。这样的一种词汇表征方式就像是将词汇嵌入到了一种数学空间里面,所以叫做词嵌入,也就是一个特征向量。也就是说NLP采用“分布式表示”而不是“离散表示”。

2.word2vec

word2vec 是谷歌于 2013 年提出的一种 NLP 工具,其特点就是将词汇进行向量化,这样我们就可以定量的分析和挖掘词汇之间的联系。因而 word2vec 也是我们上面讲到的词嵌入表征的一种,只不过这种向量化表征需要经过神经网络训练得到。

通过单词和上下文彼此预测,word2vec 训练神经网络得到一个关于输入 X (中心词)和 输出 Y(上下文) 之间的语言模型,我们的关注重点并不是说要把这个模型训练的有多好,而是要获取训练好的神经网络权重,这个权重就是我们要拿来对输入词汇 X 的向量化表示。一旦我们拿到了训练语料所有词汇的词向量,接下来开展 NLP 研究工作就相对容易一些了。

word2vec 通常有两个版本的语言模型。一种是给定上下文词,需要我们来预测中间目标词,这种模型叫做连续词袋模型(Continuous Bag-of-Wods Model,CBOW),另一种是给定一个词语,我们来根据这个词预测它的上下文,这种模型叫做 skip-gram 模型。而且每个模型都有两种策略,本文为了减少篇幅,就介绍每个模型的一种主要策略。下面笔者就分别来详细介绍这两种 word2vec 模型:

两个算法:

  • Skip-grams (SG):通过中心词预测上下文

  • 连续词袋模型Continuous Bag of Words (CBOW):通过上下文预测中心词

两种稍微高效一些的训练方法:

  • Hierarchical softmax

  • Negative sampling

在本门课程中通过最简单也最低效的Naive softmax阐述原理。

①CBOW 模型

CBOW 模型的应用场景是要根据上下文预测中间词,所以我们的输入便是上下文词,当然原始的单词是无法作为输入的,这里的输入仍然是每个词汇的 one-hot 向量,输出 Y 为给定词汇表中每个词作为目标词的概率。

 

普通的基于神经网络的语言模型输出层一般就是利用 softmax 函数进行归一化计算,这种直接 softmax 的做法主要问题在于计算速度。尤其是我们采用了一个较大的词汇表的时候,对大的词汇表做求和运算,softmax 的分母运算会非常慢,直接影响到了模型性能。

②Skipgram(用中间词去预测窗口两侧的词)

skip-gram 模型的应用场景是要根据中间词预测上下文词,所以我们的输入 X 是任意单词,输出 Y 为给定词汇表中每个词作为上下文词的概率。可见 skip-gram 模型结构基本就是 CBOW 模型的翻转,也是一种普通的神经网络结构,同样也包括输入层、中间隐藏层和最后的输出层。继续以输入输出样本(Context(w),w)为例对 skip-gram 模型的三个网络层进行简单说明,其中假设 Context(w) 由 w 前后各 c 个词构成。(同样搬运了 peghoty 的图解内容)。

 

从左到右是one-hot向量,乘以center word的W于是找到词向量,乘以另一个context word的矩阵W'得到对每个词语的“相似度”,对相似度取softmax得到概率,与答案对比计算损失。

根据W和W~两个矩阵,可以发现同一个词有两个词向量,一个是作为中心词center word,一个是上下文context word的时候。

整个模型的参数是θ,即一个包含所有词语对应两个词向量的一个向量,所以n个词语对应的参数维度为2n。

③word2vec细节

目标函数定义为所有位置的预测结果的乘积:

要最大化目标函数。对其取个负对数,得到损失函数——对数似然的相反数:

这些术语都是相同的:Loss function = cost function = objective function。对于softmax来讲,常用的损失函数为交叉熵。

2.目标概率

o是输出的上下文词语中的确切某一个词语的索引,c是选取窗口的中心词的索引。u是对应的上下文词向量,v是词向量。

3.相似程度

一般使用两个词向量的点积来衡量两个向量的相似程度,两个向量越相似,其点积越大。

④Softmax function(归一化处理):从实数空间到概率分布的标准映射方法

指数函数可以把实数映射成正数,然后归一化得到概率。

softmax之所叫softmax,是因为指数函数会导致较大的数变得更大,小数变得微不足道;这种选择作用类似于max函数。

⑤损失函数及训练

两种版本的word2vec模型一般都采用SGD进行训练

猜你喜欢

转载自blog.csdn.net/cuguanren/article/details/125639969