超级干货:Word2Vec课堂笔记(内附教学视频)

超级干货:Word2Vec课堂笔记(内附教学视频)

这篇笔记是我记录在学习了香港理工大学在读博士生小S李嫣然在集智俱乐部所开设的【自然语言处理与深度学习系列课程】第一节课。课程视频请点击:Word2Vec: 词向量技术的基础与模型 - 深度学习与自然语言处理1

Word2Vec是目前基于深度神经网络的自然语言处理方法的基础,它可以为每一个单词计算得到一个向量表示。当进行句法翻译等高级自然语言处理任务的时候,这些向量表示可以作为神经网络的输入信息。

本课程主要内容包括:

  • 词嵌入问题:为什么要研究词嵌入,以及目前词嵌入方法的分类,Word2Vec的简单历史。

  • Word2Vec介绍:Word2Vec是在2013年Google开发的一套词嵌入方法,它包含CBOW和Skip-Gram两种方法。目前,人们使用比较多的是Skip-Gram方法。

  • Skip-Gram:详细介绍了Skip-Gram的工作原理。进一步,课程介绍了什么是负采样(Negative sampling),它的目的是为了解决什么问题。

  • 课件下载:Word2Vec介绍

一、背景

传统自然语言处理的表达,一般以词为单位。自然语言字符表达成计算机能处理的信息,采取离散表达。假设有个词表,可以理解为字典,如何在这一万个字中表达这一个字。用一万维的向量表达这个字,某个字只可能在某一维地方为1,其他位置都为0。如下图所示:

这种方法特点:根据词表大小决定向量长度。很占空间,即使稀疏表示。缺乏泛化性(lack of generalization)。这种表示没法表达相似的概念。所以希望能够有一种方式计算这种泛化性,稠密向量。

“You shall know a word by the company it keeps.”--J.R. Firth(1957)基于同一种思想,生出很多方法,主要有两种假说。


假说一:The distributional hypothesis 分布式假说

一个词由周围词来推断。相似的词会出现在相似的语境里。例如今晚的天空有很多星星。句子中天空和星星相关,横向共现。这样,我们可以由词跟语境的关系来判断相似度,天空和星星就是想死的。BOW, LSI, LDA等模型都是由这种假说出发的,产生的很多种方法来计算这个实值向量。1954年BOW模型不考虑语序,出现一次加1。2003年LDA模型,是主题模型中的某一个特例。PMI/PPMI等方法都研究共现,相关词共同出现几次,然后再做SVD矩阵分解等。

假说二:Distributed models

相似词在相似语境contex下。例如今天天空有很多星星。今天天空有个太阳。这两个句子中的星星和太阳这两个词出现在了同样的上下文之中,它们是相似的,但它们是一种纵向的相似性。基于这种假说诞生的方法,最重要的就是这个Word2Vec。

因此,我们可以看到,对于这两种方法来说,两个词的相似性依赖于它们彼此所处的环境,而环境又有两种,一种是同一个句子之中,另一种是在不同句子,但是相似的上下文之中。

当然,我们要讲解的重点是Word2Vec。事实上,Word2Vec是由神经网络语言模型得到的一个副产物。这就是Bangio的那篇经典的论文:(Citation Query A Neural Probabilistic Language Model),文中提出了一种利用神经网络的方法来做自然语言理解的思路:

尽管这一框架本身并不实用,但是却包含了将单词进行向量编码的操作,而这却成为了后来词向量算法Word2Vec的前身。

于是,到了2013年Google的Mikolov提出了两套实用的算法,它们统称为Word2Vec。Word2vec 是代码项目的名字,只是计算词嵌入(word embedding)的一个工具,是CBOW和Skip-Gram这两个模型的合体,目前这套工具完全开源。。

如下图所示,左边的CBOW是利用词的上下文预测当前的单词;而Skip-Gram则是利用当前词来预测上下文。

二、Skipgram的原理

在这节课中,我们重点介绍后一种,即Skipgram,它的结构如图:


它的工作原理如下:

