Transformers2.0让你三行代码调用语言模型,兼容TF2.0和PyTorch

机器之心报道

机器之心编辑部

能够灵活地调用各种语言模型,一直是 NLP 研究者的期待。近日 HuggingFace 公司开源了最新的 Transformer2.0 模型库,用户可非常方便地调用现在非常流行的 8 种语言模型进行微调和应用,且同时兼容 TensorFlow2.0 和 PyTorch 两大框架,非常方便快捷。

最近,专注于自然语言处理(NLP)的初创公司 HuggingFace 对其非常受欢迎的 Transformers 库进行了重大更新,从而为 PyTorch 和 Tensorflow 2.0 两大深度学习框架提供了前所未有的兼容性。

更新后的 Transformers 2.0 汲取了 PyTorch 的易用性和 Tensorflow 的工业级生态系统。借助于更新后的 Transformers 库,科学家和实践者可以更方便地在开发同一语言模型的训练、评估和制作阶段选择不同的框架。

那么更新后的 Transformers 2.0 具有哪些显著的特征呢?对 NLP 研究者和实践者又会带来哪些方面的改善呢?机器之心进行了整理。

项目地址:https://github.com/huggingface/transformers

Transformers 2.0 新特性

  • 像 pytorch-transformers 一样使用方便;
  • 像 Keras 一样功能强大和简洁;
  • 在 NLU 和 NLG 任务上实现高性能;
  • 对教育者和实践者的使用门槛低。

为所有人提供 SOTA 自然语言处理

  • 深度学习研究者;
  • 亲身实践者;
  • AI/ML/NLP 教师和教育者。

更低的计算开销和更少的碳排放量

  • 研究者可以共享训练过的模型,而不用总是重新训练;
  • 实践者可以减少计算时间和制作成本;
  • 提供有 8 个架构和 30 多个预训练模型,一些模型支持 100 多种语言;

为模型使用期限内的每个阶段选择正确的框架

  • 3 行代码训练 SOTA 模型;
  • 实现 TensorFlow 2.0 和 PyTorch 模型的深度互操作;
  • 在 TensorFlow 2.0 和 PyTorch 框架之间随意移动模型;
  • 为模型的训练、评估和制作选择正确的框架。

现已支持的模型

官方提供了一个支持的模型列表,包括各种著名的预训练语言模型和变体,甚至还有官方实现的一个蒸馏后的 Bert 模型:

