AI Challenger 2017 奇遇记

Deep Learning Specialization on Coursera

本文记录一下去年下半年参加的AI Challenger比赛的过程,有那么一点意思,之所以说是奇遇,看完文章就明白了。

去年8月,由创新工场、搜狗、今日头条联合举办的“AI challenger全球AI挑战赛”首届比赛正式开赛。比赛共设6个赛道,包括英中机器同声传译、英中机器文本翻译、场景分类、图像中文描述、人体骨骼关键点预测以及虚拟股票趋势预测,一时汇集了众多关注的目光:

“AI Challenger 全球AI挑战赛”是面向全球人工智能(AI)人才的开放数据集和编程竞赛平台,致力于打造大型、全面的科研数据集与世界级竞赛平台,从科研角度出发,满足学术界对高质量数据集的需求,推进人工智能在科研与商业领域的结合,促进世界范围内人工智能研发人员共同探索前沿领域的技术突破及应用创新。在2017年的首届大赛中,AI Challenger发布了千万量级的机器翻译数据集、百万量级的计算机视觉数据集,一系列兼具学术前沿性和产业应用价值的竞赛以及超过200万人民币的奖金,吸引了来自全球65个国家的8892支团队参赛,成为目前国内规模最大的科研数据集平台、以及最大的非商业化竞赛平台。 AI Challenger以服务、培养AI高端人才为使命,打造良性可持续的AI科研新生态。

不过AI Challenger 最吸引我的不是每项比赛数十万元的奖金(这个掂量一下也拿不到),而是英中机器翻译提供的高达1千万的中英双语句对语料,这个量级,在开放的中英语料里仅次于联合国平行语料库,相当的有诱惑力:

简介
英中机器文本翻译作为此次比赛的任务之一,目标是评测各个团队机器翻译的能力。本次机器翻译语言方向为英文到中文。测试文本为口语领域数据。参赛队伍需要根据评测方提供的数据训练机器翻译系统,可以自由的选择机器翻译技术。例如,基于规则的翻译技术、统计机器翻译及神经网络机器翻译等。参赛队伍可以使用系统融合技术,但是系统融合系统不参与排名。需要指出,神经网络机器翻译常见的Ensemble方法,本次评测不认定为系统融合技术。

数据说明
我们将所有数据分割成为训练集、验证集和测试集合。我们提供了超过1000万的英中对照的句子对作为数据集合。其中,训练集合占据绝大部分,验证集合8000对,测试集A 8000条,测试集B 8000条。训练数据主要来源于英语学习网站和电影字幕,领域为口语领域。所有双语句对经过人工检查,数据集从规模、相关度、质量上都有保障。一个英中对照的句子对,包含一句英文和一句中文文本,中文句子由英文句子人工翻译而成。中英文句子分别保存到两个文件中,两个文件中的中英文句子以行号形成一一对应的关系。验证集和测试集最终是以标准的XML格式发布给参赛方。

训练条件
本次评测只允许参赛方使用使用评测方指定的数据训练机器翻译系统,并对其排名。参赛方需遵守以下88集团赠送38彩金训练方式的说明。参赛方可以使用基本的自然语言处理工具,例如中文分词和命名实体识别。

大概十年前我读研期间做得是统计机器翻译,那个时候能接触到的中英句对最多到过2、3百万,用得最多的工具是知名的开源统计机器翻译工具Moses,也在这里写了不少相关的文章。后来工作先后从事过机器翻译、广告文本挖掘相关的工作,与机器翻译渐行渐远。这一两年,我花了很多时间在专利数据挖掘上,深知专利数据翻译的重要性,也了解到机器翻译对于专利翻译有天然的吸引力。加之这几年来深度学习如火如荼,神经网络机器翻译横空出世,Google, 微软,Facebook等公司88集团赠送38彩金机器翻译的PR一浪高过一浪,大有“取代”人翻译的感觉,这些都都给了我很大的触动,但是一直没有机会走进神经网络机器翻译。刚好这个时候自己又在家里重新组了一台1080TI深度学习主机,加上AI Challenger提供的机器翻译数据机会,我把这次参赛的目标定为:

  • 了解目前神经网络机器翻译NMT的发展趋势
  • 学习并调研相关的NMT开源工具
  • 将NMT应用在中英日三语之间的专利翻译产品上

