pytorch中的序列到序列框架
nmtpytorch的Python项目详细描述
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
单击此处的加入我们的Slack频道以获取问题。
nmtpytorch
允许训练各种端到端的神经结构,包括
但不限于神经机器翻译、图像字幕和自动。
语音识别系统。初始代码库位于theano
中,并且
灵感来源于著名的dl4mt-tutorial
代码库。
nmtpytorch
主要由勒芒大学的语言和语音团队开发
接受来自接地序列到序列转换团队的宝贵贡献
弗雷德里克·杰利内克纪念夏令营2018
Loic Barrault、Ozan Caglayan、Amanda Duarte、Desmond Elliott、Spandana Gella、Nils Holzenberger, 希拉格拉(Chirag Lala)、茉莉(Jasmine(Sun Jae)Lee)、亨利·列博维奇(Henry Lebovich)、普拉纳瓦中央教堂(Pranava Madhyastha) Florian Metze、Karl Mulligan、Alissa Ostapenko、Shruti Palaskar、Ramon Sanabria、Lucia Special和Josiah Wang。
如果您使用的是nmtpytorch,您可能需要引用以下纸张:
啊!
重要信息:安装 您可以使用 这也将自动获取和安装依赖项。对于 我们在存储库中提供了一个 对于持续的开发和测试,运行 我们目前仅在wiki中提供一些初步文档 此版本支持pytorch>;=0.4.1,包括最新的1.0版本。相关的
主要版本支持pytorch 0.4并放弃对0.3的支持
由于设备更简单,现在支持在CPU上进行培训和测试
pytorch 0.4的语义:只需将 现在可以覆盖用于在
推论:示例: 新采样器: 实验性:您可以使用近似采样器解码ASR系统
尽管模型没有考虑填充位置(警告
将在每批印刷)。
对于我们尝试的特定数据集,损失是0.2%的WER。所以尽管计算
在编码器变得嘈杂和不完全正确的情况下,模型可以处理
噪音很大: 这种类型的批处理几乎将asr解码时间减少了2-3倍。 新层/架构:安装
nmtpytorch
当前需要python>;=3.6
和torch>;=0.4.1
。
我们不打算支持Python2.x。nmtpytorch
后,您需要运行nmtpy-install-extra
将Meteor相关文件下载到${home}/.nmtpy
文件夹中。
此步骤只需要一次。点
pip
(或pip3
)从pypi
安装nmtpytorch
操作系统和环境):
手电筒
依赖项它将专门安装
torch 1.0.0
来自pypi的包
将
CUDA 9.0
运送到内部。德克萨斯州
environment.yml
文件,您可以使用它来创建
一个随时可用的蟒蛇环境,用于nmtpytorch
:开发模式
python setup.py develop就足够了
在git签出的根文件夹中。从现在起,对源代码的所有修改
树是直接考虑的任务,无需重新安装。
文档
发行说明
setup.py
和environment.yml
文件将默认为1.0.0
安装。V4.0.0(2018年12月18日)
numpydataset
现在返回形状的张量,对于3d/4d卷积特征,返回hxw,n,c,对于2d特征文件,返回1,n,c
。应调整型号以适应这种新的形状。顺序文件
(ord:path/to/txt file with integer per line
)来更改numpy张量的特征顺序,以便灵活地还原、无序化、平铺等。labeldataset
用于单标签输入/输出,以及相关的词汇表
用于整数映射。handle_oom=(true false)
参数,用于[train]
部分,以便在训练期间从GPU内存不足(oom)错误中恢复。这在默认情况下是禁用的,您需要从实验配置文件中启用它。注意,在验证复杂度计算期间仍然可以获得oom。如果您点击该键,请减小eval_batch_size
参数。de hyphen
后处理过滤器,以便在早期停止评估期间缝合摩西的严重连字符分裂。textencoder
nmt
中添加了enc\u lnorm、sched\u sampling
选项,以便为编码器启用层规范化,并以给定的概率使用定时采样。conditionaldecoder
现在可以使用最大池编码器状态或最后一个状态进行初始化。dec_variant
选项来尝试使用nmt
的不同解码器。-n
将n-best输出添加到nmtpy translate
-s
用于nmtpy translate
的方式。现在,您需要始终使用-s
指定拆分名称,但-s
用于覆盖配置文件中为该拆分定义的输入数据源。mnmtdecinit
。在nmt
模型中,通过使用model选项dec\u init=feats
trgmul
方向应定义为
方向:pre:text,hyp:text->;lb:label
pre、hyp
和lb
键指向每行一个句子的纯文本文件。即使标签符合NMTPY体系结构,也应构建词汇表。acc
shou将添加到eval_metrics
以计算精度。v3.0.0(2018年10月5日)
-d cpu
设置为nmtpy
即可切换到cpu模式。
注意:对CPU的培训只适用于调试,否则很慢。设备id
不再是配置选项。它应该被移除
从您的旧配置。cuda_visible_设备
环境变量。nmtpy translate(…)-x model.att_temp:0.9
nmtpy train
现在检测到无效/旧的[train]
选项并拒绝
训练模型。近似bucketbatchsampler
类似于默认的bucketbatchsampler,但对于稀疏的
分布的序列长度,如在语音识别中。长度相似
项目到存储桶。它不再保证批次完全
由相同长度的序列组成,因此在编码器中必须小心
支持包装/衬垫/遮蔽。textEncoder
已自动执行此操作
而语音编码器bilstmp
则不在乎。$nmtpy translate-s val-o hyp-x model.sampler_type:近似最佳值。ckpt
其他更改
nmtpy build vocab生成的词汇现在包含频率
信息也是。代码与旧的vocab文件向后兼容。
批处理
对象现在应显式移动到分配的设备
使用.device()
方法。参见mainloop.py
和test_performance()
from
nmt
型号。nvidia smi
输出的缓存gpu分配
最后,周期性地调用nvidia smi是一件棘手的事情。我们
计划使用torch.cuda.*
来估算内存消耗。num_workers>;0
不起作用
在此版本中。注意
分为dotAttention
和mlPattention
和
提供便利功能get_attention()
在它们之间进行选择
在模型构建期间。get_activation_fn()
应用于在非线性项之间进行选择
动态地而不是执行getattr(nn.functional,activ)
。后者
在下一个Pythorch版本中,对Tanh
和Sigmoid
不起作用。asr
模型现在从nmt
v2.0.0(2018年9月26日)
config.py
中的lr_decay*
选项
nmtpy install extra
应该
安装后启动。翻译
和
培训
制度。
BucketBatchSampler的课程学习选项,即订购批次的长度。
v1.4.0(2018年5月9日)
float16
数组不变,使numpydataset
内存高效
直到批量创建时间。multi30krawdataset
重命名为multi30kdataset
它现在同时支持
原始图像文件和预提取的视觉特征文件存储为.npy
scripts/
下添加cnn特征提取脚本
mnmtdecinit
用辅助功能初始化解码器。amnmtfeatures
是关注的mmt,但带有功能文件
而不是端到端的功能提取,这需要大量的内存。v1.3.2(2018年5月2日)
showatendandtell
型号。v1.3.1(2018年5月1日)
multi30kdataset
v1.3(2018年4月30日)
multi30krawdataset
用于从原始图像作为输入来训练端到端系统。numpydataset
以读取.npy/.npz
tensor文件作为输入特性。-s
传递到nmtpy train
以生成文件名中没有所有超参数的较短实验文件。de spm
用于google sentencepiece(spm)处理的文件。sacrebleu
现在是一个依赖项,因为它现在被接受为一个早期停止度量。
在spm处理过的文件中使用它是有意义的,因为它们是被取消标记的。
一经后处理。sklearn
作为某些度量的依赖项。[train]
部分添加了动量和
nesterov
参数。imageencoder
层在许多方面得到了改进。有关详细信息,请参见代码。moduledit()
支持。meteor
如果无法从文件后缀中检测到语言,则现在将退回到英语。-f
现在使用nmtpy build vocab
生成词汇表文件时,为标记频率生成一个单独的numpy文件。
nmtpy test
。nmtpy resume
命令,并添加了pretrained_file
选项以从检查点初始化模型权重。理>[train]
添加了freeze_layers
选项,以提供要冻结的层名称前缀的逗号分隔列表。simplegradecoder
层。textencoder
:能够设置嵌入的maxnorm
和gradscale
并使用或不使用排序长度批处理。conditionaldecoder
:使其与GRU/LSTM一起工作,允许为嵌入设置maxnorm/gradscale
。conditionalmdecoder
:同上。--暂时避免使用double
和--避免使用unk
删除。--lp alpha
utils/ml_metrics.py中的新机器学习度量包装:
lrap
v1.2(2018年2月20日)
$home
和$user
。utils.nn.get_network_topology()
替换为一个新的topology类
现在被分离到它自己的文件gpumanager
将始终遵守该设置。/tmp
下为GPU保留创建临时/顾问锁文件。textdataset
。onehotdataset
,这是textdataset
的一个变体,其中序列没有分别以<;bos>;
和<;eos>;
作为前缀/后缀。.nodbl
和.nounk
后缀现在分别添加到输出文件中的--avoid double
和--avoid unk
参数。nmtpytorch/search.py
最大长度
默认值增加到200。v1.1(2018年1月25日)
multi30kdataset
和imagefolderdataset
类
TorchVision
为CNN支持添加了依赖项nmtpy coco metrics
现在计算一个流星而不计算norm=true
[train]
部分的配置选项更改:
耐心增量
选项被删除评估批处理大小
以定义训练期间GPU波束搜索的批处理大小eval_freq
默认值现在是3000
这意味着per3000
小批量评估指标
现在默认为损失
。和以前一样,您可以提供一个列表
如bleu,meteor,loss
计算所有这些并提前停止
基于第一个eval_zero(默认值:false)
以指示计算模型
在训练开始前设置一次dev。有益于理智
检查是否微调使用预先训练的权重初始化的模型save_best_metrics(默认值:true)
在dev set w.r.t上,eval_metrics
中提供的每个度量。这种类型的
补救删除save_best_n
checkpoint_freq
现在默认为5000
这意味着per5000
小批量。n_检查点(默认值:5)
以定义最后一个检查点的数量
如果检查点频率为0,则将保留检查点,即检查点已启用
.conf
文件中定义中间变量以避免
一遍又一遍地输入相同的路径。可以引用变量
在其部分中使用tensorboard目录:${save_path}/tb
符号
也可以使用横截面引用:${data:root}
将被替换
通过[数据]
部分中定义的根变量的值。
-p/--pretrained
添加到nmtpy train
以初始化
使用另一个检查点的模型.ckpt
nmtpy translate的输入/输出处理:
-s
接受配置中定义的以逗号分隔的测试集
立即翻译实验文件。示例:-s val、newstest2016、newstest2017
-s
的互斥对应项是-s
,它接收
源语句的单个输入文件。-o
一起提供。
在多个测试集的情况下,将附加输出前缀
测试集的名称和光束大小。如果只提供一个包含-s
的文件
最终输出名称将只反映光束大小信息。nmtpy build vocab的两个新参数:
-f
:将频率计数也存储在finaljson
词汇表中
-x
:不在词汇表中添加特殊标记<;eos>;、<;bos>;、<;unk>;、<;pad>;
。
层/架构
fusion()
层添加到concat、sum、mul
任意数量的输入
imageencoder()
以无缝插入vgg或resnet
CNN使用TorchVision
预训练模型
注意
层参数改进。现在可以选择瓶颈
带有att_瓶颈的mlp注意的维度
。点
注意仍未测试并且可能已损坏。
nmt的变化:
dec_init
默认为mean_ctx
,即解码器将被初始化 从源编码器计算的平均上下文enc_lnorm
这只是一个占位符现在是rem因为我们没有 目前已提供层规范化- 光束搜索完全移动到GPU