首先要有语料库和词库,大概词库需要包含所有语料库中的词,或者把没囊括的词encode成一个统一的值。如上图所示,每一个input都是一个1-hot编码的词。每一个output是一个概率Vector表示Vector位置上的词出现在当前output位置的概率,Vector的位置和input的词的位置相符。

举个例子吧,如果有这样一个词序列 (我爱中国)那么就会有四个1-hot 编码的输入向量: 1000, 0100,0010,0001。这就是可能的CBow模型的输入,假设我们当前的输入是0100,也就是“爱”这个字。

再来看输出,假如我们希望预测“爱”这个词的上下文,,比如说取前后各一个。

那么就会有两个output,刚才说了每个output是一个概率Vector, 假设这两个output Vector是(0.3, 0.5, 0.7,), (0.1,0.9,0.1)。第一个(0.3,0.5,0.7)中的数字表示的就是“我”出现在“爱”之前一位的概率是0.3, “爱”出现在“爱”之前一位的概率是0.5, “中国”出现在“爱”前一位的概率是0.7。同样,后一个向量(0.1,0.9,0.1)则表示“我”出现在“爱”之后的概率是0.1,“爱”出现在“爱”之后的概率是0.1,……。


这样的话,只要我们给定了一个词,整个CBow网络就可以得到这个词上下文中各个词出现的概率,我们用蒙特卡洛模拟的方法根据哪些概率值去采样,就能得到一个具体的上下文。

如果这部分理解了,那么我们就可以有一个优化的目标了,就是使得这一系列的Output Vector最接近真实的情况。所谓真实的情况就是机器通过随机采样得到的序列能够逼近真实的人类语言序列。也就是说在收集的大量文本数据中,对于“爱”这个词,之前(第一个Vector)出现“我”,之后出现“中国”的次数如果足够多,那么我们的模型预测这两个词的概率也应该足够大,这就是所谓的极大似然原理(maximum likelihood principle)。

这样,Input 、 output优化目标都有了,那么通过一系列复杂的公式,以及参照上图,就会得到两个参数W和W’。 W我们可以简单的理解为词向量,也就是说这样的形式:

  • 我 (0.9,-0.2,0.1)

  • 爱 (0.8, 0.2,0.2)

  • 中 (0.1, 0.3,0.4)

  • 国 (0.2, 0.3,0.6)

那么这一系列的复杂运算是怎么做的呢?答案就在于优化。我们让训练这个网络的最终目标就是去根据当前词来优化预测出它的上下文的概率,于是,我们就可以写出目标函数:

其中,T是语料库单词的总个数,p(wt+j|wt)是已知当前词wt,预测周围词的总概率对数值。
(1)一个 tips: 这里值得注意的不是函数本身,因为之所以在目标函数中用对数,完全是为了计算方便,值得注意的是第二个求和号的下标,需要在第 j 个词的左右分别有 c个词。
这里,概率的计算方式如下:

(2)再来一个 tips:这里无论是 v 还是 v’对应的都是向量,维度是 v-dim,因此这里的乘法是向量乘法。而后,我们依然可以采用反向传播等方式计算。

三、负采样

然而,在实际的计算过程中,运算量过于巨大,于是人们就像出了一个绝妙的解决办法,从而快速地完成任务。这种方法就被称为“负采样”(Negative sampling)。 负采样的核心思想是,如果将自然语言看作是一串单词的随机组合,那么它的出现概率是很小的。于是,如果我们将拼凑的单词随机组合(负采样)起来将会以很大的概率不会出现在当前文章中。于是,我们很显然应该至少让我们的模型在这些负采样出来的单词组合上面出现概率应该尽可能地小,同时要让真正出现在文中的单词组合出现概率大。这样我们的模型才足够有效。于是,我们的目标变成了优化新的概率函数:

,从而得到最优的词向量嵌入。这里D是出现在文章中的那些单词组合,Dbar是所有的未出现的,但是由机器生成的随机单词组合。Theta则是包含词向量的待优化参数。 实验证明,采用了新的目标函数以后,我们整个计算过程会非常快,而词向量嵌入的效果也很好。