相对于统计机器翻译,神经网络机器翻译的开源工具更加丰富,这也和最近几年深度学习开源平台遍地开花有关,每个深度学习平台基本上都附有一两个典型的神经网络机器翻译工具和例子。不过需要说明的是,以下这些88集团赠送38彩金NMT工具的记录大多数是去年9月到12月期间的调研,很多神经网络机器翻译工具还在不断的迭代和演进中,下面的一些描述可能都有了变化。

虽然之前也或多或少的碰到过一些NMT工具,但是这一次我的神经网络机器翻译开源工具之旅是从OpenNMT开启的,这个开源NMT工具由哈佛NLP组推出,诞生于2016年年末,不过主版本基于Torch, 默认语言是Lua,对于喜爱Python的我来说还不算太方便。所以首先尝试了OpenNMT的Pytorch版本: OpenNMT-py,用AI Challenger官方平台提供中英翻译句对中的500万句对迅速跑了一个OpenNMT-py的默认模型:

Step 2: Train the model
python train.py -data data/demo -save_model demo-model
The main train command is quite simple. Minimally it takes a data file and a save file. This will run the default model, which consists of a 2-layer LSTM with 500 hidden units on both the encoder/decoder.

然后走了一遍AI Challenger的比赛流程,第一次提交记录如下:

2017.09.26 第一次提交:训练数据500万, opennmt-py, default,线下验证集结果:0.2325,线上提交测试集结果:0.22670

走完了比赛流程,接下来我要认真的审视这次英中机器翻译比赛了,在第二轮训练模型开始前,我首先对数据做了标准化的预处理:

  1. 数据shuf之后选择了8000句对作为开发集,8000句对作为测试集,剩下的980多万句对作为训练集;
  2. 英文数据按照统计机器翻译工具Moses 的预处理流程进行了tokenize和truecase;中文数据直接用Jieba中文分词工具进行分词;

这一次我将目光瞄准了Google的NMT系统:GNMT, Google的Research Blog是一个好地方: Building Your Own Neural Machine Translation System in TensorFlow,我从这篇文章入手,然后学习使用Tensorflow的NMT开源工具: Tensorflow-NMT,第一次使用subword bpe处理数据,训练了一个4层的gnmt英中模型,记录如下:

2017.10.05 第二次提交:训练集988万句对, tf-nmt, gnmt-4-layer,bpe16000, 线下验证集结果0.2739,线上提交测试集结果:0.26830

这次的结果不错,BLEU值较第一次提交有4个点的提升,我继续尝试使用bpe处理,一周后,做了第三次提交:

2017.10.12 第三次提交:训练集988万句对,tf-nmt, gnmt-4-layer,bpe32000, 线下验证集结果0.2759,线上提交测试集结果:0.27180

依然有一些提高,不过幅度不大。这一次,为了调研各种NMT开源工具,我又把目光锁定到OpenNMT,事实上,到目前为止,接触到的几个神经网络机器翻译开源工具中,和统计机器翻译开源工具Moses最像的就是OpenNMT,有自己独立的官网,文档相当详细,论坛活跃度很高,并且有不同的分支版本,包括主版本 OpenNMT-lua, Pytorch版本 OpenNMT-py, TensorFlow版本 OpenNMT-tf 。所以为了这次实验我在深度学习主机中安装了Torch和OpenNMT-lua版本,接下来半个月做了两次OpenNMT训练英中神经网络翻译模型的尝试,不过在验证集的结果和上面的差不多或者略低,没有实质性提高,所以我放弃了这两次提交。

也在这个阶段,从不同途径了解到Google新推的Transformer模型很牛,依然从Google Research Blog入手:Transformer: A Novel Neural Network Architecture for Language Understanding ,学习这篇神文:《Attention Is All You Need》 和尝试相关的Transformer开源工具 TensorFlow-Tensor2Tensor。一图胜千言,谷歌AI博客上给得这个图片让人无比期待,不过实际操作中还是踩了很多坑:

还是和之前学习使用开源工具的方法类似,我第一次的目标主要是走通tensor2tensor,所以跑了一个 wmt32k base_single 的英中transformer模型,不过结果一般,记录如下:

2017.11.03 第六次实验:t2t transformer wmt32k base_single, 线下验证集BLEU: 0.2605,未提交

之后我又换为wmt32k big_single的设置,再次训练英中transformer模型,这一次,终于在线下验证集的BLEU值上,达到了之前GNMT最好的结果,所以我做了第四次线上提交,不过测试集A的结果还略低一些,记录如下:

