写给NLP研究者的编程指南

写给NLP研究者的编程指南(总结)

基础:

  • neural NLP
  • python(tensorflow、pytorch)
  • good science

将要学到的:how to write code in a way that makes your life easier!

写研究代码主要有两种模式:

  • 写原型
  • 写组件

一,写原型

1. 如何快速地写代码
  1. 使用一个框架

    核心:training loop

  2. 找一个好的起点

    • baseline
    • 其他人的可阅读的代码
    • 重现以理解整个过程,以方便找到过程中更好地决策。
  3. 先复制,再重构

    写原型的话,先快速实现,再重构代码。

  4. 使用好的编码风格

    • 有意义的变量名
    • 一些重要数据的shape注释
    • 不明显逻辑的描述
  5. 最小化测试过程

    • 使用较小的测试集
    • 数据预处理要一致
  6. 硬编码的多少

    • 原型的话,不必考虑太多share的元素,硬编码可以多一些,以快速实现为目标。
    • 不要太抽象,抽象是为了更好地应用和share,适合写组件的情况。
2. 运行实验,记录试过的结果
  • 记录你已经运行的结果
  • 控制实验
    • Important for putting your work in context,to know what caused the difference
    • Very controlled experiments,varying one thing: we can make causal claims(非常有控制的实验,改变一件事:我们可以提出因果关系)
  • 通过一个配置类、配置文件、或配置脚本来记录参数情况
    • Not good: modifying code to run different variants; hard to keep track of what you ran
    • Better: configuration files, or separate scripts, or something
3. 分析模型表现:它达到预想的结果了吗

Crucial tool for understanding model behavior during training

  • Tensorboard

    Embeddings have sparse gradients,(only some embeddings are updated), but the momentum coefficients from ADAM are calculated for the whole embedding every time.

    Solution:

    from allennlp.training.optimizers import DenseSparseAdam
    

    uses sparse accumulators for gradient moments

  • Look at your data

    • 单独的数据处理,理解数据
    • 模型需要在没有标签/计算损失的情况下运行

Key point during prototyping: The components that you use matter. A lot.

二,写组件

1. 好的开发流程
  • source control:如github

    优点:

    • 可以返回原先的版本
    • 使协作变得更加容易
    • 可以revisit older version of your code
    • code review
  • 持续集成

  • 单元测试:自动检查您的代码的一小部分正常工作,如assert。

2. 可重用的组件

特点:

  • Things That We Use A Lot
    • training a model
    • mapping words (or characters, or labels) to indexes
    • summarizing a sequence of tensors with a single tensor
  • Things That Require a Fair Amount of Code
    • training a model
    • (some ways of) summarizing a sequence of tensors with a single tensor
    • some neural network modules
  • Things That Have Many Variations
    • 词嵌入层
  • Things that reflect our higher-level thinking
3. Reusable Components in AllenNLP
  • seq2vec
  • seq2seq
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值