四、联想:与统计物理的联系

从第一次课程对 word2vec 的“前世今生”的剖析我们似乎可看出:这是一个工业界至少是实验室的 project 中很好用的工具,它的原理已经很清楚。但是,关于 word2vec 或者 说关于 distributed representation 可以做的工作远远没有结束,尤其是从统计物理的角度而言。 第 I 部分的最后一个 tips 中我简单提到如果把分母都理解成配分函数的话, word2vec 与 RBM 的关系就更加清楚了。


下面我将用一部分的文字更加详细的说明。因为,与 RBM 的联系,远远不限于配分函数。我看到 distributed representation 的第一反应,就是和统计物理及机器学习等都密 切相关的 representation learning。 事实上,Bengio 在 2013 年发表的 review:《Representation Learning: A Review and New Perspectives》中就已经指出了基于能量的模型 Boltzmann machine 和 Restricted Boltzmann machine 与 appropriate objectives for learning good representations 之间千丝万缕的联系。


人们为了研究 representation 的种种训练算法,以得到更好的语言模型,很多工作都已经开展。例如,为了建立 deep representations, Hinton 和学生在 2009 年就研究了 Deep Boltzmann Machine(DBM),这里所提到的 Boltzmann Machine(BM) 与上文说到的RBM 一样,都是一个基于能量的模型,甚至可以说 RBM 是 BM 的一个特例:因为它们两个都是两层神经网络,但是 BM 是层间和层内都全连接,而 RBM 是层内无连接,层间全连接。下图展示了 RBM 的网络模型结构。

RBM 的网络结构

这里,W 是连接隐藏层和显层之间的权值矩阵。

当然,当年也是 Hinton 等人为了训练 RBM 并提出了 CD-k 算法,当然,这是另外一个内容了。至于文献中常常能看到的 Deep Belief Networks (DBNs)和 DBM 一样,都是基于 RBM 的一种扩展。这里,我们主要讲 distributed representation 和 RBM 的关系,至于 DBN 和 DBM,留下节课的课后作为脑洞分别说明。

通过上面的整理我们看出,无论是 word2vec 训练过程中的目标函数,还是目前工业界多用于分类的 RBM(当然包括 DBN,DBM),还是 planted 自旋玻璃模型,最后都可以归结到统计推断问题上面来。所以,是不是可以将大家的分析方式进行相互借鉴?将统计物理中求解配分函数的方式用到(1)式中,而将这里的负采样的想法用到配分函数的数值模拟中,当然,这里,如果定义“负”才是问题的核心。

参考资料

Deep Learning in NLP (1)Efficient Estimation of Word Representations in Vector SpaceFrom Frequency to Meaning: Vector Space Models of Semantics

