美文网首页
tensor2tensor 修改记

tensor2tensor 修改记

作者: VanJordan | 来源:发表于2019-04-01 21:40 被阅读0次
  • 因为要用自己的翻译数据集合LDC,但是tensor2tensor中只有wmt18 enzh的数据集合处理方法,因此仿照这他写一个自己的。(主要是因为wmt18的数据集太大了有几千万条数据,做个试验得好几天,所以先在一个小的数据集上试验,如果好了再试试大的数据集)。
  • 先找到Enzh WMTproblem类,可以看到叫32k的原因是因为词表的大小差不多是32k
@registry.register_problem
class TranslateEnzhWmt32k(translate.TranslateProblem):
  @property
  def approx_vocab_size(self):
    return 2**15  # 32k
  • train_dataset差不多是长这样
datasets = train_dataset = _NC_TRAIN_DATASETS = [[
    "http://data.statmt.org/wmt18/translation-task/training-parallel-nc-v13.tgz", [
        "training-parallel-nc-v13/news-commentary-v13.zh-en.en",
        "training-parallel-nc-v13/news-commentary-v13.zh-en.zh"
    ]
]]  # 里面只有一个item
  • source_datasets大概长这样
source_datasets = [[item[0], [item[1][0]]] for item in train_dataset]  # dataset name
source_datasets = [[
["http://data.statmt.org/wmt18/translation-task/training-parallel-nc-v13.tgz"],
["training-parallel-nc-v13/news-commentary-v13.zh-en.en"]
]]

生成source的词典

source_vocab = generator_utils.get_or_generate_vocab(
    data_dir,
    tmp_dir,
    self.source_vocab_name,
    self.approx_vocab_size,
    source_datasets,
    file_byte_budget=1e8,
    max_subtoken_length=self.max_subtoken_length)
  • generate_lines_for_vocab
  • vocab_generator里面得到的句子大概是这样的,是经过处理的句子,因此接下来的部分我们没有必要看了,只需要把vocab_generator的部分换成我们自己的数据集即可。

总的处理逻辑

  • 传入参数中各个字段所表示的含义,这个是要按照他的格式来写的否则就运行不了。
  • compile_data的含义就是对.sgm后缀的文件进行处理,然后写到.lang1文件里面,根据我的观察,解析出来的文件和原来的文件news-commentary-v13.zh-en.en是差不多的,只是少了一行。
  • 返回的是一个字典,有两项,一个是inputs表示源数据,一个是targets是目标数据,在这个函数中只进行了序列化和数字化,没有进行截断和填充

总结

  • 所以说source[0]中的urlbasename的文件如果没有出现在tmp_dir目录里中那么就会下载相应的文件或者压缩包。
training-parallel-nc-v13.tgz
  • source[1]中的文件如果没有出现在tmp_dir文件夹中,那么就会解压刚才下载的压缩包,然后从里面读取文件(这里的文件是处理好的news-commentary-v13.zh-en.zh)一行一个数据,用来生成词表。
  • 整个generate_encoded_samples返回值是一个生成器,生成器返回的是一个字典,字典有两项,一个是inputs表示源数据,一个是targets是目标数据,这两个都是一个列表。
  • 因此如果要改传入数据的话
    • 为了能让生成单词表,要修改generate_lines_for_vocab中的url相关代码,因为此时的数据在本地,不用url下载。并且把解压缩相关的代码也注释掉,在tmp_dir目录下创建和for source in sources: source[1]里面命名一样的文件即可,其他部分包括get_or_generate_vocab_inner都不用改,因为他的目的是在data_dir目录下创建一个词表。
    • 对于生成训练数据,只需要给text_problems.text2text_tex_iterator中传入source(lang1)target(lang2)文件名即可,translate.compile_data的目的也是了从.sgm文件中解析文件。

Vocab

  • vocab命名和data_filename有关,data_filenameproblem基类中的定义是默认是注册名字。因此如果要让vocab适应现在的任务的话,只用注册的时候名字不一样,只用改动函数generate_text_for_vocab即可。

相关文章

  • tensor2tensor 修改记

    因为要用自己的翻译数据集合LDC,但是tensor2tensor中只有wmt18 enzh的数据集合处理方法,因此...

  • 修脑师

    老王是修脑师。 所谓修脑师,是这样的一类工作者,他们能够对患者进行催眠来修改记忆,包括唤起患者丢失的记忆和...

  • 无标题文章

    修改记录

  • JeeSite | 保存信息修改记录封装

    前面写过两篇关于“保存信息修改记录”的内容,分别如下:JeeSite|保存信息修改记录JeeSite|保存信息修改...

  • Tensor2Tensor使用入门

    1. 简介 Tensor2Tensor是google出品的一个神仙级工具包,能大大简化类似模型的开发调试时间。在众...

  • 分支

    分支: 分支是为了将修改记录的整体流程分叉保存。分叉后的分支不受其它分支的影响,所以在同一个数据库里可以同时进行修...

  • 《去月球》感想

    设定:进入记忆、修改记忆给人死前最后的梦想。 2位修改记忆公司的职员,进入John的内心世界,完成他去月球的梦想。...

  • 制作简报

    在发布软件的时候,一般需要输出修改记录,这个时候可以使用 git shotlog打印指定时间段的修改记录git s...

  • 修改记录

    修改记录的方法 静态方法: update findOneAndUpdate findByIdAndUpdate 实...

  • 篡改记忆

    一条昏暗的街,走到灯光下还需要距离。月色半弯,是亮的,周边的星星也很可爱。 我:她们怎么能够确定这个人就是可以结婚...

网友评论

      本文标题:tensor2tensor 修改记

      本文链接:https://www.haomeiwen.com/subject/dcybbqtx.html