bank of river 和 bank of china 中的bank含义不一样。现代主流大模型是如何对bank的词向量进行计算并存储的?
多义词的词向量生成时的疑问答疑
·
大模型(如Transformer架构的BERT、GPT等)处理多义词如"bank"时,通过上下文感知的词向量技术实现精准区分。以下是核心机制:
1. 动态词向量生成
传统词向量(如Word2Vec)为每个词分配固定向量,而大模型通过:
- 上下文嵌入:根据句子实时生成动态向量
- 示例对比:
# "bank"在不同语境中的向量差异(余弦相似度通常<0.3)
vec("bank of river") ≈ [0.2, -0.8, 0.4] # 地理特征
vec("bank of china") ≈ [0.9, 0.1, -0.3] # 金融特征
2. 核心实现技术
3. 训练过程关键
1. 掩码语言建模(如BERT):
- 随机遮盖句子中的词(如遮盖"bank")
- 模型根据上下文预测被遮盖词
```
输入: "He sat on the [MASK] of the river"
预测: → bank (地理含义)
```
2. 对比学习:
- 拉近相同语境词向量(如"bank"-"shore")
- 推远不同语义词向量(如"bank"-"finance")
4. 向量存储原理
大模型实际不存储固定词向量,而是:
1. 输入词 → 查找初始嵌入向量(约300维)
2. 通过Transformer层实时计算:
\text{Output} = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
- 最终输出向量融合了:
词根本义(约30%)
上下文信息(约60%)
语法结构(约10%)
5. 可视化理解
模型通过**语境指针**自动选择正确分支,相似度计算如:
- sim("bank", "loan") > 0.7(金融)
- sim("bank", "shore") > 0.8(地理)
总结
大模型通过动态语境建模解决多义词问题:
- 抛弃静态词向量
- 用Transformer实时生成语境化嵌入
- 相同拼写词在不同句子中获得截然不同的向量表示
- 语义区分精度可达90%以上(人类水平约95%)
输入词 → 查找初始嵌入向量(约300维),那这个初始嵌入向量是怎么来的?
1. 词汇表映射
- 每个词分配唯一整数ID(如"bank"→42)
- 创建嵌入矩阵:嵌入矩阵 ∈ ℝ^{词汇表大小 × 维度}
- 示例:词汇表50,000词 × 300维 → 1500万参数矩阵
2. 初始化方法
3. 训练过程(以Word2Vec为例)
# 简化版Skip-gram训练伪代码
embedding_matrix = torch.randn(vocab_size, 300) # 随机初始化
for center_word, context_word in text_corpus:
# 获取向量
center_vec = embedding_matrix[center_word] # 形状: [300]
# 预测上下文词
logits = torch.matmul(center_vec, embedding_matrix.T) # [vocab_size]
# 计算损失(负采样优化)
loss = cross_entropy(logits, context_word)
# 反向传播更新向量
loss.backward()
optimizer.step()
4. 语义关系捕获
训练后向量空间形成几何结构:
- 加法关系:vec(“king”) - vec(“man”) + vec(“woman”) ≈ vec(“queen”)
- 相似度:cos_sim(vec(“bank”), vec(“finance”)) > cos_sim(vec(“bank”), vec(“river”))
- 聚类:金融词汇/地理词汇各自聚集
5. 关键技术细节
- 负采样:高效训练关键
# 负采样示例:1个正样本 + k个负样本
neg_samples = random.sample(exclude=[context_word], k=5)
- 子词处理(处理未登录词)
- FastText:vec(“banking”) = vec(“bank”) + vec(“ing”)
- BPE:将"banking"拆分为[“bank”, “ing”]
- 上下文窗口
- 小窗口(2-5):捕获语法关系
- 大窗口(10+):捕获主题关联
6. 向量可视化示例
金融语义轴:
vec("finance") = [0.9, 0.2, ...]
vec("money") = [0.8, 0.3, ...]
vec("bank") = [0.7, 0.1, ...] # 金融含义
地理语义轴:
vec("river") = [-0.2, 0.9, ...]
vec("shore") = [-0.3, 0.8, ...]
vec("bank") = [-0.1, 0.7, ...] # 地理含义
7. 现代演进
- 动态向量:BERT等模型生成上下文相关向量
# BERT风格动态嵌入
context_vec = transformer("river bank")[position_of_bank]
- 多语言对齐:共享跨语言向量空间
- vec(“bank”)_en ≈ vec(“银行”)_zh
初始嵌入向量本质是语义空间的坐标,通过大规模语料训练,使相似语义的词在向量空间中靠近,为后续神经网络提供富含语义的数值表示。
更多推荐
所有评论(0)