阅读大概需要10分钟

跟随小博主,每天进步一丢丢

知乎

https://zhuanlan.zhihu.com/p/48504619

导读

最近AllenNLP在EMNLP2018上做了一个主题分享,名为“写给NLP研究者的编程指南”(Writing Code for NLP Research)。

内容干货满满,仅仅只是看了slide就知道是非常有意思的一次演讲了。slide共有254页之多,这里我简单做个摘要,分享一些有意思的内容。

有时间的话推荐大家直接看slide,下面是地址,请自备梯子。

https://docs.google.com/presentation/d/17NoJY2SnC2UMbVegaRCWA7Oca7UCZ3vHnMqBV4SUayc/edit#slide=id.p

大纲

下面是整个分享的大纲。通过这次演讲,你可以学到如何写代码来促进你的研究,以及可复现的实验。

这里有两种写研究代码的模式,一种是写原型,一种是写组件。

我们先从写原型的方式开始介绍。

当我们开始写一个原型代码的时候,我们要做到下面三点。

  1. 写代码要快

  2. 跟踪实验结果

  3. 分析模型结果

快速开发

要做到快速编程,不要从头开始写所有内容,而是使用框架。这里的框架不仅指tensorflow或pytorch之类的框架,也可以理解为模板。比如上图中如果写trining loop的部分,已经有人写好了。我们只要看懂后,直接拿来用就行,没有必要从头开始自己写所有部分。

上面提到的一些内容,都是可以找到现成框架来套用的。

Don’t start from scratch! Use someone else’s components.

如果有人把你想用的东西模块化了,还等什么,直接拿来用啊!

要想快速开发,另一个建议就是先复制,再重构。要记住,我们是在写原型,不用在乎什么可用性,先把代码写work了再说。如果实现的效果不错的话,再回去重构。

另外,我们要有好的编程习惯。比如起有意义的变量名,写注释帮助理解。记住,我们是写给人看的,不是机器!

跟踪实验结果

可以准备一个Excel表格,来记录实验结果

每次只改变一个部分,方便跟踪实验结果的变化其原因在于哪里。

这里光是embedder,我们就有很多种选择。

使用设定文件来记录模型的改变,方便我们以后查询当时的设定。

分析模型结果

在训练的时候,可视化对于分析模型表现是非常重要的。这个技能必须掌握。

Tensorboard可以提供很多分析结果。

Tensorboard能帮我们找到优化的bug。比如上图中的embedding梯度有两个数量级的差别。

原因在于embedding的梯度是稀疏梯度,即只有一部分会被更新。但是ADAM中的动量系数是针对整个embedding计算的,所以解决方法是直接引入特定的优化器:DenseSparseAdam。

对于预测结果,如果和做到交互式的方式来查看的话,是最好的。

开发组件

与写原型不同,开发可重复使用的组件有很多要注意的地方。

Code Reveiw是必不可少的。Review的时候,不仅能发现错误,还能提高代码的可读性。

如果我们不是软件开发人员的话,对于持续集成 以及构建自动化 这两个词可能比较陌生。通常我们只说持续集成的时候,也包含了构建自动化的意思。想要做到这点,要多写测试才行。

当然,如果我们不是开发一个很多人都会用到的库,上面这些步骤是用不到的ㄟ(▔,▔)ㄏ

不过测试很重要,如果是原型开发,也要做一些最基本的测试。

对读取的数据进行测试,看是否正确。

对模型进行测试,比如检查维度是否一致。

可以看到这两种测试的代码都不会很多。所以不要犯懒了,好好写测试吧。

关于AllenNLP库的一些介绍,这里就不花时间讨论了,感兴趣的可以看slide中p141~p205的部分。

下面直接进入分享的部分。

分享研究

简化安装的流程,令代码运行在任何平台,使用隔离的环境。

下面是使用Docker的一些优点。

用docker开发的好处不用多说,大家想必也已经都知道了。当然,缺点也是有的。

至于Python的包管理系统,AllenNLP采用了ANACONDA。

Docker是不错,但不适合做本地开发,这样的话,使用一些本地的包管理系统反而更方便。

最后做个总结。

总结

  • 快速开发原型(要安全)

  • 写安全的产品代码(要快)

  • 好的流程有利于做出好的研究

  • 使用正确的抽象

  • 查看AllenNLP(广告)

这次分享的slide看了几遍,很多地方看得自己脸上发热,不写测试什么的说到了痛处。现在人工智能领域对于算法工程师的要求已经不是能掉个包,谈谈研究那么简单了,工程实践能力已经变得越来越重要。写优秀的代码,做优秀的研究,二者是一个互相促进的过程。最后放上原slide链接,感兴趣的最好自己看一遍。