2017.11.06 第七次实验:t2t transformer wmt32k big_single,线下验证集结果 0.2759, 线上测试集得分:0.26950

不过这些结果和博客以及论文里宣称的结果相差很大,我开始去检查差异点,包括tensor2tensor的issue以及论文,其实论文里88集团赠送38彩金实验的部分交代的很清楚:

On the WMT 2014 English-to-German translation task, the big transformer model (Transformer (big) in Table 2) outperforms the best previously reported models (including ensembles) by more than 2.0 BLEU, establishing a new state-of-the-art BLEU score of 28.4. The configuration of this model is listed in the bottom line of Table 3. Training took 3.5 days on 8 P100 GPUs. Even our base model surpasses all previously published models and ensembles, at a fraction of the training cost of any of the competitive models.

On the WMT 2014 English-to-French translation task, our big model achieves a BLEU score of 41.0, outperforming all of the previously published single models, at less than 1/4 the training cost of the previous state-of-the-art model. The Transformer (big) model trained for English-to-French used dropout rate Pdrop = 0.1, instead of 0.3.

For the base models, we used a single model obtained by averaging the last 5 checkpoints, which were written at 10-minute intervals. For the big models, we averaged the last 20 checkpoints. We used beam search with a beam size of 4 and length penalty α = 0.6 . These hyperparameters were chosen after experimentation on the development set. We set the maximum output length during inference to input length + 50, but terminate early when possible.

总结起来有2个地方可以改进:第一,是对checkpoints进行average, 这个效果立竿见影:

2017.11.07 第八次实验:t2t transformer wmt32k big_single average model, 线下验证集得分 0.2810 , 提交测试集得分:0.27330

第二,要有高性能的深度学习服务器。谷歌实验中最好的结果是在8块 P100 GPU的机器上训练了3.5天,对我的单机1080TI深度学习主机来说,一方面训练时对参数做了取舍,另一方面用时间换空间,尝试增加训练步数,直接将训练步数增加到100万次,结果还是不错的:

2017.11.15 第九次实验:t2t transformer wmt32k big_single 1000k 10beam,线下验证集得分0.2911,线上提交测试集得分0.28560

然后继续average checkpoints:
2017.11.16 第十次提交: t2t transformer wmt32k big_single 1000k average 10beam, 线下验证集得分0.2930,线上提交测试集得分0.28780

这两个方法确实能有效提高BLEU值,所以我继续沿用这个策略,按着训练时间推算了一下,估计这台机器在12月初比赛正式结束前大概可以训练一个250万次的模型,当然,这个给自己预留了最后提交比赛结果的时间。不过在11月27日,我在英中机器翻译比赛测试集A结束提交前提交了一个训练了140万次,并做了模型average的提交,算是这个赛道Test A关闭前的最后一次提交:

2017.11.27 第十一次提交 t2t transformer wmt32k big_single 1400k.beam10.a0.9.average, 验证集 0.2938 测试集 0.28950

12月1日凌晨测试集B正式放出,这个是最终排名的重要依据,只有2次提交机会,并且结果不会实时更新,只有等到12月3号之后才会放出最终排名。我的英中2500k Transformer模型大概在12月2号训练完毕,我做了Test B的第一次提交:

2017.12.2 average b10 a0.9: 0.2972(验证集)

之后,我逐一检查了保留的20个checkpoint在验证集上的得分,最终选择了高于平均值的11个checkpoint的average又做了第二次提交,虽然验证集只高了0.0001, 但是在这样的比赛中,“蚊子肉也是肉啊”:

2017.12.3 average select 11 b10 a0.9: 0.2973(验证集)

这就是我在英中机器文本翻译比赛中的整个历程,在Test A的最终排名大概在二十几名,但是最后一次模型的结果应该还能提高,所以预期是前20,剩下的就是等待TEST B的最终排名结果了。做到这个份上,其实我还挺满意的,不过故事如果真的到此就结束了,那算不上奇遇,有意思的事情才刚开始。

AI Challenger 2017有两个赛道和机器翻译有关,一个是英中机器文本翻译比赛(最高奖金30万),另外一个是英中机器同声传译比赛(最高奖金40万),一开始报名的时候,直观上觉得后者比较复杂,一方面奖金部分说明了问题,另外赛题描述部分也让人觉得涉及到语音处理,比较复杂:

