深度学习入门

词嵌入:把词变成向量

10 分钟

电脑不认识「猫」这个字

对电脑来说,文字只是编号。最笨的编码叫 one-hot:词表有 5 万个词,就用 5 万维的向量,「猫」是第 3721 位为 1、其余全 0。问题很明显:向量又巨大又稀疏,而且任意两个词之间看不出任何关系——「猫」和「狗」的距离,与「猫」和「汽车」的距离一模一样,这不符合我们的直觉。

词嵌入:给每个词发一张坐标卡

词嵌入(word embedding)换了个思路:把每个词表示成几百维(比如 300 维)的稠密向量,让意思相近的词,坐标也相近。怎么做到?用海量文本训练:一个词的含义,由它经常和哪些词一起出现来决定(「猫」「狗」都常和「宠物」「喂」同框,自然越靠越近)。这就是 word2vec 的思想,《动手学深度学习》在「自然语言处理:预训练」一章会带你亲手训练。

一个著名的例子

在训练好的词向量空间里做算术:「国王 − 男人 + 女人 ≈ 女王」。向量的方向居然编码了「性别」这种概念——词与词的关系,变成了空间里的几何关系。

常见误区

词向量不是人查词典编出来的,全部来自统计规律;所以它也会学到语料里的偏见(比如职业和性别的刻板关联),使用时要有警觉。

练一练:猜猜「苹果」这个词在词向量空间里,离「香蕉」近还是离「手机」近?说说为什么答案可能两个都对。

小纸条

讨论:「苹果」的词向量更接近「香蕉」还是「手机」?为什么两种都可能?

登录 后可看答案