大模型(如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
  1. 最终输出向量融合了:
    词根本义(约30%)
    上下文信息(约60%)
    语法结构(约10%)

5. 可视化理解

在这里插入图片描述

模型通过**语境指针**自动选择正确分支,相似度计算如:
- sim("bank", "loan") > 0.7(金融)
- sim("bank", "shore") > 0.8(地理)

总结

大模型通过动态语境建模解决多义词问题:

  1. 抛弃静态词向量
  2. 用Transformer实时生成语境化嵌入
  3. 相同拼写词在不同句子中获得截然不同的向量表示
  4. 语义区分精度可达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. 负采样:高效训练关键
# 负采样示例:1个正样本 + k个负样本
neg_samples = random.sample(exclude=[context_word], k=5)
  1. 子词处理(处理未登录词)
  • FastText:vec(“banking”) = vec(“bank”) + vec(“ing”)
  • BPE:将"banking"拆分为[“bank”, “ing”]
  1. 上下文窗口
  • 小窗口(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. 现代演进

  1. 动态向量:BERT等模型生成上下文相关向量
# BERT风格动态嵌入
context_vec = transformer("river bank")[position_of_bank]
  1. 多语言对齐:共享跨语言向量空间
  • vec(“bank”)_en ≈ vec(“银行”)_zh

初始嵌入向量本质是语义空间的坐标,通过大规模语料训练,使相似语义的词在向量空间中靠近,为后续神经网络提供富含语义的数值表示。

Logo

更多推荐