为什么比较方向,而不直接用点积? Lec 7 · PDF pp. 46–50
第 7 讲回到第 6 讲的相似度度量,并补充了一个偏爱余弦的理由。两个向量的点积,是把对应坐标相乘再相加:
两个向量在相同坐标上都有大数值时,点积会很大。但只要一个向量长,也就是在很多坐标上都有大数值,点积同样会很大。the、you、of 这类高频词和很多词一起出现,它们的计数向量就很长。直接用点积,会偏向高频词,而不是真正相似的词。
余弦消除了这个影响。点积等于两个长度的乘积再乘以夹角的余弦,所以除以两个长度后,剩下的只有夹角:
两个向量方向相同时结果是 \(+1\),互相垂直时是 \(0\),方向相反时是 \(-1\)。我们不在乎词向量的长度,只在乎它们之间的夹角。
课件从一张计数表里取了三个词和三个上下文列:
| pie | data | computer | |
|---|---|---|---|
| cherry | 442 | 8 | 2 |
| digital | 5 | 1683 | 1670 |
| information | 5 | 3982 | 3325 |
digital 和 information 几乎指向同一个方向,cherry 则指向别处。课件把 pie 和 computer 两个坐标画成二维图,看到的也是同样的情形:cherry 沿 pie 轴往上,另外两个词几乎贴着 computer 轴。
关于数值:第一个比值算出来是 \(0.01775\),四舍五入是 \(0.018\)。PDF 第 49 页印的是 \(.017\),那是直接截断而不是四舍五入的结果。
GloVe:让向量拟合全局共现统计 Lec 7 · PDF pp. 51–55
word2vec 不容易解释:它在文本上一次滑过一个窗口,最后得到的向量到底在逼近什么量,并不明显。课件问,有没有更有理论依据的方式来描述学到的东西。
GloVe(Global Vectors,Pennington 等人,2014)是另一个广泛使用的静态词向量模型。它不从窄窗口出发,而是从整个语料的全局词-词共现矩阵出发,也就是计算 PPMI 时用的那个矩阵。课件把它的思想概括为:用词向量去逼近两个词的点互信息。
课件列出 GloVe 依赖的几样东西:从共现矩阵得到的概率比值、PPMI 这类基于计数的模型的直觉,以及矩阵分解(matrix factorization)。目标是把大部分重要信息存进固定的少量维度里,得到一个低维矩阵,同时让重构损失(reconstruction loss)尽量小。重构损失指的是从低维向量还原回完整矩阵时的误差。它训练很快,能扩展到非常大的语料。
这里 \(M\) 收集了所有目标词与上下文词的共现次数。一个矩阵里每个目标词占一个向量,另一个矩阵里每个上下文词占一个向量,使得目标词向量与上下文向量的点积逼近对应共现项的对数。课件把解描述为对 \(M\) 做秩为 \(d\) 的分解,\(d\) 就是词向量的长度。
课件只给出上面的近似关系。Pennington 等人用加权最小二乘来拟合它:每个词 \(i\) 和上下文 \(j\) 还各有偏置 \(b_i\) 和 \(\tilde b_j\),加权函数 \(f\) 用来削弱极罕见和极高频词对的影响:
\[ J=\sum_{i,j}f(X_{ij})\big(\mathbf{w}_i\cdot\tilde{\mathbf{w}}_j+b_i+\tilde b_j-\log X_{ij}\big)^2 \]\(X_{ij}=0\) 的词对权重为零,所以永远不需要算零的对数。这个细节课件里没有。
哪种方法更好? Lec 7 · PDF p. 56
都不是。课件明确说,没有哪种词向量方法对所有应用都是最好的。更重要的是训练数据的数量和质量,以及超参数的选择:向量维度 \(d\);对 word2vec 来说,负采样的权重 \(\alpha\) 和负样本数 \(K\);对 GloVe 来说,矩阵分解的算法;还有其他设置。
把词向量当作分类器的特征 Lec 7 · PDF p. 57
多分类逻辑回归这类分类器,每篇文档需要一个特征向量。一个句子却给了我们每个词一个向量。课件的例子是 I am a student at USC,六个词,六个向量 \(\mathbf{v}_1,\dots,\mathbf{v}_n\)。
最简单的合并方法是逐元素池化(element-wise pooling):对每一个坐标,在所有词向量上应用同一条规则。
取平均或取最大值会丢掉词的顺序,也丢掉词与词之间的修饰关系。课件直接指出:词序和上下文信息都没有保留。即便如此,结果仍然是一个有用而紧凑的输入,而且比词袋更好,因为意思相近的词现在会产生相近的特征。
向量抓住什么,取决于窗口 Lec 7 · PDF p. 59
上下文窗口的大小会改变哪些词最终靠在一起。稀疏向量和稠密向量都是如此。
| 窗口 | 最近邻往往是 | Hogwarts 的例子 |
|---|---|---|
| 小窗口,约 \(\pm2\) | 语法行为相似、属于同一类别的词 | 其他虚构的学校:Sunnydale、Evernight、Blandings |
| 大窗口,约 \(\pm5\) | 主题相关的词 | 同一个故事里的词:Dumbledore、half-blood、Malfoy |
所以窗口大小是建模上的选择,不只是速度设置。小窗口抓住一个词怎么用,大窗口抓住一个词讲什么。
怎么知道这些向量好不好? Lec 7 · PDF p. 60
一种检查是第 6 讲的类比测试:在 GloVe 空间里,\(\mathbf{w}_{king}-\mathbf{w}_{man}+\mathbf{w}_{woman}\) 落在 \(\mathbf{w}_{queen}\) 附近,投影到二维后,相关词对之间呈现平行的位移。课件重申了限制:这只对高频词、短距离和某些关系有效,例如国家与首都、词性变化,对其他关系则不成立。理解类比仍是一个开放的研究领域。
更好的检验是外在评估(extrinsic evaluation):把向量放进真实任务里,看任务的表现。这和困惑度那一页对语言模型做的区分是一样的。
词向量会反映文化偏见 Lec 7 · PDF pp. 61–62
向量是从人写的文本里学来的,所以会吸收文本里的关联,包括有害的关联。课件给了三个类比补全:
- "Paris 之于 France,如同 Tokyo 之于 ___" → Japan。这个没问题。
- "father 之于 doctor,如同 mother 之于 ___" → nurse。
- "man 之于 computer programmer,如同 woman 之于 ___" → homemaker。
课件把这类问题称为分配性伤害(allocational harm):如果一个算法带着这样的词向量去搜索程序员候选人,机会就可能被不公平地分配。例子来自 Bolukbasi 等人(2016),那篇论文的标题问的正是这个问题,并提出了减少偏见的方法。
同样的性质也让词向量成为研究偏见的工具。Garg 等人(2018)用不同年代的文本训练词向量,对每个形容词测量它离指代女性的词比离指代男性的词近多少,或者离某些族裔的名字有多近。其中两个发现:
- smart、wise、brilliant、logical 这类表示能力的形容词偏向男性,这种偏向在 1960 到 1990 年间缓慢下降。
- barbaric、monstrous、bizarre 这类贬低人格的形容词在 1930 年代偏向亚裔,这种偏向在二十世纪逐渐减弱。
这些测量结果与 1930 年代的态度调查相符。课件把这类影响称为表征性伤害(representational harm):表示本身就带有贬损性的关联,不管有没有用它做任何决定。
- 直接用点积会偏向高频词,因为它们的向量长。余弦除掉长度,只比较方向。
- GloVe 让目标词向量和上下文向量的点积逼近共现矩阵的对数,是 word2vec 的一个全局的、基于矩阵分解的近亲。
- 没有一种词向量方法处处最好。数据和超参数(包括 \(d\)、\(\alpha\)、\(K\))更重要。
- 对词向量做池化,能给分类器每段文本一个输入向量,代价是丢掉词序。
- 小窗口找到用法相似的词,大窗口找到主题相关的词。用它们在任务中的帮助来评判向量。
- 词向量会继承训练文本里的偏见,既可能造成伤害,也可以被测量。