是什么
词嵌入把每个词表示为一个由数字组成的稠密向量(dense vector),这些数字是从数据中学得的。用法相近的词,向量也彼此靠近。[1] 在此之前,许多语言系统只把每个词当作词表中的一个编号,系统并不知道「dog」和「cat」是相关的。[2]
怎么工作
举一个只有三个数字的玩具例子(真实系统用的数字多得多,而且不是人工填写的):假设「cat」是 [0.9, 0.1, 0.4],「dog」是 [0.8, 0.2, 0.5],「car」是 [0.1, 0.9, 0.7]。比较可知,cat 与 dog 的向量相近,car 则较远,系统于是可以把 cat 和 dog 视为相关的词。
向量通过在文本上训练模型得到,例如根据周围的词预测当前的词,那些让预测效果好的数字就成为词嵌入。学得的向量还能做简单的加减运算,反映词之间的关系。在 2013 年的 word2vec 论文中,vector('King') − vector('Man') + vector('Woman') 最接近 vector('Queen'),vector('Germany') + vector('capital') 接近 vector('Berlin')。[2]
从哪来
2003 年,Yoshua Bengio 与合作者在《Journal of Machine Learning Research》上发表了神经语言模型,为每个词学习一个特征向量,并与一个预测下一个词的网络一起训练。这些向量有 30、60 或 100 个特征,对应的词表约 1.7 万词。[1] 这一做法的主要优势是泛化:一个训练中从未见过的句子,只要其中的词向量与见过的句子中的词接近,仍能得到较高的概率。[1]
2013 年 1 月,Tomas Mikolov 等人在谷歌提出了两种更简单的结构:CBOW 根据上下文预测词,Skip-gram 则根据词预测上下文。它们能在不到一天的时间里,从 16 亿词的数据中学到高质量的向量。[2] 谷歌随后把训练代码开源,形成了 word2vec 项目。斯坦福大学的 GloVe 则通过全局的词共现计数来学习向量,在一项词类比任务上得分 75%。[4]
今天用在哪里
嵌入层已成为神经语言系统的标准输入层。例如,2014 年的序列到序列翻译模型使用了 1,000 维的词嵌入。[5] 今天的大语言模型延续了同样的思路:文本先被切分为词元(token),每个词元映射为学得的向量,之后才进行其他计算。
局限
经典词嵌入给每个词只分配一个向量,不管上下文如何,也忽略词序。word2vec 的作者指出,这种向量无法表示固定搭配:「Air」加上「Canada」并不会得到「Air Canada」。[3] 后来的模型让同一个词在不同句子中拥有不同的向量,但基本思路仍是在学得的空间中用位置来表示意义。
注释与来源
- A Neural Probabilistic Language Modelhttps://www.jmlr.org/papers/v3/bengio03a.html
- Efficient Estimation of Word Representations in Vector Spacehttps://arxiv.org/abs/1301.3781
- Distributed Representations of Words and Phrases and their Compositionalityhttps://arxiv.org/abs/1310.4546
- GloVe: Global Vectors for Word Representation (D14-1162)https://aclanthology.org/D14-1162/
- Sequence to Sequence Learning with Neural Networkshttps://arxiv.org/abs/1409.3215
引用本页: 词向量(词嵌入). TellWorld, https://www.tellworld.net/zh/learn/word-embeddings. 更新于 2026-11-07