美文网首页Machine Learning & Recommendation & NLP & DL
自然语言处理N天-Transformer学习(实现一个Trans

自然语言处理N天-Transformer学习(实现一个Trans

作者: 我的昵称违规了 | 来源:发表于2019-03-01 14:05 被阅读4次
    新建 Microsoft PowerPoint 演示文稿 (2).jpg

    这个算是在课程学习之外的探索,不过希望能尽快用到项目实践中。在文章里会引用较多的博客,文末会进行reference。
    搜索Transformer机制,会发现高分结果基本上都源于一篇论文Jay Alammar的《The Illustrated Transformer》(图解Transformer),提到最多的Attention是Google的《Attention Is All You Need》。

    • 对于Transformer的运行机制了解即可,所以会基于这篇论文来学习Transformer,结合《Sklearn+Tensorflow》中Attention注意力机制一章完成基本的概念学习;
    • 找一个基于Transformer的项目练手

    4.基于Tensorflow实现Transformer

    距离上次更新已经过去两天了,放弃之前那个Transformer实现,我们换一个项目吼不吼啊(https://github.com/Kyubyong/transformer)。
    这周快要累死了,上课上到吐,还被教授公开处刑……
    之前那个实现阅读起来有点太麻烦,就弃了。

    作者的目的

    • 学习论文,进行实现
    • 分享自己的代码

    与原论文的不同

    该项目是实现一个德语-英语的翻译功能,
    内容,而是要实现论文的核心思想,并作出简单快速的验证。由于这个原因,部分代码与原论文有所不同。这些不同之处有:

    • 使用了 IWSLT 2016 de-en 数据集,而不是 wmt 数据集,因为前者更小,且不需要特殊的预处理。
    • 为了简化,我用单词而非子单词构建了词表。当然,如果愿意你可以尝试 bpe 或者 word-piece。
    • 我将位置编码直接用作了参数,而原文用了一些正弦公式。论文作者之一 Noam 说两种方法都有效,详见:https://www.reddit.com/r/MachineLearning/comments/6gwqiw/r_170603762_attention_is_all_you_need_sota_nmt/
    • 论文根据训练步数逐渐调节学习率,我简单地把学习率固定在一个非常小的值 0.0001 上。因为使用小数据集,训练的速度已经足够快(使用单块 GTX 1060 仅需几个小时!!)
      最后一个很恐怖了,使用1060显卡还要几个小时的训练时间,cpu估计就废了,看样子还是得快些打通colab的使用。

    文件描述

    注意看这里的文档,我们之前写的都是一段脚本,这显然是不够的,一个是要注意文档的写法,还有各个模块之间的关系。
    hyperparams.py 包括全部所需的超参数
    prepro.py 可为源和目标创建词汇文件(vocabulary file)
    data_load.py 包括装载和批处理数据的相关函数
    modules.py 拥有全部编码/解码网络的构建模块
    train.py 包含模型
    eval.py 进行评估

    训练

    • 第一步:下载 IWSLT 2016 German–English parallel corpus 并且把它放在 corpora/文件夹
    • 第二步:如果必要的话在 hyperparams.py 下调整超参数(hyper parameters)
    • 第三步:运行 prepro.py,在 preprocessed 文件下生成词汇文件
    • 第四步:运行 train.py 或下载预训练好的文件(pretrained files)

    相关文章

      网友评论

        本文标题:自然语言处理N天-Transformer学习(实现一个Trans

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