[智能体-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 个数才能定位词语在空间位置。
