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

时间:2017-02-02 18:52:17

标签: tensorflow translate

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

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.")

为了利用我自己的训练数据,我创建了dirs my-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

返回错误:

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

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

2 个答案:

答案 0 :(得分:3)

蓝色天空

很好的问题,在自己的数据上训练模型比使用标准数据更有趣。您可以在终端中放置的示例如下:

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中生成的(我更喜欢它们与我的数据在同一个地方)。

希望这有帮助!

答案 1 :(得分: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:>>培训和运行翻译模型的二进制文件。

Tensorflow translate.py文件在使用您自己的语料库进行翻译时需要生成多个文件。

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

  2. 您希望确保使用此文件从数据集生成词汇表: 请检查以下步骤:

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