词嵌入是将文本中的词语(或更小的单位如字、子词)映射为计算机能够理解和处理的实数向量的技术,这些向量能够捕捉词语的语义(含义)和语法(用法)信息。

简单说,它把单词变成一串有意义的数字。
为什么要用词嵌入?(动机)
在词嵌入出现之前,常用的文本表示方法是:
- 独热编码:每个词用一个很长的向量表示,向量长度等于词汇表大小,只有该词对应的位置是1,其余全是0。
- 问题:
- 维度灾难:词汇表动辄几万、几十万,向量维度极高,计算和存储成本巨大。
- 语义鸿沟:每个词向量彼此正交(点积为0),无法表达“猫”和“狗”都是动物、比“石头”更相似这样的关系。
- 问题:
词嵌入就是为了解决这些问题而生的,它的核心思想是:将每个词映射到一个低维、稠密的连续向量空间,并且在这个空间中,语义相近的词,其向量在空间中的位置也相近。
核心思想与类比
-
从“字典索引”到“语义地图”:
- 独热编码像一本字典,它只告诉你“苹果”这个词在词汇表的第8页,和“香蕉”(第100页)毫无关系。
- 词嵌入像一张语义地图,在这张地图上,每个词是一个点。“苹果”和“香蕉”这两个点会靠得很近(因为它们都是水果),“北京”和“上海”也很近(都是城市),但它们离“水果”区域就比较远,向量就是这个词在这个地图上的坐标。
-
关键特性:
- 低维稠密:向量维度通常在50到1000之间,每个维度都是一个实数(如0.2, -1.5),而不是0或1。
- 语义可计算:词语之间的关系可以通过向量运算来体现,最著名的例子:
vec(“国王”) - vec(“男人”) + vec(“女人”) ≈ vec(“女王”)这个式子表明,“国王”减去“男性”属性再加上“女性”属性,得到的结果向量在语义上最接近“女王”。
词向量是怎么得到的?(主要技术)
词嵌入模型通过在大量文本数据(如维基百科、新闻文章)上学习得到,核心原理是 “一个词的语义由其上下文决定”(分布假说)。
-
Word2Vec(最经典的模型,2013年由Google提出):
- CBOW:用上下文词语的向量来预测中心词,给定“__ 很好”,预测中心词是“天气”。
- Skip-gram:用中心词的向量来预测其上下文词语,给定“天气”,预测它周围可能出现的词如“、“很好”。
- 通过这种预测任务,模型不断调整词向量,使得具有相似上下文的词(即语义相近的词)获得相似的向量。
-
GloVe:通过统计词语的共现矩阵(两个词在固定窗口内共同出现的频率),并对其进行矩阵分解来得到词向量,它结合了全局统计信息和局部上下文窗口的优点。
-
上下文相关的词嵌入(现代主流):
- ELMo, BERT, GPT 等模型产生的词向量是动态的,同一个词在不同的句子中会有不同的向量表示。
- “苹果”在“我吃了一个苹果”和“苹果公司发布了新手机”中,得到的向量是不同的,因为它能结合整句话的语境来理解多义词。
词嵌入能做什么?(应用)
词嵌入是所有现代NLP系统的基石,应用极其广泛:
- 语义相似度计算:计算两个词或句子的相似度,用于搜索、推荐系统。
- 文本分类:将文档向量化(可通过词向量平均或组合),然后进行分类(如情感分析、新闻分类)。
- 机器翻译:作为神经网络翻译模型的输入表示。
- 命名实体识别、问答系统:提供词汇的深层语义特征。
- 作为预训练模型的基础:为BERT等大型模型提供初始化的词表示。
总结对比
| 特性 | 传统方法(如独热编码) | 词嵌入 |
|---|---|---|
| 维度 | 高维稀疏(数万维以上) | 低维稠密(数百维) |
| 语义信息 | 无,所有词相互独立 | 有,能捕捉语义和语法关系 |
| 相似度 | 无法计算(向量正交) | 可计算(余弦相似度等) |
| 示例 | 猫 = [0,0,...,1,0,0] 狗 = [0,0,...,0,1,0] |
猫 ≈ [0.2, -0.5, 0.8, ...] 狗 ≈ [0.3, -0.4, 0.7, ...] |
词嵌入是让计算机“理解”词语含义的桥梁,它将离散的符号(文字)转换为连续的、富含语义的数学表示,从而解锁了自然语言处理的巨大潜力。