第三部分 · 用数字表示词义

怎样用一组数字表示词义?

经常出现在相似语境中的词,含义往往也有联系。词向量把这种联系变成可以计算和比较的数字。

第 7 讲在 PDF 第 9–10 页重述了分布假设,又在第 46–50 页回到余弦相似度,补充了一个用真实计数的例题,并说明为什么余弦比直接用点积更合适。这部分内容在 GloVe 与词向量的性质一页。

怎样让计算机知道两个词意思相近? Lec 5–6

在 n-gram 模型里,rancor 和 hatred 只是两个不同的符号。光看这两个名字,模型并不知道它们的意思相近。一个办法是给每个词配上一组数字,把它看成空间里的一个点,再用点之间的位置关系表达词义之间的联系。这种做法叫向量语义(vector semantics)。

这里讨论的是怎样表示输入。比如,词向量可以作为多分类逻辑回归的输入特征;分类器仍然计算各类的得分,再用 softmax 把得分转换成概率。因此,先要想清楚的问题是:这组表示一个词的数字,应该包含什么信息?

说“一个词”时,我们究竟在数什么? Lec 5 · pp. 33–35

“出现了几次”“有几种写法”“用了哪个意思”是不同的问题。下面这些术语用来区分它们。

名称它回答什么问题例子
词次(token)一个词在文字中具体出现了一次。“The cat chased the cat” 一共出现了 5 个词,因此有 5 个词次。
词型(type)按约定的处理规则,有多少种不同的词形?全部转成小写并忽略标点后,只有 the、cat、chased,共 3 种。
词元(lemma)一个词的不同变化形式,在词典中归到哪个基本形式?break、breaks、broke、broken、breaking 都归到 break。
词义(sense)这个词在这里表达的是哪个具体意思?Bank 可以指银行,也可以指河岸。
多义性(polysemy)一个词有多个通常相互关联的意思。Head 可以指人的头,也可以指一个组织的负责人。

还有一个容易混淆的概念是词干(stem):它是按规则删减词形后得到的结果,不一定是词典里的完整单词。词元则是规范的基本形式。无论是还原词元,还是提取词干,都不会自动告诉我们这个词在当前句子里用了哪个意思。

两个 cat,是两次出现、同一种词

在 “The cat chased the cat.” 中,两个 cat 各占一个位置,所以是两个词次;它们的写法相同,所以属于同一个词型。是否区分大小写、是否把标点单独算出来,都会改变结果,计数前要先说明规则。若每种词只保存一个固定向量,这两个 cat 就会取到同一个向量。

词与词之间有哪些关系? Lec 5 · pp. 36–40

“意思有关”并不只有一种情况。下面这些区别,会影响我们怎样理解向量的相似度。

关系例子怎样理解
同义(synonymy)couch / sofa、automobile / car在一些场合意思相同或很接近,但正式程度、礼貌程度和具体用法仍可能不同。
相似(similarity)car / bicycle、cow / horse有共同特点,但不是同一种东西的两个名字,不能随意互换。
反义(antonymy)hot / cold、in / out、rise / fall在某一方面相反,其他方面却可能很接近。
相关(relatedness)coffee / cup经常出现在同一个场景中。杯子和咖啡有关,但杯子不是一种饮料。
情感或评价色彩(connotation)happy 让人想到积极情绪,sad 让人想到消极情绪。一个词引起的情绪和评价,也是人们理解它的一部分。

完全可以互换的同义词很少。比如 “my big sister” 通常指姐姐,而 “my large sister” 说的是体型;把 big 换成 large,原意就变了。再看 coffee / tea:它们都是饮料,所以相似;coffee / cup 则主要是相关。

反义词也有不同情况:long / short 在同一尺度的两端,in / out 是二选一的对立,rise / fall 是相反的过程。反义词经常出现在相似的句子里,因此根据上下文得到的向量也可能很接近。向量相似,并不能单独告诉我们这两个词究竟是什么关系。

WordNet 怎样记录这些关系?

