🎯 课程主题
数据集介绍与分析——2018 年机器翻译研讨会的英中翻译数据集。
📝 核心知识点
1. 数据集来源
- 概念说明:数据来自 2018 年机器翻译研讨会(WMT)的新闻翻译任务。
- 关键细节:
- 包含英文和中文对照
- 提供训练集、验证集、测试集(JSON 格式)
- 数据网址在文档中提供
2. 数据格式
- 概念说明:JSON 文件,嵌套列表结构。
- 关键细节:
- 大列表包含多个小列表
- 每个小列表包含:
[英文句子, 中文翻译] - 示例:
[["I love you", "我爱你"], ["I am a dog", "我是一只狗"], ...]
3. 数据处理流程
- 概念说明:从 JSON 提取中英文语料,生成 .cn 和 .en 文件。
- 关键细节:
- 读取 JSON 文件(训练集/验证集/测试集)
- 提取所有中文句子 → 生成
.cn文件 - 提取所有英文句子 → 生成
.en文件 - 这些文件用于后续词表构建
4. 数据集统计
- 概念说明:数据集规模分析。
- 关键细节:
- 中文文件:约 29.9 MB
- 英文文件:约 34.12 MB
- 总行数:252,777 行(中英文一一对应)
- 数据量充足,适合训练 Transformer
5. 自定义数据集
- 概念说明:可基于相同格式构建自己的翻译数据集。
- 关键细节:
- 按相同 JSON 格式组织数据
- 如德英翻译:
[["German sentence", "English sentence"], ...] - 生成对应的语料文件
- 后续流程相同
🧮 核心公式与推导
无
🏗️ 模型架构与数据流向
💻 代码实战
import json
# 1. 读取JSON数据集
def load_json_data(json_path):
"""读取JSON格式的翻译数据"""
with open(json_path, 'r', encoding='utf-8') as f:
data = json.load(f)
return data
# 查看前3条数据
data = load_json_data('dataset/test.json')
for i, (en, cn) in enumerate(data[:3]):
print(f"英文: {en}")
print(f"中文: {cn}")
print("-" * 50)
# 2. 提取语料文件
def extract_corpus(json_files, cn_output, en_output):
"""从JSON文件提取中英文语料"""
with open(cn_output, 'w', encoding='utf-8') as cn_f, \
open(en_output, 'w', encoding='utf-8') as en_f:
for json_file in json_files:
data = load_json_data(json_file)
for en, cn in data:
cn_f.write(cn + '\n')
en_f.write(en + '\n')
extract_corpus(
json_files=['dataset/train.json', 'dataset/valid.json', 'dataset/test.json'],
cn_output='dataset/corpus.cn',
en_output='dataset/corpus.en'
)
# 3. 数据集分析
def analyze_corpus(file_path):
"""分析语料文件"""
import os
size = os.path.getsize(file_path) / (1024 * 1024) # MB
with open(file_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
chars = sum(len(line.strip()) for line in lines)
print(f"文件大小: {size:.2f} MB")
print(f"总行数: {len(lines)}")
print(f"总字符数: {chars}")
analyze_corpus('dataset/corpus.cn')
analyze_corpus('dataset/corpus.en')
⚠️ 常见问题与避坑指南
- JSON 文件直接打开可能显示乱码,需用脚本读取
- 中英文行数必须一一对应
- 数据集较小时,词表大小需相应减小
- 可基于相同格式构建其他语言对的翻译数据集
💡 个人总结与延伸
WMT 是机器翻译领域的标准数据集来源。本课程使用英中翻译数据,约 25 万行,规模适中。现代大模型训练通常使用更大规模的多语言数据(如 Common Crawl、Wikipedia),数据预处理流程(清洗、分词、去重)更加复杂。