使用翻译模型训练自定义数据集

Training custom dataset with translate model

运行 开箱即用的模型在数据目录中生成这些文件:

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 & mydata.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

这个 returns 有一个错误:

tensorflow.python.framework.errors_impl.NotFoundError: my-from-train-data.ids40000

看来我需要创建文件 my-from-train-data.ids40000 ,它的内容应该是什么?是否有使用自定义数据训练此模型的示例?

blue-sky

问得好,用自己的数据训练模型比使用标准数据有趣得多。您可以在终端中输入的示例是:

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 和 [= 则为 40.000 28=] 未设置)。重要的是要知道这个文件是在 data_dir 指定的文件夹中创建的...如果你没有指定一个,这意味着它们是在 /tmp 中生成的(我更喜欢它们和我的数据在同一个地方)。

希望对您有所帮助!

快速回答:

Appears I need to create file my-from-train-data.ids40000 , what should it's contents be ? Is there an example of how to train this model using custom data ?

是的,就是vocab/word-id文件丢失了,是准备创建数据时生成的

这是来自 Tesnorflow documentation 的教程。

快速 over-view 文件以及为什么您可能会对输出的文件与使用的文件感到困惑:

  • python/ops/seq2seq.py:>> 用于构建 sequence-to-sequence 模型的库。
  • models/rnn/translate/seq2seq_model.py:>>神经翻译sequence-to-sequence模型。
  • models/rnn/translate/data_utils.py: >> 准备翻译数据的辅助函数。
  • models/rnn/translate/translate.py:>> 训练和运行翻译模型的二进制文件。

Tensorflowtranslate.py文件需要在使用自己的语料库翻译时生成多个文件。

  1. 需要对齐,意思是:language line 1 in file 1.<>language line 1 file 2.这个 允许模型进行编码和解码。

  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 实现,它也可以执行翻译任务。