使用翻译模型训练自定义数据集
Posted
技术标签:
【中文标题】使用翻译模型训练自定义数据集【英文标题】:Training custom dataset with translate model 【发布时间】:2017-06-19 23:46:29 【问题描述】:开箱即用地运行模型会在数据目录中生成这些文件:
ls
dev-v2.tgz newstest2013.en
giga-fren.release2.fixed.en newstest2013.en.ids40000
giga-fren.release2.fixed.en.gz newstest2013.fr
giga-fren.release2.fixed.en.ids40000 newstest2013.fr.ids40000
giga-fren.release2.fixed.fr training-giga-fren.tar
giga-fren.release2.fixed.fr.gz vocab40000.from
giga-fren.release2.fixed.fr.ids40000 vocab40000.to
读取 translate.py 的 src :
https://github.com/tensorflow/models/blob/master/tutorials/rnn/translate/translate.py
tf.app.flags.DEFINE_string("from_train_data", None, "Training data.")
tf.app.flags.DEFINE_string("to_train_data", None, "Training data.")
为了利用我自己的训练数据,我创建了 my-from-train-data 和 to-from-train-data 目录并将我自己的训练数据添加到每个目录中,训练数据包含在文件 mydata.from &我的数据.to
my-to-train-data contains mydata.from
my-from-train-data contains mydata.to
我找不到关于使用自己的训练数据或它应该采用什么格式的文档,所以我从 translate.py src 和开箱即用执行翻译模型时创建的数据目录的内容推断出这一点。
mydata.from 的内容:
Is this a question
mydata.to 的内容:
Yes!
然后我尝试使用以下方法训练模型:
python translate.py --from_train_data my-from-train-data --to_train_data my-to-train-data
这会返回一个错误:
tensorflow.python.framework.errors_impl.NotFoundError: my-from-train-data.ids40000
看来我需要创建文件 my-from-train-data.ids40000 ,它的内容应该是什么?是否有如何使用自定义数据训练此模型的示例?
【问题讨论】:
你是否从脚本中得到任何输出(除了错误)? @MaximilianKöstler 不,只是错误。您是否使用自定义数据集训练过这个模型? 【参考方案1】:蓝天
很好的问题,根据您自己的数据训练模型比使用标准数据更有趣。您可以在终端中输入的示例是:
python translate.py --from_train_data mydatadir/to_translate.in --to_train_data mydatadir/to_translate.out --from_dev_data mydatadir/test_to_translate.in --to_dev_data mydatadir/test_to_translate.out --train_dir train_dir_model --data_dir mydatadir
您的示例中出现的问题是您不是指向文件,而是指向文件夹。 from_train_data 应始终指向纯文本文件,其行应与 to_train_data 文件中的行对齐。
另外:一旦您使用合理的数据(多于一行;)运行此脚本,translate.py 将生成您的 id(如果未设置 from_vocab_size 和 to_vocab_size,则为 40.000)。重要的是要知道这个文件是在 data_dir 指定的文件夹中创建的......如果你没有指定一个,这意味着它们是在 /tmp 中生成的(我更喜欢它们与我的数据在同一个地方)。
希望这会有所帮助!
【讨论】:
【参考方案2】:快速回答:
看来我需要创建文件 my-from-train-data.ids40000 ,它的内容应该是什么?是否有如何使用自定义数据训练此模型的示例?
是的,就是缺少vocab/word-id文件,是准备创建数据时生成的。
这是来自Tesnorflow documentation的教程。
快速概览文件以及为什么您可能会对输出的文件和使用的文件感到困惑:
python/ops/seq2seq.py
: >> 用于构建序列到序列模型的库。
models/rnn/translate/seq2seq_model.py
: >> 神经翻译序列到序列模型。
models/rnn/translate/data_utils.py
: >> 准备翻译数据的辅助函数。
models/rnn/translate/translate.py
: >> 训练和运行翻译模型的二进制文件。
Tensorflowtranslate.py
文件在使用自己的语料翻译时需要生成多个文件。
需要对齐,意思是:language line 1 in file 1.
language line 1 file 2.
这个
允许模型进行编码和解码。
您要确保已使用此文件从数据集生成词汇表: 检查以下步骤:
python translate.py
--data_dir [your_data_directory] --train_dir [checkpoints_directory]
--en_vocab_size=40000 --fr_vocab_size=40000
注意!如果 Vocab-size 较小,则更改该值。
这里有更长的讨论tensorflow/issues/600
如果一切都失败了,请查看 Tensorflow 中的这个 ByteNet 实现,它也可以完成翻译任务。
【讨论】:
以上是关于使用翻译模型训练自定义数据集的主要内容,如果未能解决你的问题,请参考以下文章
YOLOv8教程系列:一使用自定义数据集训练YOLOv8模型(详细版教程,你只看一篇->调参攻略),包含环境搭建/数据准备/模型训练/预测/验证/导出等