【Stanford CS224N NLP】小白也能看懂的词向量介绍

Stanford CS224N NLP课程头两个视频的个人学习总结,尽量用通俗易懂的语言解释word vector的概念(之后可能会更新公式和代码)。不需要神经网络的知识也可以看懂。

待补充:

  1. Word2Vec的训练方法(包括负采样和hierarchical softmax)
  2. 公式和计算
  3. 作业和代码

词向量(Word Vectors)

自然语言处理(NLP)的一个首要问题就是:如何把自然语言中的词语表示成计算机易于接受和处理的形式。首先我们考虑将词语表示成一串由0和1组成的数字,也就是一个词向量。用最简单的形式表示不同的词语,也就是每个词在一个位置是1,其他位置都是0。如下图的两个词。
在这里插入图片描述

劣处:

  1. 显而易见的是每增加一个词就要多一个维度,那么我们的词典有多少个词,这个01串就会有多长(=词向量的维度就有几维)。实际应用中可能达到50,000维。
  2. 无法体现词与词之间的相关性:我们希望意思相近/相关联的词语,在它们的词向量表达中也可以体现得比较像,具体就是它们的数量积(即点乘,结果是一个向量和它在另一个向量上的投影的长度的乘积)比较大。但是这种情况下所有向量都是相互正交的,即任何两个不同向量的数量积都为0。

因为有这两个问题,这种表达在实际应用中是几乎不可行的。

我们采用一个方法叫Distribution Semantics对词向量进行改进。Distribution的意思是分布式,Semantics的意思是语义学。别看这两个单词很高大上,它的实际意思就是说,让一个词的上下文来解释它。比如我说:”饭后我吃了一个苹果,特别多汁。“ 那么想要理解”苹果“这个词,就用它的上下文理解它:

  1. 它是一个可以吃的东西。
  2. 它是一个多汁的东西。

那么计算机读入这句话的时候是如何做到这样的”理解“的呢?主要分为两种主流方法,一种是Word2Vec(基于神经网络学习),一种是共现矩阵分解(基于计数统计)。这两种方法都可以把词向量压缩到合适的维度(通常是25~1000维,其中100维的效果就已经比较好了,重要论文中300维是比较常用的)。

Word2Vec(基于神经网络)

首先我们理解窗口的概念。它代表神经网络可以看到的上下文长度。假设窗口长度为2,那么对于apple这个单词,如果输入了” “这句话,那么当中心词(center word)是apple时,神经网络可以看到左边2个单词”ate an“和右边2个单词”after lunch“。

核心框架

Word2Vec的两种核心框架是skip-gram和CBOW。

Continuous Bag of Words(CBOW): 基于上下文单词预测目标单词

CBOW模型通过上下文单词预测目标单词,还是以这个句子为例,窗口大小为2意味着模型会考虑到"apple"左右各两个单词的上下文,即{“ate”, “an”, “after”, “lunch”}。神经网络的输入是这四个上下文单词的词向量的平均值(或者加权平均等组合形式),输出则是预测的目标单词"apple"的词向量。

在这里插入图片描述

如果只用这句话训练"apple"的词向量,那么该词向量就会是上下文单词的均值。但是apple还会在其他的句子中出现,神经网络会帮助我们考虑所有apple的上下文,最终得到它的最优词向量。

如何衡量"apple"词向量的效果:

  1. 语义相似性:语义与"apple"接近的词,词向量和它应该也相似(=词向量空间中两个词向量接近=数量积较大),例如"fruit"、"banana"等。
  2. 语法正确性:词向量应该能够捕捉到"apple"在语法结构中的常见使用方式,例如常常与"eat"搭配。
  3. 任务效果:在实际的自然语言处理任务中,该词向量能否提升任务的表现。

Skip-grams(SG): 基于目标单词预测上下文单词

Skip-gram方法是基于目标单词预测上下文单词的。还是以这个句子为例,窗口大小为2意味着模型会考虑到"apple"左右各两个单词的上下文,即{“ate”, “an”, “after”, “lunch”}。神经网络的输入是中心词"apple"的词向量,输出则是每个上下文单词(“ate”, “an”, “after”, “lunch”)的词向量。