简介
随着最近深度学习在语音、自然语言处理里面的应用,语音识别的错误率在不断降低,机器翻译的效果也在不断提高。语音处理和机器翻译的进步也推动机器同声传译的进步。如果竞赛任务同时考虑语音识别、机器翻译和语音合成这些项目,参赛队伍遇到的难度会很大。所以本次评测重点也在语音识别后的文本处理和机器翻译任务。翻译语言方向为英文到中文。

语音识别后处理模块:语音识别后的文本与书面语有很多不同。识别后文本具有(1)包含有识别错误;(2)识别结果没有标点符号;(3)源端为比较长的句子,例如对40~50s的语音标注后的文本,没有断句;(4)口语化文本,夹杂语气词等特点。由于本次比赛没有提供错误和正确对照的文本用于训练纠错模块。本次比赛提供的测试集合的源端文本是人工对语音标注后的文本,不包含识别错误。针对其它的特点,参赛队伍可以这几个方面考虑优化,但不限于以下几个方面:

1. 针对无标点的情况,参赛方可以利用提供的英文单语数据训练自动标点模块。用自动标点模块对测试集合文本进行添加标点。自动标点也属于序列标注任务,选手可以使用统计模型或是神经网络的模型进行建模。

2. 针对断句:源端文本都是比较长的文本,不利于机器翻译,参赛者可以设定断句策略。例如,参赛者可以依据标点来进行断句,将每个小的分句送入机器翻译系统。

3. 针对口语化:参赛队伍可以制定一些去除口语词的规则来处理测试集合。

机器翻译模块:将识别后处理的文本翻译成目标语言。参赛队伍需要根据评测方提供的数据训练机器翻译系统,可以自由的选择机器翻译技术。例如,基于规则的翻译技术、基于实例的翻译技术、统计机器翻译及神经网络机器翻译等。参赛队伍可以使用系统融合技术,但是系统融合系统不参与排名。

数据说明
机器翻译训练集。我们提供了1000万左右英中对照的句子对作为训练集合。训练数据领域为口语领域。所有双语句对经过人工检查,数据集从规模、相关度、质量上都有保障。一个英中对照的句子对,包含一句英文和一句中文文本,中文句子由英文句子人工翻译而成。

自动标点训练数据。选手可以利用提供的1000万文本训练自动标点系统。

验证集和测试集。我们会分别选取多个英语演讲的题材的音频,总时长在3~6小时之间,然后按照内容切分成30s~50s不等长度的音频数据,人工标注出音频对应的英文文本。人工标注的文本不翻译识别错误、无标点、含有语气词等。人工标注的好的英文文本会由专业译员翻译成中文文本,就形成了英中对照的句子对。抽取的英中对照的句子对会被分割为验证集和测试集。验证集和测试集最终是以标准的XML格式提供给选手。

我在一开始的时候考虑到这个比赛同样提供上千万句对的语料,所以当时顺手报名了这个同声传译比赛,但是直到最后一刻,我还没有仔细看过或者准备过这个任务。不过12月2号当我第一次完成英中机器翻译比赛的测试集B提交后,以完成作业的心态了解了一下这个英中机器同传比赛的题意以及数据集,发现这里提供的训练集和英中机器翻译比赛的数据是一致的,也就是说机器翻译模块可以复用之前训练的英中Transformer模型,而真正需要解决的,是标点符号自动标注模块以及断句模块。

感谢Google、Github和开源世界,在测试了几个自动标点标注模块后,我把目光锁定在 punctuator2(A bidirectional recurrent neural network model with attention mechanism for restoring missing punctuation in unsegmented text), 一个带attention机制的双向RNN无标点文本标点符号还原工具,通过它很快的构建了英文文本自动标点标注模块,并且用在了英中机器同声传译比赛的验证集和测试集上,验证集结果不算太差,所以对应英中机器翻译的模型,我也做了两次测试集B的提交,但是至于结果如何,我根本无法判断,因为在测试集A上,我没有提交过一次,所以无法判断测试集和验证集的正相关性。但是完成了 AI Challenger 的相关“作业“,我基本上心满意足了,至于结果如何,Who Care?

