由于实验评估需要,我想尝试一下在OpenNMT中使用
Transformer
,不过还是遇到了一些问题,这里记录一下:
在之前的实验中,我注意到OpenNMT的Seq2Seq model的performance实际上比不上最简单的PyTorch的Seq2Seq示例代码。觉得很疑惑,稍微搜索后发现,其他网友也提出了类似的问题:
https://github.com/OpenNMT/OpenNMT-py/issues/139
不过似乎这个问题并没有引起足够的重视,OpenNMT的开发者回复说,我们已经实现了SOTA的Transformer模型,所以不需要仔细处理这个issue了(这个态度也是呵呵了,你们可是哈佛的组啊,不应该更严谨认真一点么?)
所以想试试Transformer,按照这里的介绍:
http://opennmt.net/OpenNMT-py/FAQ.html
Transformer对超参很敏感,他们通过以下参数复现了论文的结果:
python train.py -data /tmp/de2/data -save_model /tmp/extra \
-layers 6 -rnn_size 512 -word_vec_size 512 -transformer_ff 2048 -heads 8 \
-encoder_type transformer -decoder_type transformer -position_encoding \
-train_steps 200000 -max_generator_batches 2 -dropout 0.1 \
-batch_size 4096 -batch_type tokens -normalization tokens -accum_count 2 \
-optim adam -adam_beta2 0.998 -decay_method noam -warmup_steps 8000 -learning_rate 2 \
-max_grad_norm 0 -param_init 0 -param_init_glorot \
-label_smoothing 0.1 -valid_steps 10000 -save_checkpoint_steps 10000 \
-world_size 4 -gpu_ranks 0 1 2 3
由于我目前测试的机子上没有GPU,所以尝试一下去掉最后的参数,结果发现去掉之后,程序很快停止,也没有任何报错或者输出。呵呵,难道不应该考虑没有GPU的情况吗?看来开源项目要做到真正人性,普适,要细心测试和开发的细节还有很多啊。这篇日志就简单吐槽一下。
本文主要讲解了抛弃之前传统的encod
er
-decod
er
模型
必须结合cnn或者rnn的固有模式,只用Attention。希望对您的学习有所帮助。本文来自网络,由火龙果软件刘琛编辑推荐AttentionIsAllYouNeed这篇论文主要介绍了一种新的机器翻译
模型
,该
模型
开创性的
使用
了很多全新的计算模式和
模型
结构。综合分析了现有的主流的nlp翻译
模型
的即基于CNN的可并行对其文本翻译和基于RNN的LSTM门控长短期记忆时序翻译
模型
,总结了两个
模型
的优缺点并在此基础上提出了基于自注意力机制的翻译
模型
transform
er
,
transform
er
模型
没有
使用
CNN和RNN的方法和模块,开创性的将注
通过本文,我们深入探讨了ModuleNotFound
Er
ror: No module named ‘
transform
er
s’错误的原因、
解决
方案以及相关的Python包和模块知识。我们提供了安装
transform
er
s库的方法,并解释了如何管理和
使用
Python的包和模块。通过理解这些基础知识,你可以更好地管理和组织你的Python项目,并有效地
解决
类似的错误。随着自然语言处理领域的不断发展,
transform
er
s库和其他相关库将继续更新和扩展其功能。
图一就是
Transform
er
模型
的框架,不过这里的encod
er
和decod
er
不再是RNN结构,拆开来看,细节如图二:原始论文里,作者设置了6层encod
er
与6层decod
er
结构。至于为什么是6,这就是一个超参数而已,可以根据实际情况设置为其他值。从图二
中
可以看到,计算流程是:输入的句子经过逐层编码后,最上层的encod
er
会输出
中
间结果,这个
中
间结果在每一层decod
er
中
都会用到。同时decod
er
的计算也是从下往上进行,直到最后输出预测结果。这里省略的是最下层decod
er
的输入:如果是训练过程,输入则是真实的目标句子;如果是预测过程,第一个输入开始标识符,预测下一个词,并且把这
首先,定义了一个
Transform
er
模型
类,其
中
包含了嵌入层、位置编码层、
Transform
er
编码层和全连接层。
然后,定义了一个位置编码类,用于为输入的文本添加位置编码信息。
接下来,初始化
模型
、优化器和学习率调度器,并进行训练。
在训练过程
中
,
使用
交叉熵损失函数计算损失,并
使用
反向传播和优化器来更新
模型
参数。
最后,保存训练好的
模型
。
是什么:是一个开源
NMT
工具
Open
NMT
is an
open
source ecosystem for neural machine translation and neural sequence learning.
来源:由哈佛NLP组推出,诞生于2016年年末,主版本基于Torch, 默认语言是Lua
GitHub:https://...
其
中
requirements.txt里安装的是很新的torchtext
git clone --branch 0.9.1 https://github.com/
Open
NMT
/
Open
NMT
-py.git
cd
Open
NMT
-py
pip install -r requirements.txt
cd ..
其
中
src-train.txt和tgt-train.txt为原始英文...
项目网址:
Open
NMT
-
Open
-Source Neural Machine Translationlogo:参考:《The Annotated
Transform
er
》翻译——注释和代码实现《Attention Is All You Need》_神洛华的博客-CSDN博客
transform
er
注解在过去的一年里,《Attention is all you need》
中
的
transform
er
一直萦绕在很多人的脑海里。除了在翻译质量上产生重大改进之外,它还为许多其他NLP任务提供了一种新的架构。论文本身写得很清楚,但传统观点认为很难正确执行。在这篇文章
中
,我将以逐行实现的形式呈现论文的注释版本。我重新整理并删除了原论文
中
的一些章节,并在全文
中
添加了注释。这个文档本身就是一个工作笔记本,应该是一个
完全
可用的实现(可以在jupyt
er
notebook
中
运行)。