引言

本文是​​斯坦福大学CS224U:自然语言理解 2019公开课​​的读书笔记。

共生模型(co-occurrence patterns)下的潜在语义

自然语言理解——词向量(一)_ide

如下图,假设0代表消极语义,1代表积极语义

自然语言理解——词向量(一)_ide_02

假设你知道了这些单词的类别,需要你计算下面这个场景下单词所属类别的概率。

自然语言理解——词向量(一)_ide_03

这种情况下是很难计算出来的,但如果给了你下面这种带有两个特性(excellent和terrible)的情况。

自然语言理解——词向量(一)_自然语言理解_04

就很好计算了,比如单词自然语言理解——词向量(一)_词向量_05有很高的terrible值,那么就很有可能是消极的。

学习目标

  1. 开始思考向量是如何编码语言单位的语义的
  2. 对向量空间模型(vector-space model,VSM)有一个基础的认识
  3. 对深度自然语言理解模型有基础的认识
  4. 在项目中,你可能会用到下面这些表示:
  • 理解和对语言和社会现象建模,并
  • 作为其他机器学习模型的输入

强大丰富的可选项

如果你想设计一个自然语言理解模型,你的第一个选择是如何设计矩阵。

自然语言理解——词向量(一)_归一化_06

这里有很多可选范围。比如第一个是单词-文档矩阵。其中行代表某个单词,列代表某个文档,值代表单词出现在文档的次数。

但这些并不是你第一个要考虑的事情,其实在这个之前,你还需要分词、(语料库)标注、词性标注、(句法)分析和特征选择等等。

自然语言理解——词向量(一)_PMI_07

然后,可能这些矩阵表达语义上面没那么好,你还需要重新设置权重,以加强重要词汇而削弱不重要词汇。

自然语言理解——词向量(一)_归一化_08

比如比较有名的一种方法是TF-IDF。

PMI(Pointwise Mutual Information),中文叫点互信息,用于衡量两个随机变量的相关性,可用于情感分析中的情感分数计算。

然后,你可能需要做一些降维。

自然语言理解——词向量(一)_PMI_09

最后,你需要选择向量比较的方法。

自然语言理解——词向量(一)_PMI_10

汇总起来就是下图所示,每一步你都可以做出各种选择,从而组成你的模型。

自然语言理解——词向量(一)_归一化_11

矩阵设计

word x word

自然语言理解——词向量(一)_PMI_12

行和列都是单词,值表示两个单词在附近出现的次数。通常需要制定窗口大小,比如3,那么A单词出现在B单词的左边3个之内,就说A、B两单词是共同出现的。

word x document

自然语言理解——词向量(一)_自然语言理解_13

在这种表示方法中,每个值表示某个单词在其所属文档中出现的次数。可以看到,该矩阵是十分稀疏的。

word x discourse context

自然语言理解——词向量(一)_归一化_14

其中的行代表单词,而列代表各种语境:疑问句、感叹句等。

窗口和缩放:什么是共生(co-occurrence)

自然语言理解——词向量(一)_ide_15

假设在这个句子中,我们考虑单词“to”,我们设窗口大小为3。

自然语言理解——词向量(一)_归一化_16

这是,我们可以说“to”的共生单词是在这个窗口范围内的单词。

另外,可能要选择的是如何统计这些共生的次数。

自然语言理解——词向量(一)_自然语言理解_17

如果采用的是扁平的缩放,即将窗口内的每个单词个数设为1。

另一种有趣的缩放是自然语言理解——词向量(一)_词向量_18自然语言理解——词向量(一)_PMI_19为单词的距离,比如单词“of”距离单词“to”为2。

自然语言理解——词向量(一)_归一化_20

其数值越大,代表越重要。

向量比较

自然语言理解——词向量(一)_归一化_21

我们得到了矩阵之后,我们如何比较矩阵中的单词。假设如上图所示,有三个单词A,B,C。

我们说A,B相似,因为y轴的值都大于x轴的值。

我们说B,C相似,因为它们的值都很大;而A的值相对小一些。

或者说,根据它们在坐标轴上的距离,A看起来比较孤单,而B,C更加靠近一点。

所以,选择距离的衡量指标很重要。下面介绍几个常用的指标。

Euclidean

欧几里得距离计算自然语言理解——词向量(一)_PMI_19维向量距离公式为:
自然语言理解——词向量(一)_PMI_23
即向量各维度差值的平方和,再开根号。

自然语言理解——词向量(一)_自然语言理解_24

通过欧几里得距离可以得到B,C的距离是小于A,B的距离的。

这是一个不错的距离衡量指标,但是用于语言上可能就没那么好了。