大约一个周之后测试集B上的结果揭晓,我在英中机器翻译文本比赛上进了前20,英中同声传译比赛上进了前10,不过前者的参数队伍有150多支,后者不足30支,特别是测试集B的提交队伍不到15支,有点诡异。原本以为这就结束了,不过到了12月中旬的某个周末,我微信突然收到了AI Challenger小助手的催收信息,大意是需要提交什么代码验证,问我为什么一直没有提交?我一脸错愕,她让我赶紧查看邮件,原来早在一个周之前的12月9号,AI Challenger发了一封邮件,主题是这样的:“AI Challenger 2017 TOP10 选手通知”

亲爱的AI Challenger,

恭喜你,过五关斩六将进入了TOP10,进入前十的机率是0.56%,每一位都是千里挑一的人才。非常不容易也非常优秀!

为了保证竞赛公平公正性,您还需要在12月10日中午12点前按如下格式提交您的代码至大赛核验邮箱aichallenger@chuangxin.com

邮件格式:
主题:AI ChallengerTOP10代码提交-队伍名称-赛道
正文:
队伍名称
全体队员信息:姓名-AI Challenger昵称-电话-邮箱-所在机构-专业&年级

附件:(文件名称)
1- 代码

非常感谢您的合作。

原来测试集B上的前10名同学需要提交代码复核,我原来以为只有前5名需要去北京现场答辩的同学要做这个,没想到前10名都需要做,赶紧和AI Challenger小助手沟通了一下,因为自己几乎都是通过开源工具完成的比赛,就简单的提交了一份说明文档过去了。正是在参加AI Challenger比赛的同一时期,我们的专利机器翻译产品也马不停蹄的开展了,出于对两个赛道前几名队伍BLEU值的仰望,我准备去北京旁听一下现场答辩,所以当天还和AI Challenger小助手沟通了一下现场观摩的问题,小助手说,前十名可以直接来,所以我觉得进入前十名还是不错的。

没想到第二天一早又收到Challenger小助手的微信留言,大意是:你不用自己买票来观摩比赛了,因为前面有几支队伍因种种原因放弃现场答辩,你自动递补为第5名,需要来北京参加12月21日的现场决赛答辩和颁奖礼,我们给你买机票和定酒店。吃不吃惊?意不意外?我当时的第一反应这真是2017年本人遇到最奇特的一件事情。。。然后很快收到了一封决赛邀请函:

亲爱的AI Challenger,

恭喜你,过五关斩六将走到了决赛,进入决赛的机率是0.28%,每一位都是千里挑一的人才。非常不容易也非常优秀!

“AI Challenger 全球AI挑战赛”面向人工智能领域科研人才,致力于打造大型、全面的科研数据集与世界级竞赛平台。由创新工场、搜狗、今日头条联合创建,旨在从科研角度出发,满足学术界对高质量数据集的需求,推进人工智能在科研与商业领域的结合,促进世界范围内人工智能研发人员共同探索前沿领域的技术突破及应用创新。

2017年是AI Challenger的诞生年,我们公布了百万量级的计算机视觉数据集、千万量级的机器翻译数据集,并主办多条细分赛道的AI竞赛。本次英中机器同传竞赛主要任务为集中优化语音识别后处理和机器翻译模块,旨在解决机器同声传译中的技术问题。

......

恭喜所有的入围选手!所有的入围者将在12月21日到中国北京进行现场答辩,本次大赛将以最终榜单排名结合答辩表现,加权计算总成绩,决出最终的大奖。

在答辩之前,我们需要Top5团队于12月18日下午17点前提交包括:
1-答辩PPT、
2-队员情况(个人姓名、个人高清半身照片、个人学校-年级-专业/公司-部门-职务、是否有指导老师-如有,请附上老师150字内简介)
3-团队出席名单(涉及报销事宜)
4-代码(供审查,如有作弊情况将按大赛规则处理)
5-150字内个人简介-选手手册素材(建议为三段话,第一段话是背景介绍,包括你的学校、实验室、师从老师等信息;第二段话可以介绍你的技术优势,包括Paper、竞赛履历、实习履历、项目经历;第三段话支持自由发挥,个人主页、你的爱好,让我们发现一个独一无二的你)
......

虽然去北京参加现场决赛也只是陪太子读书,不过最终还是决定去参加现场答辩,当然这里还有一关需要验证,前10名只需要提交代码或者代码描述即可,前5名参加决赛的同学还要复现整个流程,我很快被小助手拉入一个小群,里面有来自搜狗的工程师同学,他们给我提供了一台深度学习机器,让我复现整个过程以及最终核验比赛结果。当然,留给我的时间比较紧张,12月21号要去北京参加现场答辩,当时已经是12月18号了,所以Challenger小助手特地给我将时间留到了最后一刻。准备PPT和复现整个流程同时进行(复现并不是等于重新训练一遍,譬如机器翻译模型可以直接上传之前训练好的),终于赶在最后时刻完工。不过我自己答辩现场的感觉匆匆忙忙,效果也一般,但是学习了一圈其他获奖队伍的思路,很有收获:Transformer是主流获奖模型,但是很多功夫在细节,包括数据预处理阶段的筛选,数据 & 模型后处理的比拼,当然,牛逼的深度学习机器也是不可或缺的。

附上当时现场答辩PPT上写得几点思考,抛砖引玉,欢迎大家一起探讨机器翻译特别是神经网络机器翻译的现状和未来:

  • NMT开源工具的生态问题,这个过程中我们尝试了OpenNMT, OpenNMT-py, OpenNMT-tf, Tensorflow-nmt, Tensor2Tensor等工具, 总体感觉OpenNMT的生态最完备,很像SMT时代的Moses
  • NMT的工程化和产品化问题,从学术产品到工程产品,还有很多细节要打磨
  • 面向垂直领域的机器翻译:专利机器翻译是一个多领域的机器翻译问题
  • 由衷感谢这些从idea到开源工具都无私奉献的研究者和从业者们,我们只是站在了你们的肩膀上

当然,参加完AI Challenger比赛之后我们并没有停止对于神经网络机器翻译应用的探索,也有了一些新的体会。这半年来我们一直在打磨AIpatent机器翻译引擎,目标是面向中英专利翻译、中日专利翻译、日英专利翻译提供专业的专利翻译引擎,欢迎有这方面需求的同学试用我们的引擎,目前还在不断迭代中。

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:

本文链接地址:AI Challenger 2017 奇遇记 /?p=10218

Deep Learning Specialization on Coursera

