June 5, 2020

Transformers library 的终极API: pipeline

Transformers library 的终极API: pipeline

pipeline 特别适合作为实例来展示 nlp 究竟可以做什么

Transformers 简介

  • 大名鼎鼎的 Hugging Face 出品的 Transformers 相信不需要再多介绍,从最初的一个 Pytorch 版的 BERT 实现发展到现在几乎覆盖 NLP 领域方方面面的民主社区,这个笑脸值得关注。                      

Transformers 的 pipeline

  • 所谓的 pipeline 是指可以用来处理一个特定任务的类,是指针对现有的经典实验场景做好的代码,实际用到的时候只要指定参数,稍微调整下就可以直接上手用。
  • Transformers 里面把一下场景做成了 pipeline:
  1. 句子情感分析
  2. QA 场景,阅读理解,给定一个段落 P 和问题 Q,找到 P 中包含的答案 A 所在的位置(span)
  3. MLM 任务,填空题,BERT 中的第一个任务,预测给定文本中缺少的单词
  4. NER 任务,命名实体识别,针对输入的句子抽取包括人名、地名、组织名、日期时间、专有名词等,根据业务需要也可以识别出来比如产品名称、价格等实体。

在 Colab 中做实验

因为 Colab 已经默认配置好了 Tensorflow2 和 Pytorch1.5 所以只需要安装 transformers 就好: pip install transformers

  • 情感分析
from transformers import pipeline
sentimentAnalysis = pipeline("sentiment-analysis")
sentimentAnalysis("This product is ideal for people like me whose ears are very sensitive.")
  • 问答,  transformers 会通过 AutoModelForQuestionAnswering 调用一个事先基于 squad database finetune 好的模型
qa= pipeline("question-answering")
question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
ans = qa(
    {'question':question,
     'context': text}
)
print(ans)
  • MLM
import json

nlp = pipeline("fill-mask")
o = nlp(f"HuggingFace is creating a {nlp.tokenizer.mask_token} that the community uses to solve NLP tasks.")

print(json.dumps(o, indent=2))

可以看到,mlm 任务是 bert 系列模型的看家本领,相信如果换成 Roberta 的话效果会更好。

  • NER 任务
关注人物、地点和组织名称的 sequence labeling 任务
namedEntityRecognition = pipeline("ner")
sentence = 'Larry Page is an owner and co-founder of Google.'
o = namedEntityRecognition(sentence)
print(json.dumps(o, indent=2))
  • 除了上面提到的这四个 pipeline,当前的版本(2020-0605)还增加了 text-generation、summarization、translation_xx_to_yy(从xx翻译到yy) 三个新的 pipeline,为了实现不同的功能,transformers pipeline 内部调用了不同的模型分别在不同任务的 dataset 上进行了 fine-tune,可以把这几个任务视为入门的几个实例先跑起来找找感觉,然后再一步步深入,看下是如何微调的模型,Bert/Transformer 结构是怎么回事,以及 Pytorch 是如何实现这些神经网络的等等。