WordNet 是一个英语词汇数据库。它把表达同一概念的词义放进一个同义词集(synset)。同一个词的不同意思,可以属于不同的集合。它还明确记录下面这些关系:

  • 上位词与下位词(hypernym / hyponym,也叫 is-a 关系):armchair → chair → furniture 表示从扶手椅到椅子,再到家具,范围越来越大。因此 chair 是 armchair 的上位词,armchair 是 chair 的下位词。
  • 部分与整体(meronymy,也叫 part-of 关系):椅子腿 leg 是椅子 chair 的一部分。注意,椅子腿不是“一种椅子”。
  • 反义关系:记录两个具体词义在哪种意义上相互对立。

这些关系直接写明“它们怎么有关”。向量相似度则提供一个更灵活的数值,说明有多接近,却不会自动替我们标出“是一种”还是“是一部分”。

从一个词常出现的地方猜它的意思 Lec 5 · pp. 43–49; Lec 6 · p. 33

一个重要想法是:出现在相似语境中的词,往往有相似的意思。这叫分布假说(distributional hypothesis)。这里的语境可以是相邻的词、整篇文档,也可以是一个语法结构。我们不是先查定义,而是先观察人们怎样使用这个词。

课件开头让大家判断词更可能出现在哪里:doth 比较像莎士比亚作品里的用语,不像现代报纸;garnish 则更适合放在写有原料和上菜步骤的食谱中。可见,周围的文字除了提示词义,还会透露主题和语言风格。

不认识 ongchoi,也能猜出一些意思

假设你看到 ongchoi 经常和 leaves、garlic、sautéed、rice、sauce 一起出现,也就是叶子、大蒜、炒制、米饭和酱汁。你又知道 spinach、chard、collard greens 这些蔬菜也常出现在类似的句子里,就可以猜测它是一种绿叶菜。课件给出的答案是空心菜(water spinach)。

即使没有先查词典,这些相似的使用场景也已经提供了词义线索。

再猜一猜 tesgüino

如果文字告诉你,tesgüino 装在瓶子里、由玉米制成、喝了会醉,那么它很可能是一种酒。每条线索都排除一些可能性;把几条线索合在一起,比只看旁边某一个词更有帮助。

意思相近,不等于经常挨着出现

Car 和 automobile 可以出现在相似的句子位置,却不一定经常出现在彼此旁边。我们比较的是它们各自通常和哪些词一起出现,而不只是它们两者是否直接相邻。

一组数字怎样表示含义?

课件先举了一个每个坐标都容易理解的例子:用三个数字描述词带来的情绪,分别是愉悦程度(valence)、情绪强度(arousal)和掌控感(dominance)。这样,每个词就是三维空间中的一个点。

从文本中构造或学习词向量时,也采用类似想法,只是维度更多,而且每个坐标通常没有这么明确的名称。我们看到的二维图,只是把高维向量画出来帮助观察,并不表示词义实际上只有两个维度。

词向量怎样帮助模型举一反三? Lec 5 · pp. 50–52; Lec 6 · pp. 26–35

给词表里的每一种词保存一个固定向量,这种做法叫静态词向量(static embedding)。下面的公式表示:从词表 \(V\) 中取出一个词 \(w\),就能查到一个由 \(d\) 个数字组成的向量。

每一种词对应一个固定向量
\[ E : V \rightarrow \mathbb{R}^{d}, \qquad w \mapsto \mathbf{v}_w \]

假设分类器学会了 terrible 通常表示负面评价。如果它只认词的名字,就不会自动把这个经验用到 awful 上。如果这两个词的向量很接近,分类器就有机会从相似的数字中识别出共同之处,并给出相近判断。

  • 只记词的名字:特征是“前一个词是 terrible”。换一个词,就变成另一项特征。
  • 使用词向量:特征是“前一个词由这组数字表示”。意思相近的词可以带来相近的数字。
  • 实际用途:这种相似性可以帮助匹配措辞不同的问题与答案,比较句子和文档,也可以用来研究一个词的用法怎样随时间变化。
“没见过”要说清楚是哪里没见过

