Created
October 2, 2024 07:18
-
-
Save nickfox-taterli/13c636a60afb9488aba09c2ff74814fe to your computer and use it in GitHub Desktop.
词的向量表示
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "91cbae60-d473-4881-aa52-8c54936c5d8b", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" 词汇表: ['Mazong', 'Kage', 'Teacher', 'Xiaobing', 'Xiaoxue', 'is', 'Student', 'Boss', 'Niuzong']\n", | |
" 词汇到索引的字典: {'Mazong': 0, 'Kage': 1, 'Teacher': 2, 'Xiaobing': 3, 'Xiaoxue': 4, 'is': 5, 'Student': 6, 'Boss': 7, 'Niuzong': 8}\n", | |
" 索引到词汇的字典: {0: 'Mazong', 1: 'Kage', 2: 'Teacher', 3: 'Xiaobing', 4: 'Xiaoxue', 5: 'is', 6: 'Student', 7: 'Boss', 8: 'Niuzong'}\n", | |
" 词汇表大小: 9\n" | |
] | |
} | |
], | |
"source": [ | |
"# 定义一个句子列表,后面会用这些句子来训练 CBOW 和 Skip-Gram 模型\n", | |
"sentences = [\"Kage is Teacher\", \"Mazong is Boss\", \"Niuzong is Boss\",\n", | |
" \"Xiaobing is Student\", \"Xiaoxue is Student\",]\n", | |
"# 将所有句子连接在一起,然后用空格分隔成多个单词\n", | |
"words = ' '.join(sentences).split()\n", | |
"# 构建词汇表,去除重复的词\n", | |
"word_list = list(set(words))\n", | |
"# 创建一个字典,将每个词映射到一个唯一的索引\n", | |
"word_to_idx = {word: idx for idx, word in enumerate(word_list)}\n", | |
"# 创建一个字典,将每个索引映射到对应的词\n", | |
"idx_to_word = {idx: word for idx, word in enumerate(word_list)}\n", | |
"voc_size = len(word_list) # 计算词汇表的大小\n", | |
"print(\" 词汇表:\", word_list) # 输出词汇表\n", | |
"print(\" 词汇到索引的字典:\", word_to_idx) # 输出词汇到索引的字典\n", | |
"print(\" 索引到词汇的字典:\", idx_to_word) # 输出索引到词汇的字典\n", | |
"print(\" 词汇表大小:\", voc_size) # 输出词汇表大小" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "035b1cc5-1c0f-4ad1-823d-2d87e3bd6db1", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Skip-Gram 数据样例(未编码): [('is', 'Kage'), ('Teacher', 'Kage'), ('Kage', 'is')]\n" | |
] | |
} | |
], | |
"source": [ | |
"# 生成 Skip-Gram 训练数据\n", | |
"def create_skipgram_dataset(sentences, window_size=2):\n", | |
" data = [] # 初始化数据\n", | |
" for sentence in sentences: # 遍历句子\n", | |
" sentence = sentence.split() # 将句子分割成单词列表\n", | |
" for idx, word in enumerate(sentence): # 遍历单词及其索引\n", | |
" # 获取相邻的单词,将当前单词前后各 N 个单词作为相邻单词\n", | |
" for neighbor in sentence[max(idx - window_size, 0): \n", | |
" min(idx + window_size + 1, len(sentence))]:\n", | |
" if neighbor != word: # 排除当前单词本身\n", | |
" # 将相邻单词与当前单词作为一组训练数据\n", | |
" data.append((neighbor, word))\n", | |
" return data\n", | |
"\n", | |
"# 使用函数创建 Skip-Gram 训练数据\n", | |
"skipgram_data = create_skipgram_dataset(sentences)\n", | |
"# 打印未编码的 Skip-Gram 数据样例(前 3 个)\n", | |
"print(\"Skip-Gram 数据样例(未编码):\", skipgram_data[:3])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"id": "14442862-c272-4351-b58c-60f3a696169b", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"One-Hot 编码前的单词: Teacher\n", | |
"One-Hot 编码后的向量: tensor([0., 0., 1., 0., 0., 0., 0., 0., 0.])\n", | |
"Skip-Gram 数据样例(已编码): [(tensor([0., 0., 0., 0., 0., 1., 0., 0., 0.]), 1), (tensor([0., 0., 1., 0., 0., 0., 0., 0., 0.]), 1), (tensor([0., 1., 0., 0., 0., 0., 0., 0., 0.]), 5)]\n" | |
] | |
} | |
], | |
"source": [ | |
"# 定义 One-Hot 编码函数\n", | |
"import torch # 导入 torch 库\n", | |
"def one_hot_encoding(word, word_to_idx): \n", | |
" tensor = torch.zeros(len(word_to_idx)) # 创建一个长度与词汇表相同的全 0 张量 \n", | |
" tensor[word_to_idx[word]] = 1 # 将对应词的索引设为 1\n", | |
" return tensor # 返回生成的 One-Hot 向量\n", | |
"# 展示 One-Hot 编码前后的数据\n", | |
"word_example = \"Teacher\"\n", | |
"print(\"One-Hot 编码前的单词:\", word_example)\n", | |
"print(\"One-Hot 编码后的向量:\", one_hot_encoding(word_example, word_to_idx))\n", | |
"# 展示编码后的 Skip-Gram 训练数据样例\n", | |
"print(\"Skip-Gram 数据样例(已编码):\", [(one_hot_encoding(context, word_to_idx), \n", | |
" word_to_idx[target]) for context, target in skipgram_data[:3]])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"id": "9f548c85-0df0-4629-970b-ffe77b44e318", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Skip-Gram 模型: SkipGram(\n", | |
" (input_to_hidden): Linear(in_features=9, out_features=2, bias=False)\n", | |
" (hidden_to_output): Linear(in_features=2, out_features=9, bias=False)\n", | |
")\n" | |
] | |
} | |
], | |
"source": [ | |
"# 定义 Skip-Gram 类\n", | |
"import torch.nn as nn # 导入 neural network\n", | |
"class SkipGram(nn.Module):\n", | |
" def __init__(self, voc_size, embedding_size):\n", | |
" super(SkipGram, self).__init__()\n", | |
" # 从词汇表大小到嵌入层大小(维度)的线性层(权重矩阵)\n", | |
" self.input_to_hidden = nn.Linear(voc_size, embedding_size, bias=False) \n", | |
" # 从嵌入层大小(维度)到词汇表大小的线性层(权重矩阵)\n", | |
" self.hidden_to_output = nn.Linear(embedding_size, voc_size, bias=False) \n", | |
" def forward(self, X): # 前向传播的方式,X 形状为 (batch_size, voc_size) \n", | |
" # 通过隐藏层,hidden 形状为 (batch_size, embedding_size)\n", | |
" hidden = self.input_to_hidden(X) \n", | |
" # 通过输出层,output_layer 形状为 (batch_size, voc_size)\n", | |
" output = self.hidden_to_output(hidden) \n", | |
" return output \n", | |
"embedding_size = 2 # 设定嵌入层的大小,这里选择 2 是为了方便展示\n", | |
"skipgram_model = SkipGram(voc_size, embedding_size) # 实例化 Skip-Gram 模型\n", | |
"print(\"Skip-Gram 模型:\", skipgram_model)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"id": "fea57e0d-4e84-4c84-acec-6a1edaa58115", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Epoch: 100, Loss: 2.1665948271751403\n", | |
"Epoch: 200, Loss: 2.129493526617686\n", | |
"Epoch: 300, Loss: 2.080868907769521\n", | |
"Epoch: 400, Loss: 2.0172440807024636\n", | |
"Epoch: 500, Loss: 1.945111099878947\n", | |
"Epoch: 600, Loss: 1.8824358582496643\n", | |
"Epoch: 700, Loss: 1.840877217054367\n", | |
"Epoch: 800, Loss: 1.815254267056783\n", | |
"Epoch: 900, Loss: 1.7969126502672832\n", | |
"Epoch: 1000, Loss: 1.781453808148702\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHDCAYAAADC/9uyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZvklEQVR4nO3deVhU9eLH8few7yCiqIgKiuaG+66lZdc0Uytzu6mZu5a2l5V12/1ZWVZqpWbp1TbLrLQs03IJdzTNJVHcUBQQGBYZtvP7g5obuYEKB4bP63nmeZqz8Rm51/l4zvecr8UwDAMRERERB+VkdgARERGRkqSyIyIiIg5NZUdEREQcmsqOiIiIODSVHREREXFoKjsiIiLi0FR2RERExKGp7IiIiIhDU9kRERERh6ayIyJSyvLy8s5bpofZi5QclR0RuaR169axcuXKqz7OuXPnLrrurbfeIiUl5ZL7z58/n/Dw8KvO8XcJCQk89dRTxMTEFHvf7du38/3339vfb968mcWLF192v4MHDxIWFsbatWsLLR8+fDjXXXcdhmGwf//+S/55iUjxqOyIyCXt27eP22+/nY8//ti+LCMjg3nz5pGUlHTe9p9//jlffvnlectvuukmnn/++fOWx8TEMHnyZHbs2HHJHM7OzuedEalXrx7Ozs64uLgUelksFmw22wWPs2bNGvLz84GCAvbyyy9z6tSpS/7sC5k3bx6PP/64/f2yZct44oknLrvfnDlz8PHxoV27doWWV65cGS8vLwzD4O6772bUqFHFziQiF6ayIyKXNHbsWN555x2GDRtmLzF5eXmMHj2a48ePA/D4448TFRUFFJwJWr9+faFjxMTEEBUVxfXXXw/AoUOH+OOPPzhy5AiLFi0iIiKC8PBwjhw5wqFDh9izZw/JycmFjvFXifk7T09P5s+fT25urv0VExODxWLB3d39vM9y5MgRbrrpJvuZKhcXF6CgaBSXl5cXAQEB9vceHh4X/Jl/d/r0ad5//33ef/99DMMoVMj8/f3x9PTEycmJxYsXYxgG6enpxc4lIudzMTuAiJR9o0ePJjExkYyMDKDgix0KygbAypUradq0KR06dMDZ2RlnZ+dC+8+ePZvbbruNrl27kpKSwpgxY9i0aROurq5YrVY8PT1p3rw5UDB2JScnhwULFjBw4EBWrlzJjh072L17N6mpqbzwwgs0atSIO++8k/z8fDIzMwtdArNarRiGgWEY55WjDz/8kGbNmtG7d28AnJwK/r3n6upq3yY/Px+bzYarq6u9DF2IxWI57/iX8+ijj3LHHXfQuXNnnnvuORYsWMCOHTsIDAwECkrkiRMnOHjwIHXq1OHGG29k6tSp3HbbbcX6OSJSmMqOiBTJlClT7P/t5uZWaN0/y83fpaam8uGHH9rHqHTt2pWJEyfy008/cebMGWrUqMGePXsICwu74P7Hjx8nOjqauLg4srOz2bFjB15eXgDYbDYmTpzIxIkTz9vPZrPZSxkUlKBZs2aRmJh4XkmpX7/+eft//vnn9O/f3/5+9OjRzJs377zt/nmsf75PTU3Fz8+POXPmsHLlSn777TcSEhJ4++23efDBB/n222/Zv38/y5cvZ+/evTRu3JgWLVrQrFkzhg0bRqNGjS745yIiRaeyIyIX1aNHD44dO4azszO33HILr732mn2dxWIp0h1EL730Ej169KBZs2Zs3LiRmJgYWrVqRUJCAh9//DHNmjWjUqVKpKSk4OfnZz/b8pexY8cyduxY/vvf//L000+zbNkyAFJSUli9evVFf25GRkahsvPcc8/h6+tLdHS0/YzN8ePHadu2Ldu2bSMkJAQoOLOTlZVF1apVCx3P3d2d2rVrc+TIEQAeeeQRtm3bxs8//wzAf/7zH/773//aBzu/88473H///fZLW59//jlJSUnUrFkTJycnIiMjeeKJJ+jZsyd16tShTZs2pKWlcfTo0UKF6ULjokSkeFR2ROSiHnjgAWw2G++88w7x8fH25dnZ2Re8TPRPv//+O6+//jqjRo3iueee46uvvuLpp5/mnXfe4bPPPiMzMxMvLy9q166N1Wrl2LFjhIaGXjZXUlISM2fO5IUXXrjoNqNHj+b9998HIDo6mjfeeIPly5dTs2ZN+zYnT54EICwszH4p6WIudfaqKPu9+eabWCwWatSoQWRkJLNnz8bZ2ZkffvgBgG+++YYvv/ySP/74g127drFjxw5++uknduzYwfHjx6lRo8YV/XwRUdkRkUvo2bMnAF999VWhMy5/Day93IDc6667jnvuuYfQ0FD27duHzWbj4YcfxtXVlYceeogbbriBmJgY8vLyqFKlin0M0IWkpKSQlJRE8+bNufHGG6lSpQqdOnViw4YN523bv3//Qmd1GjZsyNat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M8nLyzMxlbRp04a5c+fa38fGxmKz2QgMDCy1DCo7clHnzp2jd+/e9O3bl9tvv5309HQAvL29sVgsJqereNavX09ubq79/SOPPEL79u11a61Jbr31Vu6//37effddevfuzZdffsmuXbv4/PPPzY5WYXXp0oXhw4fTsmVLgoODmTdvHtWqVSMyMtLsaBXa9ddfj9VqZcGCBYwYMYKXX36Z7t274+zsXGoZVHbkon744Qf27t3L3r17z2vlderUMS9YBVWzZs1C7318fAgKCrJfRpHSVblyZVauXMkjjzzCQw89RPXq1fnss88IDQ01O1qFdeedd7Jv3z7efPNNTp06RZMmTVi2bJkuv5vMxcWFefPmMXjwYB599FGcnJz4+eefSzWDxdDILRERESlh8fHxbN++nfbt21O5cuVS/dkqOyIiIuLQdDeWiIiIODSVHREREXFoKjsiIiLi0FR2RERExKGp7IhIuZSfn3/esqSkpGIdIzY2ltTU1GsVSUTKKJUdESl3bDYbISEh55Wb0aNHM3r06Avuc+DAgfOepPvSSy9x3333lVhOESkb9FBBESk3cnJyyM3NZdOmTYSHh1O5cmVyc3PJz88nPj6eb7/9lho1anDmzBmqVq1aaN+hQ4fStWtX+4zx2dnZfPPNN/z0009mfBQRKUV6zo6IlBuffvopDz/8MMnJyXh5eeHt7U12djaPPPIIP//8M/7+/nTt2pV58+axatUq/Pz87PsePHiQ1q1b89FHH9GvXz8+/fRTBg8eXGibv6xcuVJzXIk4EF3GEpFyY+DAgRw7doyqVauyefNmDh06RFxcHAkJCezYsYO33nqLkSNH0r59e1q1asXq1avt+0ZERPDWW2/x6KOPkpOTw0svvcSnn35KSkqK/fXjjz/i7OxM27ZtTfyUInKtqeyISLmydOlSmjRpwv79+7nxxhuZP38+s2bN4s477yQnJweAN954g1GjRnHrrbeyfft2+77Dhw9nw4YNvPfee3h6etK/f38WLFjA/fffD8DXX39Nz549cXHRFX4RR6KyIyLlRkpKCk888QRTpkzBzc0NT09Phg0bxubNm1m9ejXx8fEAGIbBwIEDOXz4MK1atSp0jCpVqtCyZUveffddLBYLSUlJ9v2uv/56Hn744VL/XCJSsvTPFxEpNxISEjh69CgDBgzAycmJs2fP0rhxY77++mtcXFxwc3PjzJkzjB07lt9//51du3YV2j85OZnrr7+eNWvWUKVKFQBOnDhhv/385ptvLvXPJCIlT2d2RKTciIiIICsrixMnTrBw4UI6d+7MwYMHadiwIRaLhddee43WrVvToEEDoqKi8PT0LLT/jBkzCAkJsRcdgLVr1xIVFUVKSkopfxoRKS06syMi5UZubi5JSUkkJSWxe/duTpw4wfTp0+nQoQMAtWrVYvfu3fj7+5+374kTJ5gzZw6//vqrfdnq1avJycnhvvvu4+mnn+add94ptc8iIqVHZUdEyo0NGzYwatQoGjRogKurK4ZhUL9+fRo0aADAgAED7EUnJSUFHx8fXFxcyM/PZ9SoUdxzzz3Ur18fKHh68siRI5k9ezZdunShWbNmVK1alalTp2KxWEz7jCJy7ekyloiUG127diUmJoYVK1Zw//33U6NGDfr160fVqlWxWCykpaXZt12wYAH/+te/gII7uHbs2MHUqVMB+O677+jYsSMPPPAAt956K35+fvzwww/MmTOHO+64g7i4OFM+n4iUDJ3ZEZFyKTs7m6ysLPv7Tp06cdNNNxEYGIhhGKSmpjJ//nyg4IxPZGQk/v7+TJo0iUWLFvH+++9z11132fePiIhg48aNDBo0iO7du7Nz507c3d1L/XOJyLWnJyiLSIVy/Phx3NzcCA4OvuD6vLw8Tpw4Qe3atUs5mYiUFJUdERERcWgasyMiIiIOTWVHREREHJrKjoiIiDg0lR0RERFxaCo7IiIi4tBUdkRERMShqeyIiIiIQ1PZEREREYf2/8BV9d/8/vPuAAAAAElFTkSuQmCC", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# 训练 Skip-Gram 类\n", | |
"learning_rate = 0.001 # 设置学习速率\n", | |
"epochs = 1000 # 设置训练轮次\n", | |
"criterion = nn.CrossEntropyLoss() # 定义交叉熵损失函数\n", | |
"import torch.optim as optim # 导入随机梯度下降优化器\n", | |
"optimizer = optim.SGD(skipgram_model.parameters(), lr=learning_rate) \n", | |
"# 开始训练循环\n", | |
"loss_values = [] # 用于存储每轮的平均损失值\n", | |
"for epoch in range(epochs):\n", | |
" loss_sum = 0 # 初始化损失值\n", | |
" for context, target in skipgram_data: \n", | |
" X = one_hot_encoding(target, word_to_idx).float().unsqueeze(0) # 将中心词转换为 One-Hot 向量 \n", | |
" y_true = torch.tensor([word_to_idx[context]], dtype=torch.long) # 将周围词转换为索引值 \n", | |
" y_pred = skipgram_model(X) # 计算预测值\n", | |
" loss = criterion(y_pred, y_true) # 计算损失\n", | |
" loss_sum += loss.item() # 累积损失\n", | |
" optimizer.zero_grad() # 清空梯度\n", | |
" loss.backward() # 反向传播\n", | |
" optimizer.step() # 更新参数\n", | |
" if (epoch+1) % 100 == 0: # 输出每 100 轮的损失,并记录损失\n", | |
" print(f\"Epoch: {epoch+1}, Loss: {loss_sum/len(skipgram_data)}\") \n", | |
" loss_values.append(loss_sum / len(skipgram_data))\n", | |
"\n", | |
"# 绘制训练损失曲线\n", | |
"import matplotlib.pyplot as plt # 导入 matplotlib\n", | |
"# 绘制二维词向量图\n", | |
"plt.rcParams[\"font.family\"]=['SimHei'] # 用来设定字体样式\n", | |
"plt.rcParams['font.sans-serif']=['SimHei'] # 用来设定无衬线字体样式\n", | |
"plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号\n", | |
"plt.plot(range(1, epochs//100 + 1), loss_values) # 绘图\n", | |
"plt.title(' 训练损失曲线 ') # 图题\n", | |
"plt.xlabel(' 轮次 ') # X 轴 Label\n", | |
"plt.ylabel(' 损失 ') # Y 轴 Label\n", | |
"plt.show() # 显示图" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"id": "faac0a84-2fb6-4c91-90fa-083d6c9b8687", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Skip-Gram 词嵌入:\n", | |
"Mazong: [-0.51346415 -0.81978816]\n", | |
"Kage: [-0.26000515 -0.37364322]\n", | |
"Teacher: [-0.21203957 -0.4389536 ]\n", | |
"Xiaobing: [-0.9540318 -0.530556 ]\n", | |
"Xiaoxue: [-0.9426897 -0.6160345]\n", | |
"is: [-0.00406309 0.28992397]\n", | |
"Student: [-1.0121411 -0.3099521]\n", | |
"Boss: [ 0.23717818 -1.3456345 ]\n", | |
"Niuzong: [-0.5824819 -0.6812718]\n" | |
] | |
} | |
], | |
"source": [ | |
"# 输出 Skip-Gram 习得的词嵌入\n", | |
"print(\"Skip-Gram 词嵌入:\")\n", | |
"for word, idx in word_to_idx.items(): # 输出每个词的嵌入向量\n", | |
" print(f\"{word}: {skipgram_model.input_to_hidden.weight[:,idx].detach().numpy()}\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"id": "fe9482ee-590f-41ce-84ea-6bff3aa62f60", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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oSEAwN3dHbGxsWVuM3v2bJX569evo1mzZqW2VygUUCgU4rxcLn+JiomIiKiuqHEjRnK5HC4uLuK8RCKBVCrFkydP1No+Li4Ou3fvxoQJE0pts2DBApiZmYmTo6PjS9dNREREtV+NC0a6urqQyWQqywwMDJCdnV3utoWFhRg7dizGjx+P1157rdR2c+bMQUZGhjglJia+dN1ERERU+9W4U2mWlpaIiYlRWZaZmQl9ff1yt/3666+RlpaGxYsXl9lOJpMVC19ERERENW7EyNPTE+Hh4eJ8fHw8FAoFLC0ty9zut99+w9KlS7Fz507x+iQiIiKiiqhxwahLly6Qy+XYuHEjACA4OBg+Pj6QSqVIT09HQUFBsW2uXr2K4cOHY+XKlXB0dERWVpZap96IiIiIXlTjgpGuri7WrVuHKVOmwNraGnv37sWiRYsAABYWFrh8+XKxbdauXYunT59i1KhRMDExgYmJCdzc3Kq7dCIiIqrlJII6j5XWgqSkJJw/fx5eXl6wsrLS6GfJ5XKYmZkhIyMDpqamGv0sIiIiqhqa+P6ucRdfP2dnZ4d+/fppuwwiIiJ6hdS4U2lERERE2sJgRERERKTEYERERESkxGBEREREpMRgRERERKTEYERERESkxGBEREREpMRgRERERKTEYERERESkxGBEREREpMRgRERERKTEYERERESkxGBEREREpMRgRERERKTEYERERESkxGBEREREpMRgRERERKTEYERERESkxGBEREREpMRgRERERKTEYERERESkxGBEREREpMRgRERERKTEYERERESkxGBEREREpMRgRERERKTEYERERESkxGBEREREpMRgRERERKRUI4NRTEwMPD09YWFhgYCAAAiCUO42v/76K5ycnGBvb49ffvmlGqokIiKiuqbGBSOFQoEBAwagffv2iIyMRGxsLEJDQ8vcJiYmBu+//z7mzp2Lw4cP48svv8T169erp2AiIiKqM2pcMPr999+RkZGBpUuXokmTJggODsb69evL3GbdunXo3r07xo8fj9atW2PKlCnYvHlzNVVMREREdUWNC0bR0dHw8vKCoaEhAMDd3R2xsbHlbtOjRw9xvmPHjjh//nyp7RUKBeRyucpEREREVOOCkVwuh4uLizgvkUgglUrx5MkTtbcxNTXFgwcPSm2/YMECmJmZiZOjo2PVFE9ERES1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", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"fig, ax = plt.subplots() \n", | |
"for word, idx in word_to_idx.items():\n", | |
" # 获取每个单词的嵌入向量\n", | |
" vec = skipgram_model.input_to_hidden.weight[:,idx].detach().numpy() \n", | |
" ax.scatter(vec[0], vec[1]) # 在图中绘制嵌入向量的点\n", | |
" ax.annotate(word, (vec[0], vec[1]), fontsize=12) # 点旁添加单词标签\n", | |
"plt.title(' 二维词嵌入 ') # 图题\n", | |
"plt.xlabel(' 向量维度 1') # X 轴 Label\n", | |
"plt.ylabel(' 向量维度 2') # Y 轴 Label\n", | |
"plt.show() # 显示图" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"id": "a4186bd4-4e6e-44af-9d2d-5ad8a11d082a", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CBOW 数据样例(未编码): [('Kage', ['is', 'Teacher']), ('is', ['Kage', 'Teacher']), ('Teacher', ['Kage', 'is'])]\n" | |
] | |
} | |
], | |
"source": [ | |
"# 生成 CBOW 训练数据\n", | |
"def create_cbow_dataset(sentences, window_size=2):\n", | |
" data = []# 初始化数据\n", | |
" for sentence in sentences:\n", | |
" sentence = sentence.split() # 将句子分割成单词列表\n", | |
" for idx, word in enumerate(sentence): # 遍历单词及其索引\n", | |
" # 获取上下文词汇,将当前单词前后各 window_size 个单词作为周围词\n", | |
" context_words = sentence[max(idx - window_size, 0):idx] \\\n", | |
" + sentence[idx + 1:min(idx + window_size + 1, len(sentence))]\n", | |
" # 将当前单词与上下文词汇作为一组训练数据\n", | |
" data.append((word, context_words))\n", | |
" return data\n", | |
"# 使用函数创建 CBOW 训练数据\n", | |
"cbow_data = create_cbow_dataset(sentences)\n", | |
"# 打印未编码的 CBOW 数据样例(前三个)\n", | |
"print(\"CBOW 数据样例(未编码):\", cbow_data[:3])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"id": "aa942b4c-b36c-4f23-81f6-8a5819bf7134", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CBOW 模型: CBOW(\n", | |
" (input_to_hidden): Linear(in_features=9, out_features=2, bias=False)\n", | |
" (hidden_to_output): Linear(in_features=2, out_features=9, bias=False)\n", | |
")\n" | |
] | |
} | |
], | |
"source": [ | |
"# 定义 CBOW 模型\n", | |
"import torch.nn as nn # 导入 neural network\n", | |
"class CBOW(nn.Module):\n", | |
" def __init__(self, voc_size, embedding_size):\n", | |
" super(CBOW, self).__init__()\n", | |
" # 从词汇表大小到嵌入大小的线性层(权重矩阵)\n", | |
" self.input_to_hidden = nn.Linear(voc_size, \n", | |
" embedding_size, bias=False) \n", | |
" # 从嵌入大小到词汇表大小的线性层(权重矩阵)\n", | |
" self.hidden_to_output = nn.Linear(embedding_size, \n", | |
" voc_size, bias=False) \n", | |
" def forward(self, X): # X: [num_context_words, voc_size]\n", | |
" # 生成嵌入:[num_context_words, embedding_size]\n", | |
" embeddings = self.input_to_hidden(X) \n", | |
" # 计算隐藏层,求嵌入的均值:[embedding_size]\n", | |
" hidden_layer = torch.mean(embeddings, dim=0) \n", | |
" # 生成输出层:[1, voc_size]\n", | |
" output_layer = self.hidden_to_output(hidden_layer.unsqueeze(0)) \n", | |
" return output_layer \n", | |
"embedding_size = 2 # 设定嵌入层的大小,这里选择 2 是为了方便展示\n", | |
"cbow_model = CBOW(voc_size,embedding_size) # 实例化 CBOW 模型\n", | |
"print(\"CBOW 模型:\", cbow_model)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"id": "8c9aebc6-2ac8-4a99-94f4-e0c58204e445", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Epoch: 100, Loss: 2.202327521642049\n", | |
"Epoch: 200, Loss: 2.1858612537384032\n", | |
"Epoch: 300, Loss: 2.1691342989603677\n", | |
"Epoch: 400, Loss: 2.1509071747461954\n", | |
"Epoch: 500, Loss: 2.129922358194987\n", | |
"Epoch: 600, Loss: 2.104827340443929\n", | |
"Epoch: 700, Loss: 2.074132212003072\n", | |
"Epoch: 800, Loss: 2.0362200021743773\n", | |
"Epoch: 900, Loss: 1.98944837252299\n", | |
"Epoch: 1000, Loss: 1.9324087778727213\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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M5OCggITU0mbNm2YM2eObTk2NpacnBwqV65cahlUduSSsrKy6NmzJ3369KFfv36kp6cD4OXlhcViMTldxbN+/Xry8/Nty08++STt27fXrbUmufvuu3n00Uf58MMP6dmzJ19//TW7du1i2bJlZkersLp06cJDDz1Ey5YtCQwMZO7cuVSvXp1mzZqZHa1C69q1K6mpqcyfP59hw4bx+uuvc+utt2K1Wkstg8qOXNJPP/3E3r172bt37wWtvE6dOuYFq6Bq1apVZNnb25uAgADbZRQpXVWqVGHlypU8+eSTPPHEE9SoUYMvvviC4OBgs6NVWP3792ffvn1Mnz6dEydO0KRJE7755htdfjeZs7Mzc+fOJSIigqeeegonJyd+/fXXUs1gMTRyS0RERErYyZMn2b59O+3bt6dKlSql+rNVdkRERMSh6W4sERERcWgqOyIiIuLQVHZERETEoansiIiIiENT2RGRcqmwsPCCdadPn7brPWJjY0lJSblekUSkjFLZEZFyJycnh6CgoAvKzahRoxg1atRFj9m/f/8FT9J97bXXGD9+fInlFJGyQQ8VFJFyIy8vj/z8fDZt2kRoaChVqlQhPz+fwsJCTp48yQ8//EDNmjVJSEigWrVqRY4dMmQI3bp1s80Yn5uby/fff88vv/xixkcRkVKk5+yISLnx+eefM2nSJM6ePYunpydeXl7k5uby5JNP8uuvv+Ln50e3bt2YO3cuq1atwtfX13bsgQMHaN26NQsXLqRv3758/vnnREREFNnnvJUrV2qOKxEHostYIlJuDBw4kKNHj1KtWjU2b95MTEwMcXFxJCYmsmPHDt577z1GjBhB+/btadWqFatXr7YdGxYWxnvvvcdTTz1FXl4er732Gp9//jnJycm2188//4zVaqVt27YmfkoRud5UdkSkXPnyyy9p0qQJ0dHR3HLLLcybN48ZM2bQv39/8vLyAHjnnXcYOXIkd999N9u3b7cd+9BDD7FhwwZmz56Nh4cH9957L/Pnz+fRRx8F4LvvvuPOO+/E2VlX+EUcicqOiJQbycnJPPPMM0yePBlXV1c8PDx48MEH2bx5M6tXr+bkyZMAGIbBwIEDOXToEK1atSryHlWrVqVly5Z8+OGHWCwWTp8+bTuua9euTJo0qdQ/l4iULP3zRUTKjcTERI4cOcKAAQNwcnLizJkzNG7cmO+++w5nZ2dcXV1JSEhgzJgx/Pnnn+zatavI8WfPnqVr166sWbOGqlWrAnD8+HHb7ee33XZbqX8mESl5OrMjIuVGWFgY2dnZHD9+nEWLFtG5c2cOHDhAw4YNsVgsvPXWW7Ru3ZoGDRoQGRmJh4dHkePffvttgoKCbEUHYO3atURGRpKcnFzKn0ZESovO7IhIuZGfn8/p06c5ffo0u3fv5vjx47z55pt06NABgNq1a7N79278/PwuOPb48ePMmjWL33//3bZu9erV5OXlMX78eJ577jk++OCDUvssIlJ6VHZEpNzYsGEDI0eOpEGDBri4uGAYBvXr16dBgwYADBgwwFZ0kpOT8fb2xtnZmcLCQkaOHMnQoUOpX78+cO7pySNGjGDmzJl06dKF5s2bU61aNaZMmYLFYjHtM4rI9afLWCJSbnTr1o2DBw+yYsUKHn30UWrWrEnfvn2pVq0aFouFtLQ0277z58/n9ttvB87dwbVjxw6mTJkCwI8//kjHjh2ZOHEid999N76+vvz000/MmjWLe+65h7i4OFM+n4iUDJ3ZEZFyKTc3l+zsbNtyp06d6N69O5UrV8YwDFJSUpg3bx5w7oxPs2bN8PPzY8KECSxevJiPPvqI++67z3Z8WFgYGzduZNCgQdx6663s3LkTNze3Uv9cInL96QnKIlKhHDt2DFdXVwIDAy+6vaCggOPHjxMSElLKyUSkpKjsiIiIiEPTmB0RERFxaCo7IiIi4tBUdkRERMShqeyIiIiIQ1PZEREREYemsiMiIiIOTWVHREREHJrKjoiIiDi0/weGjE8nZPtQygAAAABJRU5ErkJggg==", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# 训练 Skip-Gram 类\n", | |
"learning_rate = 0.001 # 设置学习速率\n", | |
"epochs = 1000 # 设置训练轮次\n", | |
"criterion = nn.CrossEntropyLoss() # 定义交叉熵损失函数\n", | |
"import torch.optim as optim # 导入随机梯度下降优化器\n", | |
"optimizer = optim.SGD(cbow_model.parameters(), lr=learning_rate) \n", | |
"# 开始训练循环\n", | |
"loss_values = [] # 用于存储每轮的平均损失值\n", | |
"for epoch in range(epochs):\n", | |
" loss_sum = 0 # 初始化损失值\n", | |
" for target, context_words in cbow_data:\n", | |
" # 将上下文词转换为 One-Hot 向量并堆叠\n", | |
" X = torch.stack([one_hot_encoding(word, word_to_idx) for word in context_words]).float() \n", | |
" # 将目标词转换为索引值\n", | |
" y_true = torch.tensor([word_to_idx[target]], dtype=torch.long) \n", | |
" y_pred = cbow_model(X) # 计算预测值\n", | |
" loss = criterion(y_pred, y_true) # 计算损失\n", | |
" loss_sum += loss.item() # 累积损失\n", | |
" optimizer.zero_grad() # 清空梯度\n", | |
" loss.backward() # 反向传播\n", | |
" optimizer.step() # 更新参数\n", | |
" if (epoch+1) % 100 == 0: # 输出每 100 轮的损失,并记录损失\n", | |
" print(f\"Epoch: {epoch+1}, Loss: {loss_sum/len(cbow_data)}\") \n", | |
" loss_values.append(loss_sum / len(cbow_data))\n", | |
"# 绘制训练损失曲线\n", | |
"import matplotlib.pyplot as plt # 导入 matplotlib\n", | |
"# 绘制二维词向量图\n", | |
"plt.rcParams[\"font.family\"]=['SimHei'] # 用来设定字体样式\n", | |
"plt.rcParams['font.sans-serif']=['SimHei'] # 用来设定无衬线字体样式\n", | |
"plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号\n", | |
"plt.plot(range(1, epochs//100 + 1), loss_values) # 绘图\n", | |
"plt.title(' 训练损失曲线 ') # 图题\n", | |
"plt.xlabel(' 轮次 ') # X 轴 Label\n", | |
"plt.ylabel(' 损失 ') # Y 轴 Label\n", | |
"plt.show() # 显示图" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"id": "7a22c6ee-7472-4a87-81db-1358cbd3959a", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Skip-Gram 词嵌入:\n", | |
"Mazong: [ 0.02882046 -0.2950801 ]\n", | |
"Kage: [-0.22780569 0.0897411 ]\n", | |
"Teacher: [-0.06253081 0.13617547]\n", | |
"Xiaobing: [ 0.12509993 -0.42058215]\n", | |
"Xiaoxue: [-0.16945401 -0.26631573]\n", | |
"is: [ 0.6668842 -0.4003885]\n", | |
"Student: [-1.0026332 0.12767132]\n", | |
"Boss: [-0.783318 0.29152307]\n", | |
"Niuzong: [-0.22902635 -0.3269145 ]\n" | |
] | |
} | |
], | |
"source": [ | |
"# 输出 CBOW 习得的词嵌入\n", | |
"print(\"CBOW 词嵌入:\")\n", | |
"for word, idx in word_to_idx.items(): # 输出每个词的嵌入向量\n", | |
" print(f\"{word}: {cbow_model.input_to_hidden.weight[:,idx].detach().numpy()}\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"id": "198404f4-ce48-4473-845a-90431e8f7c7f", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"fig, ax = plt.subplots() \n", | |
"for word, idx in word_to_idx.items():\n", | |
" # 获取每个单词的嵌入向量\n", | |
" vec = cbow_model.input_to_hidden.weight[:,idx].detach().numpy() \n", | |
" ax.scatter(vec[0], vec[1]) # 在图中绘制嵌入向量的点\n", | |
" ax.annotate(word, (vec[0], vec[1]), fontsize=12) # 点旁添加单词标签\n", | |
"plt.title(' 二维词嵌入 ') # 图题\n", | |
"plt.xlabel(' 向量维度 1') # X 轴 Label\n", | |
"plt.ylabel(' 向量维度 2') # Y 轴 Label\n", | |
"plt.show() # 显示图" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"id": "102fbffa-1e4c-4dad-91b4-05d680cd3a2b", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Skip-Gram-Embedding 模型: SkipGramEmbedding(\n", | |
" (input_to_hidden): Embedding(9, 2)\n", | |
" (hidden_to_output): Linear(in_features=2, out_features=9, bias=False)\n", | |
")\n" | |
] | |
} | |
], | |
"source": [ | |
"# 定义 Skip-Gram-Embedding 模型\n", | |
"import torch.nn as nn # 导入 neural network\n", | |
"class SkipGramEmbedding(nn.Module):\n", | |
" def __init__(self, voc_size, embedding_size):\n", | |
" super(SkipGramEmbedding, self).__init__()\n", | |
" # 从词汇表大小到嵌入大小的嵌入层(权重矩阵)\n", | |
" self.input_to_hidden = nn.Embedding(voc_size, embedding_size) \n", | |
" # 从嵌入大小到词汇表大小的线性层(权重矩阵)\n", | |
" self.hidden_to_output = nn.Linear(embedding_size, voc_size, bias=False) \n", | |
" def forward(self, X):\n", | |
" hidden_layer = self.input_to_hidden(X) # 生成隐藏层:[batch_size, embedding_size]\n", | |
" output_layer = self.hidden_to_output(hidden_layer) # 生成输出层:[batch_size, voc_size]\n", | |
" return output_layer \n", | |
"embedding_size = 2 # 设定嵌入层的大小,这里选择 2 是为了方便展示\n", | |
"skipgram_embedding_model = SkipGramEmbedding(voc_size, embedding_size) # 实例化 Skip-Gram 模型\n", | |
"print(\"Skip-Gram-Embedding 模型:\", skipgram_embedding_model)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 26, | |
"id": "d8971b8b-a64c-4a61-96f1-7e9bc6714311", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Epoch: 100, Loss: 2.153648380438487\n", | |
"Epoch: 200, Loss: 2.0731595277786257\n", | |
"Epoch: 300, Loss: 2.0166324257850645\n", | |
"Epoch: 400, Loss: 1.9638276815414428\n", | |
"Epoch: 500, Loss: 1.9115708788235983\n", | |
"Epoch: 600, Loss: 1.864617798725764\n", | |
"Epoch: 700, Loss: 1.826733551422755\n", | |
"Epoch: 800, Loss: 1.796763930718104\n", | |
"Epoch: 900, Loss: 1.7720958888530731\n", | |
"Epoch: 1000, Loss: 1.7511685510476431\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# 训练 Skip-Gram 类\n", | |
"learning_rate = 0.001 # 设置学习速率\n", | |
"epochs = 1000 # 设置训练轮次\n", | |
"criterion = nn.CrossEntropyLoss() # 定义交叉熵损失函数\n", | |
"import torch.optim as optim # 导入随机梯度下降优化器\n", | |
"optimizer = optim.SGD(skipgram_embedding_model.parameters(), lr=learning_rate) \n", | |
"# 开始训练循环\n", | |
"loss_values = [] # 用于存储每轮的平均损失值\n", | |
"for epoch in range(epochs):\n", | |
" loss_sum = 0 # 初始化损失值\n", | |
" for context, target in skipgram_data: \n", | |
" X = torch.tensor([word_to_idx[target]], dtype=torch.long) # # 输入是中心词\n", | |
" y_true = torch.tensor([word_to_idx[context]], dtype=torch.long) # 目标词是周围词\n", | |
" y_pred = skipgram_embedding_model(X) # 计算预测值\n", | |
" loss = criterion(y_pred, y_true) # 计算损失\n", | |
" loss_sum += loss.item() # 累积损失\n", | |
" optimizer.zero_grad() # 清空梯度\n", | |
" loss.backward() # 反向传播\n", | |
" optimizer.step() # 更新参数\n", | |
" if (epoch+1) % 100 == 0: # 输出每 100 轮的损失,并记录损失\n", | |
" print(f\"Epoch: {epoch+1}, Loss: {loss_sum/len(skipgram_data)}\") \n", | |
" loss_values.append(loss_sum / len(skipgram_data))\n", | |
"# 绘制训练损失曲线\n", | |
"import matplotlib.pyplot as plt # 导入 matplotlib\n", | |
"# 绘制二维词向量图\n", | |
"plt.rcParams[\"font.family\"]=['SimHei'] # 用来设定字体样式\n", | |
"plt.rcParams['font.sans-serif']=['SimHei'] # 用来设定无衬线字体样式\n", | |
"plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号\n", | |
"plt.plot(range(1, epochs//100 + 1), loss_values) # 绘图\n", | |
"plt.title(' 训练损失曲线 ') # 图题\n", | |
"plt.xlabel(' 轮次 ') # X 轴 Label\n", | |
"plt.ylabel(' 损失 ') # Y 轴 Label\n", | |
"plt.show() # 显示图" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"id": "a6e8b178-4dc0-4ffe-a0c0-b57ee2a67662", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Skip-Gram-Embedding 词嵌入:\n", | |
"Mazong: [-0.6680653 -1.3456652]\n", | |
"Kage: [-0.5367452 -1.5275068]\n", | |
"Teacher: [-0.0258524 0.878432 ]\n", | |
"Xiaobing: [-1.3180933 -0.2166107]\n", | |
"Xiaoxue: [-0.94243103 -0.11393036]\n", | |
"is: [0.00182304 0.24087813]\n", | |
"Student: [-0.30781597 -1.9148353 ]\n", | |
"Boss: [-2.2275772 1.6505506]\n", | |
"Niuzong: [ 0.10556642 -1.9612975 ]\n" | |
] | |
} | |
], | |
"source": [ | |
"# 输出 Skip-Gram 习得的词嵌入\n", | |
"print(\"Skip-Gram-Embedding 词嵌入:\")\n", | |
"for word, idx in word_to_idx.items(): # 输出每个词的嵌入向量\n", | |
" print(f\"{word}: {skipgram_embedding_model.input_to_hidden.weight[idx].detach().numpy()}\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"id": "da640137-22bc-44f6-855d-d6ea4713dec9", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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IP/NMzExUXM1REREpAq5XI46deqIn+NVBcMXIF5qNDExYfgiIiKqYqrakKGqc4GUiIiIqBpg+CIiIiKSEMMXERERkYQYviQQFhYGmUwmPszMzPDee+/h33//VXdpREREJDGGLwlt3rwZERER2L17NwCge/fuSEtLU3NVREREJCV+21FCbm5u8PT0BAA4OTnBxcUFp06dQvfu3dVbGBEREUmGPV9q8uprsZmZmWquhIiIiKTE8KUGL168wA8//ABTU1O8++67AIANGzbA1dUVenp6aNeuHSIiIpT2OXv2LNq1awcjIyM4ODhgxowZStufPHmCvn37wtLSEubm5hg4cCCSkpIke01ERESkGoYvCTVv3hwymQyWlpbYuXMn9u7dC0tLS6xfvx4jR45E//79sX//ftSqVQs+Pj6Ijo4GAOTk5MDPzw9mZmY4ePAgfvzxR8ydOxdbtmwRj+3v74/Lly9j06ZNWLduHS5duoSAgAB1vVQiIiIqAsd8VZC8vDzcv38faWlpePLkCQBgy5YtaNiwIR49eoTg4GAMGzYM58+fR1BQED799FP85z//AQB07NgRjRs3xpw5c7Bu3Tqkpqbi+fPn6N27Nzp06IAOHTrA1dUVtra24vPFxMSgTZs2eP/99wEArq6uSElJkf6FExERUbEYvipAVFQUDh06BLlcDgCIjY0FAGhpacHT0xOenp5o164drK2tsXLlSty/fx+dO3cW99fW1kbHjh1x7tw5AIC5uTkGDBiACRMm4ODBg2jTpg169+6Nhg0bivuMHTsWX375JeLi4tC2bVt069YNPj4+0r1oIiIiUgkvO5azqKgobNu2TQxerzty5AiioqIAABYWFrC0tMS9e/eKPJYgCOLPf/75J0JDQ9GqVSscOHAA7u7u2LNnj7jd398f//77Lz7++GPcvn0b7733HiZOnFh+L4yIiIjKBcNXOcrLy8OhQ4eKbXPo0CHk5eUhISEBiYmJcHR0RN26dXHixAmxTU5ODv755x94eXkBAK5evYrAwEB06NABP/zwA06dOgVvb2+sW7cOAJCeno6vv/4apqam+Oqrr7Bz505MmTIFq1evrrgXS0RERGXCy47l6P79+4X2eL2SkJCA3NxchISEYOPGjdDS0sLHH38MJycnfPbZZ3B0dETHjh2xYsUKPHnyBFOnTgUAGBsbY968edDW1sZ7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", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# 绘制二维词向量图\n", | |
"plt.rcParams[\"font.family\"]=['SimHei'] # 用来设定字体样式\n", | |
"plt.rcParams['font.sans-serif']=['SimHei'] # 用来设定无衬线字体样式\n", | |
"plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号\n", | |
"fig, ax = plt.subplots() \n", | |
"for word, idx in word_to_idx.items():\n", | |
" # 获取每个单词的嵌入向量\n", | |
" vec = skipgram_embedding_model.input_to_hidden.weight[idx].detach().numpy() \n", | |
" ax.scatter(vec[0], vec[1]) # 在图中绘制嵌入向量的点\n", | |
" ax.annotate(word, (vec[0], vec[1]), fontsize=12) # 点旁添加单词标签\n", | |
"plt.title(' 二维词嵌入 ') # 图题\n", | |
"plt.xlabel(' 向量维度 1') # X 轴 Label\n", | |
"plt.ylabel(' 向量维度 2') # Y 轴 Label\n", | |
"plt.show() # 显示图" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "7e4ae54f-81fa-40af-aa0c-5d61c631ce4c", | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.10.14" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment