tensor2tensor 修改记

  • 因为要用自己的翻译数据集合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即可。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269