[智能体-281]:静态词向量表的内容、使用方法详解、代码示例
·
静态词向量表(Word2Vec/GloVe/FastText)
特点:一个词语永久对应唯一向量,不随上下文变化

一、静态词向量表组成内容
由两部分:词索引字典 + 嵌入权重矩阵
- vocab 字典:word → index 包含:
PAD、UNK、常规词汇 - emb_matrix:shape=[词总数 V, 向量维度 d]`,每行是一个词向量
示例(d=3 维)
表格
| index | word | vector |
|---|---|---|
| 0 | [PAD] | [0.,0.,0.] |
| 1 | [UNK] | [0.1,-0.2,0.3] |
| 2 | 苹果 | [0.52,0.13,-0.61] |
| 3 | 香蕉 | [0.48,0.15,-0.59] |
| 4 | 汽车 | [-0.72,0.33,0.11] |
二、使用方法
1. 文本预处理步骤
1)分词 → 词语列表
2)词语查表转 id:存在取 index,不存在→UNK(1)
3)短句补长→多余位置填PAD(0)
4)id 列表去词向量表索引对应向量,得到句子矩阵
示例:苹果 汽车
1. 分词:["苹果","汽车"]
2. 转 id:[2,4]
3. 固定长度 5 补 PAD:[2,4,0,0,0]
4. 查表取出对应 3 维向量
三、Python 简易代码示例
python
运行
import numpy as np
# 1.构造静态词向量表,字典:通过单词的名称找到其索引。
vocab = {
"[PAD]":0,
"[UNK]":1,
"苹果":2,
"香蕉":3,
"汽车":4
}
# 词向量矩阵 V=5, dim=3,通过索引,找到其对应的N维向量。
emb_matrix = np.array([
[0.0, 0.0, 0.0], # PAD
[0.1, -0.2, 0.3], # UNK
[0.52, 0.13, -0.61], # 苹果
[0.48, 0.15, -0.59], # 香蕉
[-0.72, 0.33, 0.11] # 汽车
])
# 2.句子转id函数
def text2ids(word_list, max_len=5):
ids = []
for w in word_list:
if w in vocab:
ids.append(vocab[w])
else:
ids.append(vocab["[UNK]"])
# 截断+补PAD
if len(ids) > max_len:
ids = ids[:max_len]
else:
ids += [vocab["[PAD]"]]*(max_len-len(ids))
return np.array(ids)
# 3.根据id取词向量
def ids2emb(ids):
return emb_matrix[ids]
# 测试
sent = ["苹果","汽车","飞机"] #飞机不在词表→UNK
word_ids = text2ids(sent,max_len=5)
sent_emb = ids2emb(word_ids)
print("词语id:",word_ids)
print("句子向量:\n",sent_emb)
四、输出结果说明
plaintext
词语id: [2 4 1 0 0]
句子向量:
[[ 0.52 0.13 -0.61]
[-0.72 0.33 0.11]
[ 0.1 -0.2 0.3 ]
[ 0. 0. 0. ]
[ 0. 0. 0. ]]
- 飞机:无词汇→
UNK(1)向量 - 后两位补
PAD(0)全零向量
五、真实预训练词向量使用补充
- Word2vec/GloVe 文件加载:读取 txt 词向量文件,构建
vocab字典+emb矩阵 - 两种使用模式
- 冻结模式:训练模型时词向量表固定不变(经典静态用法)
- 微调模式:下游任务反向更新词向量数值,不再是原始静态向量
词向量表数值含义(静态词向量)
词向量里每一个浮点数,代表词语在某一个隐语义维度上的权重 / 坐标,整体 d 个数字 = 词语在 d 维语义空间的坐标。
1. 一句话总结
plaintext
[0.52, 0.13, -0.61](苹果)
三个数 = 3维语义空间的(x,y,z)坐标
- 正数:在该语义维度偏向正向特征
- 负数:在该语义维度偏向反向特征
- 绝对值大小:该词语在这个语义特征上强弱程度
2. 具象举例(3 个维度人为释义,方便理解)
假设(实际是神经网络模型推算出来的,并不是人为定义的)预先隐含 3 个语义维度:
维度 1:水果属性|
维度 2:电子产品属性|
维度 3:交通工具属性
表格
| 词语 | 向量 | 释义拆解 |
|---|---|---|
| 苹果 | [0.52, 0.13, -0.61] | 水果分高 (+0.52)、微弱电子 (+0.13)、非交通工具 (-0.61) |
| 香蕉 | [0.48, 0.15, -0.59] | 水果分高,和苹果维度数值接近→空间距离近、语义相近 |
| 汽车 | [-0.72, 0.33, 0.11] | 水果极低 (-0.72)、偏交通工具 (+0.11) |
模型不会人为定义维度含义,
维度是模型自学习出来的隐含语义特征,
人没法直接看懂单个维度代表什么。
3. 数值的来源
数值由无监督训练(Word2Vec/GloVe)通过词语上下文共现规律学习得到:
- 经常出现在相同上下文的词,在词向量表中各维度数值整体接近,向量距离小;
- 几乎不共现的词,各维度数值差异大,向量距离大。

4. 数值作用
- 算相似度:两个词向量做余弦距离,数值越贴近,词义越像;
- 送入神经网络:作为词语的数字化特征,供分类、分词、翻译等任务计算。
5. 特殊向量数值含义
- PAD=[0,0,0]:填充占位,无任何语义信息;
- UNK 随机小数:未知词的平均语义表征。
补充:单个数字没有独立语义
不能单独拿某一位数字解释词义,语义是整组向量共同组合表达。
例:只看第一个数 0.52 不知道含义,结合全部 3 个数才能定位词语在空间位置。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)