一个词可能没出现在当前任务的训练样本里,却已经在更大的语料中学到了向量。如果它连词向量表本身都没收录,固定查表的方法就无法直接给它一个向量。模型能否举一反三,还取决于向量质量和任务本身;向量接近,不代表最终标签一定相同。

这些向量从哪里来?用计数构造词向量一页会从“词出现在哪些文档、周围有哪些词”开始,介绍两类计数表、TF-IDF、PMI 和 PPMI,再说明为什么希望把向量变得更短。

余弦相似度:看方向有多接近 Lec 6 · pp. 36–37

两个向量的点积(dot product)既受方向影响,也受长度影响。我们如果想主要比较方向,就把点积除以两个向量的长度,得到余弦相似度(cosine similarity)。对于非零向量 \(\mathbf{u},\mathbf{v}\in\mathbb{R}^{d}\):

用向量长度消除点积中的大小影响
\[ \operatorname{cos}(\mathbf{u},\mathbf{v}) = \frac{\mathbf{u}\cdot\mathbf{v}}{\|\mathbf{u}\|_2\|\mathbf{v}\|_2} = \frac{\sum_{i=1}^{d}u_iv_i}{\sqrt{\sum_{i=1}^{d}u_i^2}\sqrt{\sum_{i=1}^{d}v_i^2}} \] \[ \mathbf{u}\cdot\mathbf{v}=\|\mathbf{u}\|_2\|\mathbf{v}\|_2\cos\theta \]
余弦值方向关系它说明什么
\(+1\)同向方向完全一致,长度仍可以不同。
\(0\)正交,也就是互相垂直在当前这套表示中,两个方向没有对齐。
\(-1\)反向只是向量指向相反,不代表两个词一定是反义词。

一般来说,余弦值在 \([-1,1]\) 之间。如果坐标全都非负,例如直接使用次数或 PPMI,范围就只有 \([0,1]\)。它是一个相似度分数,不是概率。这个分数能否反映词义,仍要看向量里保存了什么。

一起算一个例子

取 \(\mathbf{u}=[1,2,0]\) 和 \(\mathbf{v}=[2,1,0]\)。先算点积,再分别算长度,最后相除:

\[ \mathbf{u}\cdot\mathbf{v}=1\times2+2\times1+0\times0=4 \] \[ \|\mathbf{u}\|_2=\sqrt{5}, \qquad \|\mathbf{v}\|_2=\sqrt{5}, \qquad \operatorname{cos}(\mathbf{u},\mathbf{v})=\frac{4}{5}=0.8 \]

如果把 \(\mathbf{u}\) 放大三倍,得到 \(3\mathbf{u}=[3,6,0]\),方向没有变,因此 \(\operatorname{cos}(\mathbf{u},3\mathbf{u})=1\)。而 \([0,0,5]\) 与 \(\mathbf{u}\) 垂直,余弦值就是 \(0\)。

两处容易算错的地方

如果有一个向量的长度为零,分母就是零,余弦相似度没有定义。程序需要跳过这种情况,或明确规定如何处理;不能说公式本身给出了零。

若先把两个向量都缩放到长度为 1,记为 \(\hat{\mathbf{u}},\hat{\mathbf{v}}\),就有 \(\|\hat{\mathbf{u}}-\hat{\mathbf{v}}\|_2^2=2-2\operatorname{cos}(\mathbf{u},\mathbf{v})\)。所以完成这种归一化后,找余弦值最大的向量,与找直线距离最小的向量,会得到相同排序。没有归一化时,通常不能直接这样比较。

用向量尝试解类比题 Lec 6 · pp. 38–39

类比题 \(a:b::c:d\) 问的是:“\(a\) 和 \(b\) 的关系,相当于 \(c\) 和什么的关系?”一个直观做法是先看从 \(a\) 移动到 \(b\) 要走多远、朝哪个方向,再从 \(c\) 出发走同样一步。画出来就像一个平行四边形。

