pipeline 特別適合作為例項來展示 nlp 究竟可以做什麼

TRANSFORMERS 簡介

大名鼎鼎的 Hugging Face 出品的 Transformers 相信不需要再多介紹,從最初的一個 Pytorch 版的 BERT 實現發展到現在幾乎覆蓋 NLP 領域方方面面的民主社群,這個笑臉值得關注。

像呼叫 API 一樣使用 Transformers 庫做 NLP 任務

TRANSFORMERS 的 PIPELINE

所謂的 pipeline 是指可以用來處理一個特定任務的類,是指標對現有的經典實驗場景做好的程式碼,實際用到的時候只要指定引數,稍微調整下就可以直接上手用。

Transformers 裡面把一下場景做成了 pipeline:

句子情感分析

QA 場景,閱讀理解,給定一個段落 P 和問題 Q,找到 P 中包含的答案 A 所在的位置(span)

MLM 任務,填空題,BERT 中的第一個任務,預測給定文字中缺少的單詞

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。”)

像呼叫 API 一樣使用 Transformers 庫做 NLP 任務

問答, 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)

像呼叫 API 一樣使用 Transformers 庫做 NLP 任務

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))

像呼叫 API 一樣使用 Transformers 庫做 NLP 任務

可以看到,mlm 任務是 bert 系列模型的看家本領,相信如果換成 Roberta 的話效果會更好。

NER 任務

像呼叫 API 一樣使用 Transformers 庫做 NLP 任務

namedEntityRecognition

=

pipeline

“ner”

sentence

=

‘Larry Page is an owner and co-founder of Google。’

o

=

namedEntityRecognition

sentence

print

json

dumps

o

indent

=

2

))

像呼叫 API 一樣使用 Transformers 庫做 NLP 任務

除了上面提到的這四個 pipeline,當前的版本(2020-0605)還增加了 text-generation、summarization、translation_xx_to_yy(從xx翻譯到yy) 三個新的 pipeline,為了實現不同的功能,transformers pipeline 內部呼叫了不同的模型分別在不同任務的 dataset 上進行了 fine-tune,可以把這幾個任務視為入門的幾個例項先跑起來找找感覺,然後再一步步深入,看下是如何微調的模型,Bert/Transformer 結構是怎麼回事,以及 Pytorch 是如何實現這些神經網路的等等。