pytorch动手实现transformer机器翻译(代码片段)

Regan_zhx Regan_zhx     2023-03-29     539

关键词:

Pytorch动手实现Transformer机器翻译


前言

书接上回,光从实现Transformer模型from scratch似乎有点僵硬,毕竟模型不跑起来或者不能应用起来就是一堆“死代码”,为了让读者从上一篇文章中Pytorch从零开始实现Transformer (from scratch)学习后能体验一下Transformer的强大之处,于是有了这篇博客。因为Transformer早先就是谷歌团队为了解决机器翻译等NLP问题而提出的,Transformer天然适用于NLP领域,因此使用Transformer进行机器翻译的应用是最直接的(其实就是本人也一直想玩一下NLP的项目)。
由于时间关系首先公布一下环境配置及运行结果。


一、环境配置

源项目为 github.com/SamLynnEvans/Transformer,但其中代码可能因为年代久远,运行会有各种问题,不久后我会公布我的项目源码。
接下来是两个比较特别的库,光是pip install后并没有完事,还需要额外安装里面对应的工具包。

1. torchtext

torchtext的安装是最为值得注意的一环!

Method1:

直接使用pip install torchtext安装

pip install torchtext

如果你的pytorch版本较低,此命令会自动更新pytorch并安装cpu版本,这时会卸载旧的pytorch,安装的新版本pytorch可能会不兼容。慎用!

Method2:

使用conda install -c pytorch torchtext安装

conda install -c pytorch torchtext

推荐尝试一下Method2,而本人的方法是直接在Anaconda虚拟环境中直接用Method1,因为是实验室电脑所以不想污染base基础环境就自建一个虚拟环境方便操作。

2. Spacy

spacy号称工业级Python自然语言处理(NLP)软件包,可以对自然语言文本做词性分析、命名实体识别、依赖关系刻画,以及词嵌入向量的计算和可视化等。

Spacy的安装没有什么要注意的,就直接pip install安装就好。

pip install spacy

而本文需要用到英语(en)和法语(fr)两个工具包,所以需要在Spacy额外下载。一种比较快的方法是直接从官网安装英语和法语的工具包,然后再手动pip install 到spacy里面,这种方法的优点就是速度更快,更容易控制。
给出下载en和fr语言包的网站:
https://github.com/explosion/spacy-models/releases/tag/en_core_web_sm-3.5.0
https://github.com/explosion/spacy-models/releases/tag/fr_core_news_sm-3.5.0
Tip:github网站可能需要科学上网才能更加流畅地加载出来。(本项目源码发布的时候会带有这些文件,读者如果需要复现请不用担心资源不足)

以en包下载为例:

进入网址https://github.com/explosion/spacy-models/releases/tag/en_core_web_sm-3.5.0

然后点击上图红框的download即可下载。

手动安装语言包到spacy

方法也很简单,到下载的语言包目录下进入Terminal终端小黑窗(windows下是cmd),输入pip install *******.tar.gz 安装即可。语言包会自动下载到spacy库中。

3. NLTK

如果读者的环境中没有nltk,请先:

pip install nltk

源代码这部分使用了nltk中的wordnet包,如果没有这个包也是需要下载的。

Method1:

可视化安装,随便进入一个python的控制台界面,输入

import nltk
nltk.download()

不出意外会出现如下弹出如下窗口:

然后如下图点击Corpora然后下拉滚动条找到wordnet并点击“download”。如果网络好的话会看到右下角蓝框处的红色进度条不断增长。

不过这个方法一般比较慢,由于网速不太能安装好。

Method2:

直接去官网找到zip包直接下载,从根源解决问题。
进入网址http://www.nltk.org/nltk_data/
“Ctrl+F”搜索“id: wordnet”(请注意冒号后有个空格),会出现好几个搜索结果,选择如下图所示这个wordnet进行下载:

如果下载时候文件显示10.3MB那就证明下载正确了!
然后将下载好的wordnet.zip放到读者电脑所在nltk_data/corpora目录下即可。如果不知道nltk_data在哪里,可以在python里输入如下命令就会出现所有nltk_data路径了。

import nltk
nltk.download("wordnet")

二、运行结果

1. 模型训练(train)