可能A代表单词“superb”,B代表单词“good”。都是褒义词,由于superb”很少出现,所以它的值比较小。

而C代表单词“bad”,从出现次数来看,可能和B出现的次数差不多,但是它们的语义相差巨大。

Length normalization(长度归一化)

给定自然语言理解——词向量(一)_PMI_19维度的向量自然语言理解——词向量(一)_ide_26自然语言理解——词向量(一)_ide_27自然语言理解——词向量(一)_ide_26的L2-length(模)是:
自然语言理解——词向量(一)_归一化_29
那么自然语言理解——词向量(一)_ide_26的长度归一化结果为:
自然语言理解——词向量(一)_ide_31

对之前的矩阵应用长度归一化后的结果为:

自然语言理解——词向量(一)_词向量_32

此时,A和B就很近了;而B和C就相对远一些。

Cosine distance

自然语言理解——词向量(一)_PMI_19维向量自然语言理解——词向量(一)_ide_26自然语言理解——词向量(一)_ide_27之间的余弦距离为:
自然语言理解——词向量(一)_ide_36
即1减去这两个向量的余弦相似度。

这是比较常用的一个方法。

分母做的是计算两个向量的相似度,分子考虑了这两个向量的模。相当于做了归一化。

自然语言理解——词向量(一)_归一化_37

如上图,计算得AB的距离为0.008,而BC的距离为0.065。

下面简要展示一下其他流行的度量指标。

Matching-based methods

自然语言理解——词向量(一)_PMI_38

这些都是基于匹配系数(matching coefficient)的指标。

KL divergence

KL散度是比较两个分布自然语言理解——词向量(一)_PMI_39差异的一种指标。
自然语言理解——词向量(一)_ide_40
自然语言理解——词向量(一)_归一化_41表示数据的真实分布,自然语言理解——词向量(一)_PMI_42表示数据的理论分布,或是自然语言理解——词向量(一)_归一化_41的近似分布。

KL散度有两个特性:

  1. 不对称性: 即自然语言理解——词向量(一)_PMI_44
  2. 非负性:结果非负值,即自然语言理解——词向量(一)_ide_45

自然语言理解——词向量(一)_词向量_46

重赋权

Reweighting

重赋权的目标

  • 强调重要的、可靠的、不常见的;同时淡化常见的、异常的。
  • 由于没有目标函数,所以目标还是很模糊
  • 我们要远离原始计数(raw counts)
  • 对每种加权模式思考三个问题
  • 它和原始计算比怎么样
  • 它和单词频率比怎么样
  • 它的值的分布是怎样的
  • 我们希望不需要做基于计算的特征选择;也不需要停止词字典。我们希望能有方法能揭露单词的重要性而不要上面这些临时干预。

Normalization

L2正则

给定自然语言理解——词向量(一)_PMI_19维度的向量自然语言理解——词向量(一)_ide_26自然语言理解——词向量(一)_ide_27自然语言理解——词向量(一)_ide_26的L2-length(模)是:
自然语言理解——词向量(一)_归一化_29
那么自然语言理解——词向量(一)_ide_26的长度归一化结果为:
自然语言理解——词向量(一)_ide_31

概率分布

给定一个自然语言理解——词向量(一)_PMI_19维向量自然语言理解——词向量(一)_ide_26,其中的值都是正数,令
自然语言理解——词向量(一)_自然语言理解_56
那么自然语言理解——词向量(一)_ide_26的概率分布为:
自然语言理解——词向量(一)_ide_58

Observed/Expected

定义自然语言理解——词向量(一)_词向量_59共生矩阵某行总和
自然语言理解——词向量(一)_自然语言理解_60
定义矩阵某列总和
自然语言理解——词向量(一)_ide_61
矩阵所有元素总和
自然语言理解——词向量(一)_PMI_62
期望值
自然语言理解——词向量(一)_PMI_63
oe值(observed/expected,观测值÷期望值)
自然语言理解——词向量(一)_词向量_64
如果观测值大于期望值,上式结果大于自然语言理解——词向量(一)_归一化_65,我们就要强调它;否则,我们就要淡化它。

下面看一个例子。

自然语言理解——词向量(一)_词向量_66

PMI

Pointwise Mutual Information(PMI,点互信息),就是 上面的oe值取对数。
自然语言理解——词向量(一)_自然语言理解_67
这里令自然语言理解——词向量(一)_词向量_68

自然语言理解——词向量(一)_自然语言理解_69

但是PMI有个缺点,如上图,假设有个值是异常值,上面的自然语言理解——词向量(一)_归一化_65,经过PMI计算出来后得到一个较大的值。这里的问题是,过分强调了这个很小的值。