RNN 人名分类案例 - 获取全局字母表和国家名
1 课程概览
本课讲解 RNN 人名分类案例的准备工作:获取全局字母表和国家名。全局字母表包括 ASCII 字母和 5 个常用符号(空格、逗号、分号、冒号、单引号),共 57 个。国家共 18 个。
2 核心概念与定义
- 全局字母表:ASCII 字母 + 5 个常用符号,共 57 个。
- 国家名:18 个国家。
- one-hot 编码:基于全局字母表进行编码。
3 模型与算法详解
全局字母表
ASCII 字母 + 5 个常用符号。
import string
all_letters = string.ascii_letters + " .,;'"
| 组成 | 数量 |
|---|---|
| 小写字母 a-z | 26 |
| 大写字母 A-Z | 26 |
| 空格 | 1 |
| 逗号 | 1 |
| 分号 | 1 |
| 冒号 | 1 |
| 单引号 | 1 |
| 总计 | 57 |
国家名
18 个国家。
all_countries = [
"Chinese", "English", "German", "French", "Spanish",
"Italian", "Russian", "Japanese", "Korean", "Vietnamese",
"Arabic", "Czech", "Dutch", "Greek", "Irish",
"Polish", "Portuguese", "Scottish"
]
研发流程
深度学习和 NLP 项目的研发流程。
1. 导包
2. 数据预处理
- 文本加载
- 转 tensor
- 转 Dataset
- 转 DataLoader
3. 构建模型(RNN、LSTM、GRU)
4. 模型训练
5. 绘图(对比三种模型效果)
6. 模型测试
导包
必要的工具包。
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.utils.data import DataLoader, Dataset
import string
import time
from tqdm import tqdm
import matplotlib.pyplot as plt
4 数学原理与推导
one-hot 编码
$$\text{one_hot}(c) = [0, 0, ..., 1, ..., 0]$$
其中:
- $c$ 是字符
- 1 的位置是字符在全局字母表中的索引
字母表大小
$$N = 57$$
5 代码示例
import string
# 1. 全局字母表
all_letters = string.ascii_letters + " .,;'"
n_letters = len(all_letters)
print(f"全局字母表: {all_letters}")
print(f"字母表大小: {n_letters}")
# 2. 国家名
all_countries = [
"Chinese", "English", "German", "French", "Spanish",
"Italian", "Russian", "Japanese", "Korean", "Vietnamese",
"Arabic", "Czech", "Dutch", "Greek", "Irish",
"Polish", "Portuguese", "Scottish"
]
n_countries = len(all_countries)
print(f"国家名: {all_countries}")
print(f"国家数量: {n_countries}")
# 3. 字符转索引
def letter_to_index(letter):
"""字符转索引"""
return all_letters.find(letter)
# 4. 字符转 one-hot 张量
def letter_to_tensor(letter):
"""字符转 one-hot 张量"""
tensor = torch.zeros(1, n_letters)
tensor[0][letter_to_index(letter)] = 1
return tensor
# 测试
print(f"\n字符 'A' 的索引: {letter_to_index('A')}")
print(f"字符 'A' 的 one-hot: {letter_to_tensor('A')}")
代码说明
| 代码 | 说明 |
|---|---|
string.ascii_letters | ASCII 字母(大小写) |
" .,;'" | 5 个常用符号 |
n_letters = 57 | 字母表大小 |
n_countries = 18 | 国家数量 |
letter_to_index(letter) | 字符转索引 |
letter_to_tensor(letter) | 字符转 one-hot 张量 |
6 重难点与易错提醒
- ❗重点:全局字母表共 57 个(26+26+5)。
- ❗重点:国家共 18 个。
- ❗重点:研发流程:导包→数据预处理→构建模型→训练→绘图→测试。
- 💡技巧:使用
string.ascii_letters获取 ASCII 字母。
7 课堂问答精选
Q1:全局字母表有多少个字符?
A:全局字母表共 57 个字符,包括 26 个小写字母、26 个大写字母和 5 个常用符号(空格、逗号、分号、冒号、单引号)。
Q2:有多少个国家?
A:共 18 个国家。
Q3:深度学习和 NLP 项目的研发流程是什么?
A:①导包;②数据预处理(文本加载→转 tensor→转 Dataset→转 DataLoader);③构建模型;④模型训练;⑤绘图;⑥模型测试。
8 本课小结
- 全局字母表共 57 个字符(26+26+5)。
- 国家共 18 个。
- 研发流程:导包→数据预处理→构建模型→训练→绘图→测试。
9 延伸思考
- 如何读取数据到内存?
- 如何过滤无效数据?