##提供一个完整的Transformer架构推理程序,字典随便建的,嵌入向量矩阵、输出矩阵等都是随机产生的,未经过训练,缩小版的GPT,重在掌握注意力机制运算过程,其输出结果也是经常变的,因为没有训练。

import numpy as np

# --------------------------
# 步骤1:构建词典(把字变成ID)
# --------------------------
vocab = {"我":0, "喜":1, "欢":2, "中":3, "国":4, "美":5, "食":6, "[END]":7}
vocab_size = len(vocab)  # 词典大小
d_model = 8              # 每个token用8维向量(小尺寸方便演示)

# 输入句子:我喜欢中国 → 转成ID
input_text = "我喜欢中国"
input_ids = [vocab[c] for c in input_text]
seq_len = len(input_ids)  # 自动匹配实际token长度,取消硬编码
print("输入文字:", input_text)
print("输入token ID:", input_ids)
print("实际序列长度:", seq_len)

# --------------------------
# 步骤2:词嵌入(文字 → 向量)
# --------------------------
# 随机初始化嵌入层
embedding = np.random.randn(vocab_size, d_model)
x = embedding[input_ids]  # 形状:(5, 8)
print("\n输入变成向量形状:", x.shape)

# --------------------------
# 步骤3:Transformer 核心 = 标准自注意力机制
# --------------------------
# 定义稳定的softmax函数(防止指数爆炸)
def softmax(x):
    exp_x = np.exp(x - np.max(x, axis=-1, keepdims=True))  # 减去最大值保证数值稳定
    return exp_x / np.sum(exp_x, axis=-1, keepdims=True)

# 初始化 QKV 权重矩阵
Wq = np.random.randn(d_model, d_model)
Wk = np.random.randn(d_model, d_model)
Wv = np.random.randn(d_model, d_model)

# 计算 Q K V
Q = x @ Wq
K = x @ Wk
V = x @ Wv

# 计算标准注意力分数 + softmax归一化
scores = Q @ K.T / np.sqrt(d_model)  # 形状:(5,5)
attention_weights = softmax(scores)  # 注意力权重(归一化到0-1,和为1)
attention = attention_weights @ V    # 标准自注意力输出,形状:(5,8)

# --------------------------
# 步骤4:输出层 → 预测下一个词
# --------------------------
output_layer = np.random.randn(d_model, vocab_size)
logits = attention[-1] @ output_layer  # 取最后一个token预测下一个词
pred_id = np.argmax(logits)

# 把预测ID转回文字
idx2word = {v:k for k,v in vocab.items()}
pred_word = idx2word[pred_id]

# --------------------------
# 最终输出
# --------------------------
print("\n" + "="*50)
print(f"输入:{input_text}")
print(f"Transformer 预测下一个词:【 {pred_word} 】")
print(f"完整句子推测:{input_text} → {pred_word}")


输入文字: 我喜欢中国
输入token ID: [0, 1, 2, 3, 4]
实际序列长度: 5
输入变成向量形状: (5, 8)
==================================================
输入:我喜欢中国
Transformer 预测下一个词:【 食 】
完整句子推测:我喜欢中国 → 食
 

更多推荐