1. BERT (https://github.com/google-research/bert)

2. GPT (https://github.com/openai/finetune-transformer-lm)

3. GPT-2 (https://blog.openai.com/better-language-models/)

4. Transformer-XL (https://github.com/kimiyoung/transformer-xl)

5. XLNet (https://github.com/zihangdai/xlnet/)

6. XLM (https://github.com/facebookresearch/XLM/)

7. RoBERTa (https://github.com/pytorch/fairseq/tree/master/examples/roberta)

8. DistilBERT (https://github.com/huggingface/transformers/tree/master/examples/distillation)

快速上手

怎样使用 Transformers 工具包呢?官方提供了很多代码示例,以下为查看 Transformer 内部模型的代码:

#and need to be trained on the down-stream task

Transformers 同时支持 PyTorch 和 TensorFlow2.0,用户可以将这些工具放在一起使用。如下为使用 TensorFlow2.0 和 Transformer 的代码:

sentence_1 = "His findings were compatible with this research.“

使用 py 文件脚本进行模型微调

当然,有时候你可能需要使用特定数据集对模型进行微调,Transformer2.0 项目提供了很多可以直接执行的 Python 文件。例如:

  • run_glue.py:在九种不同 GLUE 任务上微调 BERT、XLNet 和 XLM 的示例(序列分类);
  • run_squad.py:在问答数据集 SQuAD 2.0 上微调 BERT、XLNet 和 XLM 的示例(token 级分类);
  • run_generation.py:使用 GPT、GPT-2、Transformer-XL 和 XLNet 进行条件语言生成;
  • 其他可用于模型的示例代码。

GLUE 任务上进行模型微调

如下为在 GLUE 任务进行微调,使模型可以用于序列分类的示例代码,使用的文件是 run_glue.py。

首先下载 GLUE 数据集,并安装额外依赖:

pip install -r ./examples/requirements.txt

然后可进行微调:

export GLUE_DIR=/path/to/glue
export TASK_NAME=MRPC

python ./examples/run_glue.py \
 --model_type bert \
 --model_name_or_path bert-base-uncased \
 --task_name $TASK_NAME \
 --do_train \
 --do_eval \
 --do_lower_case \
 --data_dir $GLUE_DIR/$TASK_NAME \
 --max_seq_length 128 \
 --per_gpu_eval_batch_size=8 \
 --per_gpu_train_batch_size=8 \
 --learning_rate 2e-5 \
 --num_train_epochs 3.0 \
 --output_dir /tmp/$TASK_NAME/

在命令行运行时,可以选择特定的模型和相关的训练参数。

使用 SQuAD 数据集微调模型

另外,你还可以试试用 run_squad.py 文件在 SQuAD 数据集上进行微调。代码如下:

python -m torch.distributed.launch --nproc_per_node=8 ./examples/run_squad.py \
 --model_type bert \
 --model_name_or_path bert-large-uncased-whole-word-masking \
 --do_train \
 --do_eval \
 --do_lower_case \
 --train_file $SQUAD_DIR/train-v1.1.json \
 --predict_file $SQUAD_DIR/dev-v1.1.json \
 --learning_rate 3e-5 \
 --num_train_epochs 2 \
 --max_seq_length 384 \
 --doc_stride 128 \
 --output_dir ../models/wwm_uncased_finetuned_squad/ \
 --per_gpu_eval_batch_size=3 \
 --per_gpu_train_batch_size=3 \

这一代码可微调 BERT 全词 Mask 模型,在 8 个 V100GPU 上微调,使模型的 F1 分数在 SQuAD 数据集上超过 93。

用模型进行文本生成

还可以使用 run_generation.py 让预训练语言模型进行文本生成,代码如下:

python ./examples/run_generation.py \
 --model_type=gpt2 \
 --length=20 \
 --model_name_or_path=gpt2 \

安装方法

如此方便的工具怎样安装呢?用户只要保证环境在 Python3.5 以上,PyTorch 版本在 1.0.0 以上或 TensorFlow 版本为 2.0.0-rc1。

然后使用 pip 安装即可。

pip install transformers

移动端部署很快就到

HuggingFace 在 GitHub 上表示,他们有意将这些模型放到移动设备上,并提供了一个 repo 的代码,将 GPT-2 模型转换为 CoreML 模型放在移动端。

未来,他们会进一步推进开发工作,用户可以无缝地将大模型转换成 CoreML 模型,无需使用额外的程序脚本。

repo 地址:https://github.com/huggingface/swift-coreml-transformers

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号【程序员黄小斜】

搭建自己的技术博客系列(一)使用 hexo 搭建一个精美的静态博客

https://github.com/ppoffice/hexo-theme-icarus

4400
来自专栏微信公众号【程序员黄小斜】

搭建自己的技术博客系列(三)让你的博客拥有评论功能!

本来hexo博客用的是gitment,我也非常喜欢,看着逼格就超高呀。无奈我用着bug略多,而且毕竟有github账户的小伙伴似乎并不多。于是我就忍痛准备换评论...

5500
来自专栏Paper阅读

CVPR2019 论文:NAS-FPN: 基于神经架构搜索的FPN

为了寻找到更优的FPN,论文中提出了利用神经架构搜索(NAS),NAS在给定的搜索空间中选择最佳的模型结构训练控制器。这个过程使用的了强化学习技术,控制器用子模...

34320
来自专栏CWIKIUS

Git 如何针对项目修改本地提交提交人的信息

如果你不是使用 TortoiseGit,你可以在你项目 Check out 的目录中,打开文件:

12120
来自专栏小蔚记录

git --- ! [rejected] master -> master (non-fast-forward)

3.出现错误的主要原因是github中的README.md文件不在本地代码目录中

16720
来自专栏微信公众号【程序员黄小斜】

搭建自己的技术博客系列(二)把 Hexo 博客部署到 GitHub 上

git config --global user.email "youremail"

3200
来自专栏机器学习理论与数据竞赛实战

2018 CCF《套餐个性化匹配模型》(亚军)分享

PandasCute/2018-CCF-BDCI-China-Unicom-Research-Institute-top2​github.com

11710
来自专栏微信公众号【程序员黄小斜】

搭建自己的技术博客系列(六)酷炫主题icarus常用配置整合版,快速搞定博客首页

这里首先要知道在 Hexo 中有两份主要的配置文件,其名称都是 _config.yml,它们均是用于站点配置使用的。其中,一份位于站点根目录下(比如我的:D:\...

10400
来自专栏Jerry的SAP技术分享

error handling in Nodejs

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

6720
来自专栏CODING DevOps

使用 CODING Pages 快速搭建 HTML 小游戏

不少小伙伴希望不买服务器也能上线自己的个人项目,比如搭建一个属于自己的博客站点或者小游戏等。目前相对比较简便的且不花自己一分钱的方法就是 Pages 服务。

11820

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励