打开终端,输入命令即可训练Transformer用于英语翻译为法语的机器翻译任务。

python train.py -src_data data/english.txt -trg_data data/french.txt -src_lang en_core_web_sm -trg_lang fr_core_news_sm -epochs 10

即指定english.txt和french.txt语料(随项目代码提供),先训练个10epochs。原项目中用一张8GB显存的K100来跑,本文使用的是英伟达3060(显存12G),因此训练绰绰有余。10epochs一个小时内就能训练完吧。

2. 翻译推理(inference)

训练完模型之后加载所保存的目录,此处为weights,其实也是训练时指定好的路径了。

python translate.py -load_weights weights -src_lang en_core_web_sm -trg_lang fr_core_news_sm


红框为输入的英文,篮框为模型翻译出的法语。
尽管我们可能看不懂法语,但是可以将法语交给现成翻译器让其翻译成中文。

我是一名研究生。
你为什么喜欢读书科学?
这是我学了四年的学校。——“有道翻译”

大概看得出翻译的还算有模有样,可以翻译得出where后置定语从句,那证明Transformer对机器翻译方面是一个可行的模型。


总结

目前本博客所体现的是比较表层的一部分,旨在引发大家对Transformer等深度学习模型学习的兴趣(同时也是激发我自己对学习的动力)。学习完模型后,将自己实现的模型用来做出一个可运行的demo或者应用,不仅能加深记忆还能像连锁反应一样触发更多知识点的学习,提高知识面的广度和认知深度。

参考网站

https://github.com/SamLynnEvans/Transformer
【Pytorch】torchtext终极安装方法及常见问题
PYTHON -M SPACY DOWMLOAD EN失败
离线安装NLTK工具包

循环神经网络rnn从零开始实现动手学深度学习v2pytorch

...网络RNN2.从零开始实现3.简洁实现4.Q&AGPT3,BERT都是基于Transformer模型的改进,目前也是最火的。voice和image融合算法,用多模态模型。比如自动驾驶领域的运用。RNN批量大小乘以时间长度t,相当于做t次分类。无人车所... 查看详情

pytorch实现手写数字识别(代码片段)

PyTorch实现手写数字识别使用Pytorch实现手写数字识别1.思路和流程分析2.准备训练集和测试集2.1torchvision.transforms的图形数据处理方法2.1.1torchvision.transforms.ToTensor2.1.2torchvision.transforms.Normalize(mean,std)2.1.3torchvision.transforms.Com 查看详情

《动手学深度学习》(pytorch版)(代码片段)

《动手学深度学习》PyTorch版前言简介面向人群食用方法方法一方法二方法三目录原书地址引用阅读指南前言读书啦!!!本项目将《动手学深度学习》原书中MXNet代码实现改为PyTorch实现。原书作者:阿斯顿·张、... 查看详情

使用pytorch实现简单的人脸二分类器(代码片段)