IELTS a bit

stain n. 污点;污染

stake n. 投资,投放的本钱

utilize v. 使用;利用

推荐阅读:

一大批历史精彩文章啦

详解文本分类之多通道CNN的理论与实践

详解文本分类之DeepCNN的理论与实践

介绍4个大神常用而你不常用的python函数

资源 | 邓力、刘洋等合著的这本NLP经典书籍之情感分析中文版

资源 | 有没有必要把机器学习算法自己实现一遍?


一文搞懂如何高效学习与进阶NLP or CV!相关推荐

  1. ES6学习——一文搞懂ES6

    ES6学习--一文搞懂ES6 es6介绍 ES全称EcmaScript,是脚本语言的规范,而平时经常编写的EcmaScript的一种实现,所以ES新特性其实就是指JavaScript的新特性. 为什么 ...

  2. 一文搞懂如何使用ArcGIS API for Python训练深度学习模型

    一文搞懂如何使用ArcGIS API for Python训练深度学习模型 文章目录 一文搞懂如何使用ArcGIS API for Python训练深度学习模型 写在前面 一.ArcGIS API f ...

  3. 【显卡】一文搞懂显卡

    [显卡]一文搞懂显卡 文章目录 [显卡]一文搞懂显卡 1. 前言介绍 1.1 CPU和显卡的区别 1.1.1 作用不同 1.1.2 结构不同 1.1.3 应用场景不同 1.2 三个著名的显卡公司 2. ...

  4. 一文搞懂MySQL数据库分库分表

    如果数据量过大,大家一般会分库分表.分库需要注意的内容比较少,但分表需要注意的内容就多了. 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过 ...

  5. 一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  6. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  7. 【UE·蓝图底层篇】一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass

    本文将对蓝图类UBlueprint的几个UClass成员变量NativeClass.GeneratedClass.BlueprintClass.ParentClass进行比较深入的讲解,看完之后对蓝图 ...

  8. 一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下

    B站实操视频更新 跟着拉面学习AWS--EC2, IGW, RT, NAT, SG 简介 长文多图预警,看结论可以直接拖到"总结"部分 本文承接上一篇文章介绍以下 AWS 基础概念 ...

  9. 一文搞懂 Traefik2.1 的使用

    原文链接:一文搞懂 Traefik2.1 的使用 一文搞懂 Traefik2.1 的使用 核心概念 安装 ACME 中间件 灰度发布 流量复制 TCP 简单 TCP 服务 带 TLS 证书的 TCP ...

  10. 一文搞懂Qt中的颜色渐变(QGradient Class)

    一文搞懂Qt中的颜色渐变(QGradient Class) 1, 快速开始! Qt中与颜色渐变有关的类是QGradient 其中它又有三个子类:QLinearGradient.QRadialGradi ...

最新文章

  1. 一 ASP.NET Html 表单
  2. SpringBoot(配置druid数据源、配置MyBatis、事务控制、druid 监控)
  3. linux 线程同步消息队列,Linux 多线程同步之消息队列
  4. 接口、抽象类、类之间的关系
  5. 新手配置 Jetty + Eclipse (Hot code debugging)
  6. 《用户网络行为画像》读书笔记(二)
  7. 采用docker部署3台Redis分布式红锁实例
  8. Coding and Paper Letter(五十九)
  9. pl/sql 存储过程实例
  10. 华为HCNE考试110个知识点
  11. 2022hdu多校1C题题解
  12. 基于ESP8266的物联网智能鱼缸系统设计
  13. linux 目录防篡改,一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法
  14. matlab引用csv文件,如何用MATLAB读取csv文件
  15. 今日头条如何运营,今日头条怎么运营好,今日头条运营技巧
  16. 纯CSS 写动画背景,高仿蚂蚁庄园小鸡仔
  17. Couldn‘t find meta-data for provider with authority xxx.fileProvider
  18. 第19章 Linux电源管理的系统架构和驱动之CPUFreq驱动
  19. [情感]爱的方式(作者:睌风)
  20. 操作系统——存储器管理(连续分配存储管理方式)

热门文章

  1. ASIHttpRequest封装
  2. 我的编程学习日志(9)--交换A,B值得方法(相加,异或,swap函数)
  3. 显示js对象所有属性和方法的函数
  4. jQuery实现回车绑定Tab事件
  5. BZOJ3157/BZOJ3516 国王奇遇记(矩阵快速幂/数学)
  6. 收藏一个好看的单选多选样式
  7. java中int算法的有趣现象
  8. (七)对Jmeter进行参数化的俩种方式
  9. 博客园自定义样式(标题 h1 h2 h3)
  10. Web---HTTP请求、重定向、转发和数据压缩