第 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):它是按规则删减词形后得到的结果,不一定是词典里的完整单词。词元则是规范的基本形式。无论是还原词元,还是提取词干,都不会自动告诉我们这个词在当前句子里用了哪个意思。
在 “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 经常和 leaves、garlic、sautéed、rice、sauce 一起出现,也就是叶子、大蒜、炒制、米饭和酱汁。你又知道 spinach、chard、collard greens 这些蔬菜也常出现在类似的句子里,就可以猜测它是一种绿叶菜。课件给出的答案是空心菜(water spinach)。
即使没有先查词典,这些相似的使用场景也已经提供了词义线索。
如果文字告诉你,tesgüino 装在瓶子里、由玉米制成、喝了会醉,那么它很可能是一种酒。每条线索都排除一些可能性;把几条线索合在一起,比只看旁边某一个词更有帮助。
Car 和 automobile 可以出现在相似的句子位置,却不一定经常出现在彼此旁边。我们比较的是它们各自通常和哪些词一起出现,而不只是它们两者是否直接相邻。
一组数字怎样表示含义?
课件先举了一个每个坐标都容易理解的例子:用三个数字描述词带来的情绪,分别是愉悦程度(valence)、情绪强度(arousal)和掌控感(dominance)。这样,每个词就是三维空间中的一个点。
从文本中构造或学习词向量时,也采用类似想法,只是维度更多,而且每个坐标通常没有这么明确的名称。我们看到的二维图,只是把高维向量画出来帮助观察,并不表示词义实际上只有两个维度。
词向量怎样帮助模型举一反三? Lec 5 · pp. 50–52; Lec 6 · pp. 26–35
给词表里的每一种词保存一个固定向量,这种做法叫静态词向量(static embedding)。下面的公式表示:从词表 \(V\) 中取出一个词 \(w\),就能查到一个由 \(d\) 个数字组成的向量。
假设分类器学会了 terrible 通常表示负面评价。如果它只认词的名字,就不会自动把这个经验用到 awful 上。如果这两个词的向量很接近,分类器就有机会从相似的数字中识别出共同之处,并给出相近判断。
- 只记词的名字:特征是“前一个词是 terrible”。换一个词,就变成另一项特征。
- 使用词向量:特征是“前一个词由这组数字表示”。意思相近的词可以带来相近的数字。
- 实际用途:这种相似性可以帮助匹配措辞不同的问题与答案,比较句子和文档,也可以用来研究一个词的用法怎样随时间变化。
一个词可能没出现在当前任务的训练样本里,却已经在更大的语料中学到了向量。如果它连词向量表本身都没收录,固定查表的方法就无法直接给它一个向量。模型能否举一反三,还取决于向量质量和任务本身;向量接近,不代表最终标签一定相同。
这些向量从哪里来?用计数构造词向量一页会从“词出现在哪些文档、周围有哪些词”开始,介绍两类计数表、TF-IDF、PMI 和 PPMI,再说明为什么希望把向量变得更短。
余弦相似度:看方向有多接近 Lec 6 · pp. 36–37
两个向量的点积(dot product)既受方向影响,也受长度影响。我们如果想主要比较方向,就把点积除以两个向量的长度,得到余弦相似度(cosine similarity)。对于非零向量 \(\mathbf{u},\mathbf{v}\in\mathbb{R}^{d}\):
| 余弦值 | 方向关系 | 它说明什么 |
|---|---|---|
| \(+1\) | 同向 | 方向完全一致,长度仍可以不同。 |
| \(0\) | 正交,也就是互相垂直 | 在当前这套表示中,两个方向没有对齐。 |
| \(-1\) | 反向 | 只是向量指向相反,不代表两个词一定是反义词。 |
一般来说,余弦值在 \([-1,1]\) 之间。如果坐标全都非负,例如直接使用次数或 PPMI,范围就只有 \([0,1]\)。它是一个相似度分数,不是概率。这个分数能否反映词义,仍要看向量里保存了什么。
一起算一个例子
取 \(\mathbf{u}=[1,2,0]\) 和 \(\mathbf{v}=[2,1,0]\)。先算点积,再分别算长度,最后相除:
如果把 \(\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\) 出发走同样一步。画出来就像一个平行四边形。
算出的目标向量不一定正好是词表里某个词的向量,所以还要找一个最接近的词,这一步叫近邻搜索。搜索时,目标向量和候选向量都必须非零。评估时通常会排除题目已经给出的三个词。
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\) 附近找答案。这种类比关系只是近似,也并非处处成立。