这是一个自然语言与深度学习的系列课程,课程大纲如下:

    课程大纲

  • Word2Vec: 词向量技术的基础与模型 - 深度学习与自然语言处理1(免费试听)

    本课程介绍自然语言处理中的基本工具:Word2Vec,它的历史渊源、原理、架构以及实现技术。 主要内容包括: 词嵌入问题:为什么要研究词嵌入,以及目前词嵌入方法的分类,Word2Vec的简单历史。


  • 1、Word2Vec介绍:Word2Vec是在2013年Google开发的一套词嵌入方法,它包含CBOW和Skip-Gram两种方法。目前,人们使用比较多的是Skip-Gram方法。

  • 2、Skip-Gram:详细介绍了Skip-Gram的工作原理。

  • 3、进一步,课程介绍了什么是负采样(Negative sampling),它的目的是为了解决什么问题。 (课时:84分钟)

  • Word2Vec: 编码与实践-自然语言处理与深度学习2

    Word2Vec是Google推出的一种实现单词的向量化表示的重要方法。本节课主要介绍如何用编码来使用Word2Vec,包括Google版本的Word2Vec。 (课时:50分钟)


  • 词嵌入的相关问题 - 自然语言理解与深度学习3

    本节课继续讨论词嵌入问题,除了Word2Vec方法以外,我们还介绍了其它的各类词嵌入方法,如GlovVe,并与Word2Vec方法做了比较。 (课时:50分钟)


  • 神经网络基础- 自然语言理解与深度学习4

    本课程将介绍神经网络模型中的一些基本知识,包括神经元模型、反向传播算法、优化求解方法等等。 (课时:76分钟)


  • RNN在自然语言处理中的应用-自然语言理解与深度学习5

    本节课主要讲述循环神经网络(Recurrent Neural Networks, RNN)的基本原理,并简略介绍了 RNN 在自然语言处理中的若干应用。 (课时:80分钟)


  • 自然语言中的RNN实战 - 自然语言理解与深度学习6

    这是一节自然语言处理的实战课程,主要内容包括目前主流深度学习框架介绍和古诗词生成的模型实现这两部分。 (课时:68分钟)


  • 自然语言处理中的卷积神经网络 - 自然语言处理与深度学习 7

    卷积神经网络(Convolutional Neural Network,简称)是一种在图像中常用的深度学习网络架构。然而,CNN也可以应用在自然语言处理的任务中。本讲座的内容包括:自然语言处理中的CNN的特点、CNN的工作原理以及自然语言处理中的CNN模型变种和改进 (课时:60分钟)


  • 情感分析 - 自然语言处理与深度学习8

    为什么文章和马伊琍事件会影响伊利股份的股票价格大起大落?如何根据对产品的评价就知道顾客是否喜欢它?答案是:智能情感分析系统。本讲座将详细解读什么是情感分析,如何用深度学习的方式解决它。 (课时:58分钟)


  • 机器翻译 - 自然语言处理与深度学习9

    2016年九月份,Google发布了最新的机器翻译系统GNMT,该系统已经非常接近人类的翻译水平了。本节课将全面解读GNMT的架构。


  • 内容包括:(1)编码-解码器系统:Encoder-Decoder目前已经成为自然语言处理、图像分析等多种机器学习任务的主流框架。它使得完全自动化、端到端(End2End)的机器翻译系统成为了可能,省去了大量繁琐的中间处理环节和人工特征工程;

  • (2)注意力机制:注意力机制(Attention mechanism)不仅可以大大提高机器翻译的准确度,而且具有非常广泛的用途,包括图像标注、视频标注、阅读理解等;

  • (3)残差网络:残差网络(Residual network,简称ResNet)是2015年提出来的一种神经网络设计机制,通过实现跨层次的连边,转换训练目标为残差函数,就可以使得我们更加有效的让神经网络实现收敛,并大大提高深度神经网络的深度。本课详细讲解了每一种机制提出的背景和实际用途。 (课时:105分钟)

  • 自然语言生成 - 自然语言处理与深度学习10

    自然语言生成是自然语言处理领域中一个非常热门的研究课题,本讲座对对话生成系统做了一个比较全面详细的综述。


  • 课程内容包括:回顾了语言生成的发展简史;

  • 主流框架:讲解了基于编码-解码(Encoder-decoder)框架的端到端(End2end)架构,以及对其的改进:可变编码-解码(Variational encoder-decoder)方法、可变自编码(Variational autoencoder)方法;

  • 常见问题:介绍了目前对话系统中的一些常见问题,例如语义漂移、高频模式、文不对题等,以及相应的解决方案,如混合生成策略;谷歌对话系统Allo架构:刨析了Google对话系统Allo的架构。 (课时:84分钟)

  • 记忆与记忆网络 - 自然语言处理与深度学习11

    本次课程介绍了神经图灵模型,着重于各种寻址方式。另外,还对memeory network模型做了介绍,并对它与神经图灵机进行了比较。最后,针对从统计物理的视角如何看待记忆的问题进行了讨论。 (课时:90分钟)


李嫣然@李嫣然 最新的课程:打造你自己的聊天机器人还在报名中,别错过,不然后悔的话我也没法帮你。

编辑于 2017-06-30 13:13