...数据集主要内容:加载和预处理。预处理:使用pytorch的transform进行转换。预处理后的数据形成实验的数据集。1transform=transforms.Compose([2transforms.RandomHorizontalFlip(),3transforms.RandomRotation(20),4transforms.ToTensor(),5transforms.Normalize((0.5,0.5,0.5)... 查看详情

《动手学深度学习》环境配置(pytorch版)(代码片段)

环境配置(PyTorch版)1环境配置1.1Anaconda1.2Jupyter1.3PyTorch1.4其他2.PyTorch最新安装教程1环境配置本节简单介绍一些必要的软件的安装与配置,由于不同机器软硬件配置不同,所以不详述,遇到问题请善用Google。1.1A... 查看详情

人工智能(pytorch)搭建transformer模型,真正跑通transformer模型,深刻了解transformer的架构(代码片段)

...是微学AI,今天给大家讲述一下人工智能(Pytorch)搭建transformer模型,手动搭建transformer模型,我们知道transformer模型是相对复杂的模型,它是一种利用自注意力机制进行序列建模的深度学习模型。相较于RNN和CNN,... 查看详情

《动手学深度学习》线性回归的简洁实现(linear-regression-pytorch)(代码片段)

线性回归的简洁实现(linear-regression-pytorch)1.生成数据集2.读取数据3.定义模型4.初始化模型参数5.定义损失函数6.定义优化算法7.训练模型8.小结随着深度学习框架的发展,开发深度学习应用变得越来越便利。实践中... 查看详情

《动手学深度学习》线性回归的简洁实现(linear-regression-pytorch)(代码片段)

线性回归的简洁实现(linear-regression-pytorch)1.生成数据集2.读取数据3.定义模型4.初始化模型参数5.定义损失函数6.定义优化算法7.训练模型8.小结随着深度学习框架的发展,开发深度学习应用变得越来越便利。实践中... 查看详情

pt之transformer:基于pytorch框架利用transformer算法针对imdb数据集实现情感分类的应用案例代码解析(代码片段)

PT之Transformer:基于PyTorch框架利用Transformer算法针对IMDB数据集实现情感分类的应用案例代码解析目录基于PyTorch框架利用Transformer算法针对IMDB数据集实现情感分类的应用案例思路设计(1)、数据准备(2)、数据预处理(3)、模型构建(... 查看详情

pytorch深度学习项目实战100例——基于transformer实现twitter文本隐喻二分类|第43例

前言大家好,我是阿光。本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。正在更新中~✨ 查看详情

在 Transformer 模型中删除层 (PyTorch / HuggingFace)

】在Transformer模型中删除层(PyTorch/HuggingFace)【英文标题】:DroppinglayersinTransformermodels(PyTorch/HuggingFace)【发布时间】:2021-12-1811:07:01【问题描述】:我在Transformer模型中的层下降中遇到了这个有趣的paper,我实际上正在尝试实现它。... 查看详情

(机器学习深度学习常用库框架|pytorch篇)第三节:pytorch之torchvision详解(代码片段)

文章目录一:torchvision概述二:torchvision.datasets(1)官方数据集(2)自定义数据集类(3)ImageFolder手动实现三:torchvision.transforms四:torchvision.models一: 查看详情

Pytorch - TypeError: ToTensor() 使用 torchvision.transform 不接受任何参数

】Pytorch-TypeError:ToTensor()使用torchvision.transform不接受任何参数【英文标题】:Pytorch-TypeError:ToTensor()takesnoargumentsusingtorchvision.transform【发布时间】:2020-07-2916:39:35【问题描述】:我正在尝试加载数据集以实现超分辨率,并且我设置... 查看详情

『跟我做ai工程化』使用python原生实现pytorch的transforms数据变换操作[已完成:resizetotensor与normalize](代码片段)

...好,所以下面笔者将演示如何在Python中不使用“torchvision.transforms”包来实现数据转换操作。抛砖引玉,讲述笔者如何思考与实现以便于读者朋友在Java与C++平台也能完成类似操作。在模型的训练与测试时,我们通常会借助“torchvi... 查看详情

transformer解读(附pytorch代码)

参考技术ATransformer早在2017年就出现了,直到BERT问世,Transformer开始在NLP大放光彩,目前比较好的推进就是Transformer-XL(后期附上)。这里主要针对论文和程序进行解读,如有不详实之处,欢迎指出交流,如需了解更多细节之处,... 查看详情

译图解transformer(代码片段)

目录从宏观上看Transformer把张量画出来开始编码!从宏观上看自注意力自注意力的细节自注意力的矩阵计算“多头”自注意力用位置编码表示序列的顺序残差解码器最后的线性和Softmax层损失函数下一步本文翻译自JayAlammar的博文TheI... 查看详情

动手学transformer(代码片段)

动手实现Transformer,所有代码基于tensorflow2.0,配合illustrated-transformer更香。模型架构Encoder+DecoderEncoderDecoderAttentionAdd&NormFeedForwardEmbeddingPositionEncoding模型架构transformer使用经典的编码器-解码器框架,编码器接受一个输入序列((x_1... 查看详情

(机器学习深度学习常用库框架|pytorch篇)第三节:pytorch之torchvision详解(代码片段)

...数据集类(3)ImageFolder手动实现三:torchvision.transforms四:torchvision.models一:torchvision概述torchvision:torchvision是Pytorch的一个图形库,主要用来构建计算机视觉模型,torchvision由以下四个部分构成torchvi... 查看详情