Pytorch动手实现Transformer机器翻译

11 篇文章 18 订阅
订阅专栏

在这里插入图片描述


前言

书接上回,光从实现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. 纠错

在 Pytorch从零开始实现Transformer (from scratch)一文中的问题答案就是:Multi-Head Attention部分的代码是有些欠妥的。而本项目的源码如下,大家可以和原本的代码进行对比。

class MultiHeadAttention(nn.Module):
    def __init__(self, heads, d_model, dropout = 0.1):
        super().__init__()
        
        self.d_model = d_model
        self.d_k = d_model // heads
        self.h = heads
        
        """
		============================================
		问题所在之处
		"""
        self.q_linear = nn.Linear(d_model, d_model)
        self.v_linear = nn.Linear(d_model, d_model)
        self.k_linear = nn.Linear(d_model, d_model)
        """
		============================================
		"""
		
        self.dropout = nn.Dropout(dropout)
        self.out = nn.Linear(d_model, d_model)
    
    def forward(self, q, k, v, mask=None):
        
        bs = q.size(0)
        
        # perform linear operation and split into N heads
        k = self.k_linear(k).view(bs, -1, self.h, self.d_k)
        q = self.q_linear(q).view(bs, -1, self.h, self.d_k)
        v = self.v_linear(v).view(bs, -1, self.h, self.d_k)
        
        # transpose to get dimensions bs * N * sl * d_model
        k = k.transpose(1,2)
        q = q.transpose(1,2)
        v = v.transpose(1,2)
        

        # calculate attention using function we will define next
        scores = attention(q, k, v, self.d_k, mask, self.dropout)
        # concatenate heads and put through final linear layer
        concat = scores.transpose(1,2).contiguous()\
        .view(bs, -1, self.d_model)
        output = self.out(concat)
    
        return output

2. github源码项目

可运行的项目已于 2023.4.8.1:00 发布到github,源码链接为 https://github.com/Regan-Zhang/Transformer-Translation
已训练好的模型权重由于有300M之大,就不上传到github了,如果读者有需要请QQ私聊(QQ号见我个人主页介绍)。本人在3060显卡上训练了110epochs。训练过程的log部分记录如下:

