🙌ENto是一个基于Transformer(Encoder-decoder)的语言翻译模型,使用Pytorch实现。
- 从零构建标准 Encoder-Decoder Transformer
- 基于
tokenizers训练 WordLevel 分词器 - 使用
datasets加载opus_books(from 🤗hugging face) - 支持训练、验证、模型权重保存
- 支持 TensorBoard 训练日志可视化
config.py:训练与路径配置dataset.py:数据集封装、padding 与 mask 构建model.py:Transformer 各模块实现与模型组装train.py:训练主流程、greedy decode与验证逻辑
建议Python 3.10
安装依赖:
pip install -r requirements.txt在项目目录下运行:
python train.py默认配置(见 config.py):
batch_size = 8num_epochs = 20lr = 1e-4seq_len = 350d_model = 512lang_src = "en"lang_tgt = "fr"
- 模型权重保存到:
weights/ - TensorBoard 日志保存到:
runs/tmodel
TensorBoard的使用:
- 如果没有安装TensorBoard,那么
pip install tensorboard- 启动TensorBoard
tensorboard --logdir=runs- 打开浏览器,并输入
http://localhost:6006
在 config.py 中设置:
preload = None:从头训练preload = "xx":加载weights/tmodel_xx.pt继续训练
- 当前实现包含:
- Encoder Self-Attention
- Decoder Masked Self-Attention
- Cross-Attention
- Feed Forward + Residual + LayerNorm
- 验证阶段使用 Greedy Decode 做示例输出。
- 本项目以英文翻译为法语进行示例,数据集
opus_books还支持更多的翻译。若想要翻译为更多语言,只需要更改config.py中的lang_tgt即可
本仓库可以供想要实现Stanford CS336 AssignmentⅠ的同学们参考。同时,这也是本人在学习Machine Learning过程中的一个练手项目。由于本人能力有限,本项目也许并不完善,所以欢迎大家提issue or PR 😜