在这里插入图片描述

可想而知,词向量”apple“作为中心词的时候,它的词向量不会改变(skip-gram的意思就是这个窗口中,apple这个词的训练实际上被跳过了)。反过来,只有当"ate", “an”, “after”, "lunch"作为中心词的时候,”apple“才会受到它们的影响。这个含义上其实和CBOW是一致的。

Word2Vec的训练方法

包括负采样和hierarchical softmax(此章节待补充)。

共现矩阵分解(基于计数矩阵)

得到词向量的方法除了Word2Vec以外,还有共现矩阵分解方法。(这里word2vec的名字虽然看起来表示的就是词语->向量,但它特指的就是基于神经网络的那种方法,不包括共现矩阵方法)

以下内容来自本课程的作业1笔记(这篇难产了,之后发了会补个链接在这)。

知识点讲解:共现矩阵

举个简单的例子,输入以下两个句子,并且窗口大小为1时,会得到这样一个共现矩阵

Document 1: “all that glitters is not gold”

Document 2: “all is well that ends well”

在这里插入图片描述

啥意思呢,可以看glitter这一行,有两个1,代表glitter附近有that和is两个单词。句子1中,以glitter为中心,往左右各走一步(窗口大小),就是这两个单词了。

如果窗口大小为2,那么这行的all和not两列也要变成1。

再看all这行,句子1中all的左边是句子开头<start>,右边是that,句子2中的左边还是句子开头<start>,右边是is,所以<start>记为2,that和is各自记为1。

注意:

  1. 共现矩阵是对称的。这很好理解,无论窗口长度多少,若单词a的窗口里有单词b,则它们之间的距离肯定不超过窗口长度,那么b的窗口里也一定有单词a。
  2. 句首和句尾分别用<start>和<end>表示,需要计入共现矩阵。
  3. 窗口大小是一个超参数,可以是几个词,也可能是五十个词及以上。窗口越大越能捕捉远处的语义关系,但开销也更大。具体效果要根据实际任务决定。

共现矩阵的每一行/每一列就是我们需要的词向量了。这种表示的核心是用一个词周围的词来刻画它。(个人理解:比如apple和peach都会出现在 I eat apple,I eat peach,The apple is juicy,The peach is juicy这样的句子里。那么它们的向量就很可能包含eat和juicy,相当于在说这两个东西都是可以吃的并且很juicy的东西,这样apple和peach就有了我们需要的相似性)

知识点讲解:SVD(奇异值分解)

共现矩阵得到的词向量可能非常非常长,毕竟一个单词旁边的词可能很多。可以使用SVD来降低共现矩阵的维度(也就是行数列数变少,矩阵变小),这样词向量自然就变短了。

SVD(Singular Value Decomposition)属于线性代数和数值分析的内容。中文翻译是奇异值分解,其中Singular Value指的是矩阵的奇异值。我目前不太会这个,notebook里面提供了以下SVD相关的资料,之后研读:

​ Stanford的课程:l7.pdf (stanford.edu) l8.pdf (stanford.edu) l9.pdf (stanford.edu)

​ (据说是)小白友好的教程:Singular_Value_Decomposition_Tutorial.pdf (davetang.org)

总之,SVD的结果是把上面的共现矩阵分解成了两个矩阵:奇异值矩阵S(是对角矩阵,即只有左上到右下的对角线上的值不是0),以及降维后的词向量矩阵Uk。新的词向量还可以保留原来的特征,比如doctor和hospital之间的距离比doctor和dog之间的距离近。Uk 的每一行都是一个词向量,而奇异值矩阵 S 则评估了降维后的信息损失并保留的重要数据特征。

这里还涉及到一个超参数k。它代表选择保留最大的𝑘个奇异值。较大的k可以更好地保留原始数据的信息,但也可能导致过拟合或计算资源的浪费。较小的k则可能导致信息损失过多,影响模型的性能。一般k值为10~100。

SVD的实际操作推荐使用numpy, scipy, sklearn这些python包里面写好的功能。大的语料库上进行SVD的时候需要大量的内存进行运算,使用Truncated SVD等方法可以缓解。

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值