(graphCC) public@public-System-Product-Name:~/zhx_Regan/Transformer-master$ 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
loading spacy tokenizers...
creating dataset and iterator...
The `device` argument should be set by using `torch.device` or passing a string as an argument. This behavior will be deprecated soon and currently defaults to cpu.
model weights will be saved every 1 minutes and at end of epoch to directory weights/
training model...
2m: epoch 1 [####################]  100%  loss = 3.40303
epoch 1 complete, loss = 3.403
4m: epoch 2 [####################]  100%  loss = 2.38484
epoch 2 complete, loss = 2.384
6m: epoch 3 [####################]  100%  loss = 1.86363
epoch 3 complete, loss = 1.863
9m: epoch 4 [####################]  100%  loss = 1.56969
epoch 4 complete, loss = 1.569
11m: epoch 5 [####################]  100%  loss = 1.44242
epoch 5 complete, loss = 1.442
13m: epoch 6 [####################]  100%  loss = 1.21919
epoch 6 complete, loss = 1.219
15m: epoch 7 [####################]  100%  loss = 1.19595
epoch 7 complete, loss = 1.195
18m: epoch 8 [####################]  100%  loss = 1.04545
epoch 8 complete, loss = 1.045
20m: epoch 9 [####################]  100%  loss = 1.01818
epoch 9 complete, loss = 1.018
22m: epoch 10 [####################]  100%  loss = 0.94545

"""......"""

204m: epoch 97 [####################]  100%  loss = 0.28888
epoch 97 complete, loss = 0.288
206m: epoch 98 [####################]  100%  loss = 0.27474
epoch 98 complete, loss = 0.274
208m: epoch 99 [####################]  100%  loss = 0.27373
epoch 99 complete, loss = 0.273
210m: epoch 100 [####################]  100%  loss = 0.28787
epoch 100 complete, loss = 0.287
training complete, save results? [y/n] : y
command not recognised, enter y or n : y
saving weights to weights/...
weights and field pickles saved to weights
train for more epochs? [y/n] : n
exiting program...

详细记录请参考github项目中的log.txt文件。

三、运行结果

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工具包

Pytorch入门实战(5):基于nn.Transformer实现机器翻译(英译汉)
iioSnail的博客
08-05 2万+
本文将使用Pytorch提供的nn.Transformer实现英文到中文的机器翻译任务。对nn.Transformer的讲解,可以参考我的另一篇博文Pytorch中 nn.Transformer的使用详解与Transformer的黑盒讲解,建议先学习该文的CopyTask任务,然后再来看该篇就容易多了。......
pytorch实现seq2seq和transformer机器翻译
04-16
pytorch实现seq2seq和transformer字符级中英机器翻译,里面有一个小型中英的平行语料数据集和训练好的seq2seq的模型,transformer的模型需要自己训练
PyTorch使用Transformer进行机器翻译
阿正的梦工坊
07-22 1584
使用Torchtext和Spacy进行机器翻译
PyTorch 基础学习(10)- Transformer
最新发布
fenglingguitar的专栏
08-17 1597
本教程详细介绍了如何使用PyTorch实现一个基于Transformer机器翻译模型。首先,简要介绍了Transformer模型的基本原理,包括自注意力机制、多头注意力机制、前馈神经网络、以及残差连接与层归一化。随后,教程通过实际代码示例,展示了如何定义数据集类、编写`collate_fn`函数进行序列填充、搭建Transformer模型结构、以及实现模型的训练、评估和推理过程。最后,通过一个简单的词汇表和句子对的运行示例,展示了模型的训练和推理效果。该教程旨在帮助读者理解Transf
Transformer应用——机器翻译(English & Chinese)
T940842933的博客
07-31 1313
"""自定义数据集"""self.data = data # 数据self.English = [item['english'].lower() for item in data] # 将英文文本添加到 self.English 列表,编码需要小写化self.Chinese = [item['chinese'] for item in data] # 将中文文本添加到 self.Chinese 列表self.tokenizer = tokenizer # token化工具。
基于Transformer实现机器翻译
A3609222003的博客
06-26 965
机器翻译是指利用计算机技术和语言学知识来实现将一种自然语言的文本翻译成另一种自然语言的文本的过程。这种技术旨在使计算机能够理解和翻译人类语言,从而帮助人们跨越语言障碍进行沟通和交流。机器翻译系统通常依赖于大量的语料库和复杂的算法,其中包括统计机器翻译(SMT)和神经机器翻译(NMT)等不同的方法。近年来,随着深度学习技术的发展,神经机器翻译NLP领域中变得越来越流行,因为它能够更好地捕捉句子结构和语义信息,从而提高翻译的准确性和流畅度。
机器翻译实战(英译汉)Transformer代码学习详解
热门推荐
九筒的博客
05-04 1万+
任务目标 基于Transformer实现英语翻译汉语。如有疏忽请多指教 数据 Hi. 嗨。 Hi. 你好。 Run. 你用跑的。 Wait! 等等! Hello! 你好。 I try. 让我来。 I won! 我赢了。 Oh no! 不会吧。 Cheers! 乾杯! Got it? 你懂了吗? He ran. 他跑了。 Hop in. 跳进来。 I lost. 我迷失了。 I quit. 我退出。 I'm OK. 我沒事。 Listen. 听着。 No way! 不可能! No way! 没门! Reall
Python-PyTorch实现基于Transformer的神经机器翻译
08-11
PyTorch实现基于Transformer的神经机器翻译
Pytorch实现Transformer字符级机器翻译
孤独腹地的博客
04-16 1814
前言 上次发了一篇用seq2seq with attention做机器翻译的博客,今天我们试试Transformer。这篇文章主要介绍Transformer模型的搭建和训练,数据集仍然是上次的博客中使用的数据集。没看过那篇博客的可以先看看构建它数据集的部分再回来看这篇文章。 搭建模型 重点分析 先看看这张经久不衰的Transformer架构图 实现Transformer有几个重点 Transformer中的三个mask Multi-Head Attention With Add&Norm Fee
PyTorch玩转Transformer英译中翻译
idol24的博客
02-04 5262
点击上方“机器学习与生成对抗网络”,关注"星标"获取有趣、好玩的前沿干货!作者:知乎—hemingkx地址:https://www.zhihu.com/people/xia...
Transformer机器翻译
qq_52116434的博客
05-13 792
pytorch实现transformer并且用作机器翻译任务
动手学深度学习Pytorch版》Task4-机器翻译及相关技术;注意力机制与Seq2seq模型;Transformer
01-07
机器翻译及相关技术 Task2中的循环神经网络部分,有实现预测歌词的功能。在那个任务中,训练数据的输入输出长度是固定的,而在机器翻译中,输出的长度是不固定的,所以不能直接用RNN来处理这种任务。 Encoder-...
动手学CV-Pytorch计算机视觉 Transformer介绍和实战案例
lw19155275856的博客
05-02 1021
动手学CV-Pytorch计算机视觉 Transformer介绍和实战案例
Transformer - PyTorch
weixin_51221144的博客
02-08 3689
文章目录一、模型1.基于位置的前馈神经网络2.残差连接和层归一化二、编码器三、解码器四、训练和预测 一、模型 Transformer模型是完全基于注意力机制,所以在学习Transformer之前要知道什么是注意力,自注意力,以及多头注意力,此外还需知道位置编码是什么。可以看注意力机制相关知识点这篇博客后再学习Transformer,会发现Transformer和以往的RNN在模型架构有很多相似之处。 Transformer是由编码器和解码器组成的。与注意力机制相关知识点中基于注意力实现的Seq2Seq相比
NLP】第6章 使用 Transformer 进行机器翻译
sikh_0529的博客
09-25 1万+
人类掌握序列转导,将表示转移到另一个对象。我们可以很容易地想象一个序列的心理表征。如果有人说我花园里的花很漂亮,我们可以很容易地想象一个花园里有花。我们看到了花园的图像,尽管我们可能从未见过那个花园。我们甚至可以想象鸟鸣和花香。一台机器必须从零开始用数字表示来学习转导。循环或卷积方法产生了有趣的结果,但尚未达到显着的 BLEU 翻译评估分数。翻译需要将语言A转换为语言B的表示。Transformer模型的self-attention创新增加了机器智能的分析能力。语言A。
transformer文本翻译代码
JLU_zhujjie的博客
12-13 1589
""" code by Tae Hwan Jung(Jeff Jung) @graykode, Derek Miller @dmmiller612, modify by shwei Reference: https://github.com/jadore801120/attention-is-all-you-need-pytorch https://github.com/JayParks/transformer """ # ===============================
【基于Pytorch实现Transformers机器翻译
skrrrr__的博客
05-29 701
Transformer实现机器翻译
NLP——基于Transformer& PyTorch实现机器翻译(日译中)
m0_71247265的博客
06-28 1243
Transformer模型是一种基于注意力机制(attention mechanism)的深度学习模型,专门用于处理序列到序列的任务,例如机器翻译、文本生成等。Transformer 是第一个完全依赖自注意力(self-attention)来计算输入和输出的表示,而不使用序列对齐的递归神经网络或卷积神经网络的转换模型,取代了传统的循环神经网络(RNN)和长短期记忆网络(LSTM)在处理长距离依赖和并行计算能力上的限制,由于其并行计算的特性,Transformer在训练时能够更高效地处理大规模数据。
写文章

热门文章

  • 基于卷积神经网络的密集人群估计/人群计数算法/Yolov4行人检测【内含教程和踩坑】 22344
  • Python 基于豆瓣电影的可视化分析系统 14731
  • Python 基于SVM和KNN算法的红酒分类 12125
  • 从零开始的图像语义分割:FCN快速复现教程(Pytorch+CityScapes数据集) 8213
  • 新冠病毒疫情的数据爬取和简单分析 8146

分类专栏

  • 人工智能 11篇
  • 科研 3篇
  • 爬虫 7篇
  • 应试 3篇
  • 分布与并行 6篇
  • Linux 3篇
  • 设计模式 25篇

最新评论

  • 文本聚类之Supporting Clustering with Contrastive Learning(SCCL)论文复现【代码纠错及完善】

    Regan_zhx: 训练到指定epoch就自己会停止吧 新增数据这个我没研究过 我不做文本这方面的 请自行了解

  • 文本聚类之Supporting Clustering with Contrastive Learning(SCCL)论文复现【代码纠错及完善】

    四月zhuuzhi: 大佬,这个模型训练出来后怎么给新增的数据做聚类呢?模型训练怎么自动停止啊

  • 文本聚类之Supporting Clustering with Contrastive Learning(SCCL)论文复现【代码纠错及完善】

    四月zhuuzhi: 大佬,请问这个程序运行起来之后达到条件会自己停止吗?还是说会一直训练下去?还有就是这个模型训练出来之后怎么使用,怎么给新增的数据做聚类?

  • 文本聚类之Supporting Clustering with Contrastive Learning(SCCL)论文复现【代码纠错及完善】

    炸我的猫: 当然也不排除作者在选取的时候哪个最好就选取哪个了

  • 文本聚类之Supporting Clustering with Contrastive Learning(SCCL)论文复现【代码纠错及完善】

    炸我的猫: 兄弟,我感觉好像是你记混了,这个是作者的原句:For fair comparison between SCCL and its components or variants, we report the clustering performance for each of them by applying KMeans on the representations post the associated training processes. 你可以看一下应该是representation吧表情包表情包表情包

大家在看

  • 如何在微信小程序中使用事件总线进行组件通信?
  • 系统登录接口文档Demo 555
  • 编译方法及工具 491
  • JavaScript高级面向对象与面向过程讲解
  • Altium Designer 入门基础教程(四)

最新文章

  • Latex科研论文之符号篇(希腊字母&拉丁词)
  • 文本聚类之Supporting Clustering with Contrastive Learning(SCCL)论文复现【代码纠错及完善】
  • 深度学习Q&A之卷积神经网络
2023年8篇
2022年3篇
2021年38篇
2020年13篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢字母座椅雕塑定制玻璃钢雕塑石图片玻璃钢雕塑是实惠的商场美陈布置什么价格濮阳大型校园玻璃钢雕塑佛山玻璃钢子母座椅雕塑玻璃钢蝗虫雕塑中山玻璃钢车雕塑畅销的玻璃钢雕塑呈贡玻璃钢雕塑咨询商场美陈主要哪些材质江苏正规玻璃钢雕塑承诺守信龙岩模压法玻璃钢雕塑定制铜川人物玻璃钢雕塑公司安徽步行街玻璃钢雕塑价位潮州玻璃钢动物雕塑批发惠安哪有卖玻璃钢花盆禹会玻璃钢花盆花器郑州标识标牌玻璃钢雕塑定做厂家塔城地区小区玻璃钢雕塑厂家房山玻璃钢花盆池州玻璃钢雕塑销售厂家肇庆工艺玻璃钢人物雕塑尚雕坊玻璃钢雕塑厂怎么样阜阳玻璃钢雕塑图片树脂玻璃钢钢琴雕塑天津精巧玻璃钢座椅雕塑上海主题商场美陈批发德阳玻璃钢雕塑设计长治玻璃钢景观雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化