词嵌入是一种将文本中的词(或短语)转换为计算机可以处理的稠密、低维数值向量的技术,这个向量能够捕捉词的语义和语法信息。

为什么要词嵌入?—— 从问题出发
在计算机看来,文字只是一串符号,为了让计算机“理解”语言,我们需要将文字数字化,传统方法有严重缺陷:
-
独热编码
- 方法:假设词汇表有10万个词,每个词就是一个长度为10万的向量,只有自己对应的位置是1,其他全是0。
- 问题:
- 维度灾难:向量维度极高(等于词汇表大小),效率低下。
- 语义缺失:所有向量彼此正交。“国王”和“君主”的向量点积为0,与“香蕉”的向量点积也为0,计算机无法知道前两个词意思相近。
-
基于词频的表示
- 方法:用文档中词的出现频率或TF-IDF等作为向量。
- 问题:主要反映词在文档中的重要性,但无法捕捉词本身的含义和词与词之间的关系。
词嵌入就是为了解决这些问题而生的。
词嵌入的核心思想与特点
-
稠密低维向量:
- 向量维度通常在50-300维,而不是数万维,每个维度不再代表一个具体的词,而是代表一个抽象的“语义特征”。
- 比喻:想象我们用“性别”、“高贵程度”、“年龄”、“是否生物”等几十个特征来描述一个词,国王”可能表示为
[1.0, 0.9, 0.7, 1.0, ...],而“王后”可能表示为[0.0, 0.9, 0.6, 1.0, ...]。
-
语义蕴含在向量空间中:
- 语义相似的词,它们的向量在空间中的距离很近(余弦相似度高)。
- 例子:
vec(“猫”)和vec(“狗”)的距离,会比vec(“猫”)和vec(“汽车”)的距离近得多。
-
可捕捉复杂的语义关系:
- 这是词嵌入最神奇的地方,向量空间中的方向可以对应特定的语义关系。
- 经典范例(类比推理):
vec(“国王”) - vec(“男人”) + vec(“女人”) ≈ vec(“王后”) vec(“巴黎”) - vec(“法国”) + vec(“德国”) ≈ vec(“柏林”)这意味着“性别”关系或“首都-国家”关系在向量空间中表现为一个大致稳定的向量偏移。
词嵌入是如何获得的?(训练方式)
词嵌入不是人工设计的,而是通过让模型在大量文本数据上学习得到的,核心原则是:上下文相似的词,其语义也相似。
两种经典的学习范式:
-
基于计数的方法:
- 先统计一个词与其它词在固定窗口内共现的频率,形成一个巨大的共现矩阵,然后通过矩阵分解(如SVD)降维得到稠密向量。
- 代表:GloVe模型,它结合了全局统计信息和局部上下文窗口的优点。
-
基于预测的方法:
- 训练一个神经网络,通过一个词的上下文来预测这个词(Skip-gram),或者通过一个词来预测其上下文(CBOW)。
- 代表:Word2Vec模型(由Google在2013年提出,极大推动了词嵌入的普及)。
现代发展:后来的模型(如ELMo, BERT, GPT)生成的是上下文相关的词嵌入,即同一个词在不同句子中会有不同的向量表示。“苹果”在“吃苹果”和“苹果手机”中的向量是不同的,这比传统的静态词嵌入(一个词只有一个固定向量)更加强大。
词嵌入有什么用?(应用场景)
词嵌入是现代NLP任务的基石,几乎无处不在:
- 文本相似度计算:搜索引擎、推荐系统(相似文章/商品)。
- 作为下游模型的输入:情感分析、文本分类、机器翻译等任务的第一步就是将文本通过词嵌入转换为向量序列。
- 词语义搜索与智能问答:理解查询的真实意图,而非简单关键词匹配。
- 消除歧义:结合上下文模型,区分多义词。
你可以把词嵌入理解为给每个词分配的 “数字身份证”,但这个身份证的号码(向量)不是随机的,而是根据它在语言海洋中的“社交关系”(上下文)学习得来的。语义相近、用法相似的词,它们的“身份证”也会很接近。
这种表示方法成功地将人类的语言符号映射到了一个有意义的数学空间,为所有后续的深度语言智能提供了坚实的基础。