AI Challenger 2017 奇遇记》上有44条评论

  1. yangyaofei

    请问能写一些详细的怎么用的文章么?
    我自己重写google-nmt和现在用tensor2tensor效果都不好,才跑出不到10的值,预处理什么的也进行了,效果没啥改变

    [回复]

    52nlp 回复:

    可以去看相关工具官方给得一些case,已经足够详细了

    [回复]

    Jiaqi Wu 回复:

    两位你们好,我用了600W对中英数据,超参时base single GPU的,大概在steps=30万次时,approx_bleu_score=19点多。但在decode后,使用t2t-bleu结果只有5点多,是怎么回事呢?谢谢你们

    [回复]

    yangyaofei 回复:

    首先说下自己的问题,我的问题真是让人又气又笑,是应为Python会将n r 都算作一行,我机器内存有限,按照行读取就导致语料对不上出了问题...

    Jiaqi:这个问题我觉得是这样的,对于中文的BLEU值计算应该是char-base的,应该将decode的译文加上空格后对比,对应测试集的数据也要加上空格.当然,只是在中文上加,英文和标点不加.具体的有一个文件用来转换,可以去WMT的官网里面找到.

  2. Danny Yuan

    请问文中提到的average checkpoint具体是如何应用吗?是不是大概这样一个流程?
    t2t-datagen
    t2t-trainer
    avg_checkpoints
    t2t-decoder (用参数指明是用哪些avraged过的check points)

    谢谢!

    [回复]

    52nlp 回复:

    印象用的是这个脚本 https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/utils/avg_checkpoints.py

    [回复]

    Danny Yuan 回复:

    是在train完后,decode之前用这个脚本吗?

    [回复]

    52nlp 回复:

    是的

  3. Jiaqi Wu

    博主你好,我想问一下,我用了600W对英中数据,用的超参是base single gpu那一个。在steps=30万次时,我的approx_bleu_score是19点多,但是训练好并用模型decode后,用t2t-bleu评估发现,翻译结果之后5点多,这是为什么呢?我尝试跑官方的例子,也是这样。谢谢你~

    [回复]

    52nlp 回复:

    完全follow官方的例子也是这样?这个我就不太清楚了。如果是官方的例子出问题,建议多看一下它的issue,先把官方的例子走通,再来走ai challenger的例子。

    [回复]

    Jiaqi Wu 回复:

    博主,你当时训练时,注意过approx_bleu_score吗?和t2t-bleu的结果差别大吗?谢谢~

    [回复]

    52nlp 回复:

    当然注意过这个值,这个值要略高一些

  4. Jiaqi Wu

    博主你好,我想继续问一下,我看你英中翻译表现得特别好,我就想问问,你的problem为了用自定义数据是否加了僵尸dammy文件防止其自动下载?还有一点就是你的数据之前在t2t-datagen之前是否做了必要性的处理?包括在t2t-decode时,你的测试集做过某些必要性处理吗?我的效果不好,我怀疑就是差了某些对数据处理的步骤,谢谢你~

    [回复]

    52nlp 回复:

    时间有点长,我有点忘了,大概印象是复用了英德的wmt32k的problem,但是修改了一下脚本,当然不能引入外部数据;预处理阶段就是简单用了Moses的预处理流程,对测试集做同样的处理,文章中大概说了。

    [回复]

    Jiaqi Wu 回复:

    博主我针对tensor2tensor有三个问题,第一就是,你的比赛是英中翻译,为什么要针对英德的problem做修改呢(我看源码是有enzh的problem的)?第二个问题是,你说的外部数据是指的什么数据呢?我看文章中说你是用的比赛数据1000万条左右做训练的,如果要用比赛数据的话,我看github上说最好生成僵尸压缩文件防止脚本自动下载数据集。第三个问题是tensor2tensor的transformer也要做Moses预处理吗?我看网上说t2t-datagen好像就是做 数据生成的,就不用事先处理了。以上都是针对tensor2tensor的transformer模型的,期待博主的回答~谢谢~

    [回复]

    52nlp 回复:

    印象当时enzh的problem是刚出来的,不太完善;第二个问题,我不清楚你说的是什么;第三个问题,预处理和模型没什么关系。

    Jiaqi Wu 回复:

    我的第二个问题的意思是,你transformer训练的数据是比赛数据吗?因为tensor2tensor官方的例子是会自动下载数据集的。如果不使用自动下载的数据集,就要事先生成僵尸压缩文件防止脚本自动下载数据集。
    第三个问题是你使用tensor2tensor的transformer时,需不需要事先用Moses预处理训练集?谢谢你~

    52nlp 回复:

    额,当然是比赛数据啊,官方的脚本修改一下即可,不用它的数据用自己的数据。。。当然,你说的这种方法也可取;第三个问题我是用Moses的相关脚本预处理了数据,用不用看个人,也可以自己来预处理数据。

    Jiaqi Wu 回复:

    好的,谢谢你~

    zhaohong_guo 回复:

    请问如何使用主办方提供的数据啊,官方提供的脚本不太对。不清楚t2t-datagen做了哪些事,t2t_datagen的源码有点多。

    [回复]

    52nlp 回复:

    去follow一下ai challenger 2018官方提供的baseline吧,跑通再说,有问题自己尝试修改:

    https://github.com/AIChallenger/AI_Challenger_2018/tree/master/Baselines/english_chinese_machine_translation_baseline

    [回复]

    zhaohong_Guo 回复:

    谢谢。现在就是在跑baseline。用tensor2tensor提供的数据能跑通,没问题。AI_Challenge提供的这个脚本有些问题,还在读源码看怎么处理数据呢

  5. 魏相鹏

    博主,您好!请问您有对这980万的中文数据进行清洗吗?或者有没有对特殊的字符进行过滤处理?

    [回复]

    52nlp 回复:

    中文没有进行特殊的处理,就是进行了中文分词

    [回复]

    魏相鹏 回复:

    好的,谢谢您

    [回复]

  6. 阿水

    博主您好,我在T2T中使用transformer_big训练时会出现如下错误:2018-09-05 03:34:25.344145: E tensorflow/stream_executor/event.cc:33] error destroying CUDA event in context 0xe353ce0: CUDA_ERROR_ILLEGAL_ADDRESS
    但是使用普通模型就不会出现错误,请问这是因为我的GPU显存不够吗?但是博主您的GPU是一块1080ti我是两块,应该够的啊。不知道哪里出了问题,请求解答!

    [回复]

    52nlp 回复:

    抱歉,时隔快一年,很多情景变了,我无法确认你的问题。需要说明的是,我当时单卡用的是 transformer_big_single, 你这个用双卡的transformer_big我没有测试过,你可以先试试单卡的big_single看看能否跑通?另外如果数据集不同,也可能造成问题。

    [回复]

    阿水 回复:

    博主您好,还想请问一下,BLEU怎么测试呢?T2T官方文档给出的一行代码t2t-bleu --translation=translation.en --reference=ref-translation.de,但是这个只是测试当前句子对应的BLEU值吧,不同的句子,模型翻译效果不同,测得的BLEU值也不同,那么到底要怎样测试一个准确的模型BLEU值呢?

    [回复]

    52nlp 回复:

    bleu一般是在验证集或者测试集上进行计算的,一开始你应该单独切分好验证集、测试集(例如ai challenger 上提供有8000句对的验证集、测试集),在这个8000句对上你用训练好的模型来翻译验证集或者测试集,然后通过相关的脚本来计算整体的一个值,例如Moses提供的计算bleu值的perl脚本:

    multi-bleu.perl reference < mt-output http://www.statmt.org/moses/?n=Moses.SupportTools#ntoc5

  7. Lee

    博主您好, 请问在做 同声传译任务的时候, 机器翻译采用了 t2t transformer, 标点标注采用了punctuator2, 那 英语语音识别这款采用了什么呢? 谢谢

    [回复]

    52nlp 回复:

    请仔细看文章或者看一下官方的比赛要求,这个比赛看似要语音识别,实际没有涉及到

    [回复]

    Lee 回复:

    谢谢楼主, 原来比赛音频已经被标注为 无标点的英文文本. 那如果要做英语语音音频识别, 博主有什么推荐么,帮指条明路 :)

    验证集和测试集。我们会分别选取多个英语演讲的题材的音频,总时长在3~6小时之间,然后按照内容切分成30s~50s不等长度的音频数据,人工标注出音频对应的英文文本。人工标注的文本不翻译识别错误、无标点、含有语气词等。人工标注的好的英文文本会由专业译员翻译成中文文本,就形成了英中对照的句子对。

    [回复]

    52nlp 回复:

    抱歉,这一块儿我不清楚,不过现在应该有很多开源工具可以操作,你google一下试试。

  8. 阿水

    博主,请问一下,T2T怎样修改参数呢?比如说层数,训练步数,beamsize等
    还有就是工具在格式化数据集的时候(t2t datagen),是不是自带分词了?不需要自己手动进行分词。

    [回复]

    52nlp 回复:

    这些基础问题,建议自己多看看t2t官方的资料吧

    [回复]

  9. 阿水

    还有就是batch_size的设定必须要是2的多少次方这样的吗(1024,2048。。。。),因为我再跑模型的时候默认的2048跑不了,按照教程上说的设置成1024就能跑了,我在想能不能设置成1800或者1500呢?

    [回复]

  10. 阿水

    博主您好,我在训练的时候出现了这个问题,为什么才到30%就结束了呢,每次都是这样。
    INFO:tensorflow:Evaluation [10/100]
    INFO:tensorflow:Evaluation [20/100]
    INFO:tensorflow:Evaluation [30/100]
    INFO:tensorflow:Finished evaluation at 2018-09-21-07:01:46
    我的batch_size=1024 其他超参数为big默认的。

    [回复]

    52nlp 回复:

    这个貌似是训练时评估的log,实际情况是一致的吗?也就是你虽然这里看到的是30%,但是事实上是全部训练完了

    [回复]

    阿水 回复:

    我觉得应该没有,因为训练了几万步了,BLEU分数还是2%左右,太不正常了,所以是这个的问题吗?是什么因素影响的呢?

    [回复]

    52nlp 回复:

    抱歉,tensor2tensor我快1年没用了,有些细节记不清了;给你一个建议,直接参加AI Challenger 2018的比赛,直接学习官方给得baseline,也是用tensor2tensor跑transformer模型的,里面的脚本把整个流程串了一遍,先把baseline跑起来再说:

    https://github.com/AIChallenger/AI_Challenger_2018/tree/master/Baselines/english_chinese_machine_translation_baseline

  11. 阿水

    博主请问一下,loss最终只能达到1.2左右正常吗,感觉好大啊。
    INFO:tensorflow:loss = 1.3547997, step = 1191000 (34.544 sec)

    [回复]

    52nlp 回复:

    loss这个我有点忘了,你看看log中有没有这个值:approx_bleu_score ,这个值更有参考意义

    [回复]

发表评论

电子邮件地址不会被公开。 必填项已用*标注