把同一个方向和距离用到另一个词上
\[ \mathbf{v}_d-\mathbf{v}_c \approx \mathbf{v}_b-\mathbf{v}_a \quad\Rightarrow\quad \mathbf{q}=\mathbf{v}_b-\mathbf{v}_a+\mathbf{v}_c \]
从词表中找出方向最接近目标的词
\[ \hat d=\underset{w\in V\setminus\{a,b,c\}}{\arg\max}\ \operatorname{cos}(\mathbf{v}_w,\mathbf{q}) \]

算出的目标向量不一定正好是词表里某个词的向量,所以还要找一个最接近的词,这一步叫近邻搜索。搜索时,目标向量和候选向量都必须非零。评估时通常会排除题目已经给出的三个词。

苹果对应苹果树,葡萄对应什么?

Apple : tree :: grape : vine 中,我们要从果实走向它生长的植物,因此目标是 \(\mathbf{q}=\mathbf{v}_{\text{tree}}-\mathbf{v}_{\text{apple}}+\mathbf{v}_{\text{grape}}\)。如果词向量学到了这种关系,vine 应该靠近这个位置。减法顺序反过来,走的方向也就反了。

第 6 讲 PDF 第 38 页的文字把减法顺序写反了。本页按该页的平行四边形图和通用公式,使用正确的方向。

课件还举了 GloVe 的例子:\(\mathbf{v}_{\text{king}}-\mathbf{v}_{\text{man}}+\mathbf{v}_{\text{woman}}\approx\mathbf{v}_{\text{queen}}\)。这展示的是某一组向量中的近似规律,不是自然语言必须遵守的精确代数定律。

这类方法有适用范围。课件强调,效果较好的情况包括高频词、较小的距离,以及国家与首都、语法变化等特定关系。二维图看起来漂亮,不代表所有类比题都能答对;一个模型也可能很好地反映词语相似性,却做错某道类比题。

一个词只配一个向量,还有哪些不足?

  • 分不开不同词义:一个固定向量汇总了这个词的各种用法。银行 bank 和河岸 bank 查到同一个向量,就无法仅靠它表明当前句子用了哪个意思。
  • 说不清具体关系:相似、主题相关和反义,都可能让两个词拥有相似的上下文。一个余弦分数不能替它们分类。
  • 还没表达整句话:知道每个词怎样表示,不等于已经处理了句子的整体含义、词序或否定关系。
  • 仍受资料范围限制:某个词出现太少,或根本没被词表收录,就很难可靠地表示它。

第 6 讲最后介绍了另一个方向:上下文词向量(contextual embedding)根据一个词每次出现时的句子来计算表示,而不是一直查同一个固定向量。课件也提到 word2vec、GloVe 和 SVD 可以得到更短、更紧凑的向量,但还没有完整推导这些方法的训练过程。第 6 讲真正展开的构造方法,见用计数构造词向量;第 7 讲展开的训练过程,见 word2vec。

这一页最重要的几点
  • 词次、词型、词元和词义,分别关注出现位置、不同写法、基本形式和具体含义。
  • 观察一个词常出现的语境,可以为它的意思提供线索。
  • 用相近的数字表示相近的词,有助于模型把学过的经验用到新的例子上。
  • 余弦相似度比较非零向量的方向;余弦为负,并不是判断反义词的标准。
  • 解 \(a:b::c:d\) 时,在 \(\mathbf{v}_b-\mathbf{v}_a+\mathbf{v}_c\) 附近找答案。这种类比关系只是近似,也并非处处成立。
课件来源

这里的页码是PDF 文件中的实际页序,不是幻灯片沿用的旧编号。第 5 讲:第 29–32 页讲邻域预测和主题过渡,第 33–40 页讲词的概念与词汇关系,第 41–49 页讲语义与分布,第 50–52 页讲向量与泛化。第 6 讲:第 7–25 页复习词义与分布,第 26–35 页讲表示和应用,第 36–37 页讲余弦相似度,第 38–39 页讲类比,第 62 页比较静态和上下文词向量。本页的余弦手算例子及实现注意事项,是对课件公式的补充说明。