概要
huggingface/transformersのpipelineクラスを用いて数行のコードで推論を行います。2つBERTベースのモデルを用いて推論を行う方法を紹介します。
#コード
pipelineクラスを用いることで、分類タスクやQAタスクなどを事前学習済みモデルとそのtokenizerを用いて簡単に推論することができるようになります。今回は文がポジティブかネガティブかを判別する文書分類タスクである感情分析を行います。
私の実行環境は、AWSが提供しているSageMakerのml.t2.medium
、カーネルはconda_python3
です。
requirements.txt
は以下の通りです。
tensorboard
transformers
mecab-python3
fugashi
ipadic
日本語(汎用)BERT
こちらは東北大学が公開しているBERTを用いて感情分析をするコードです。
他のpipelineのタスクも解くことができます。
from transformers import pipeline
from transformers import BertForSequenceClassification
from transformers.tokenization_bert_japanese import BertJapaneseTokenizer
model = BertForSequenceClassification.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')
tokenizer = BertJapaneseTokenizer.from_pretrained("cl-tohoku/bert-base-japanese-whole-word-masking")
nlp = pipeline('sentiment-analysis', model=model, tokenizer=tokenizer)
print(nlp("この商品を買ってよかったです"))
上記のモデルからLABEL_0
(ポジティブ)LABEL_1
(ネガティブ)のどちらかの値が出力されます。
上記の例の出力結果は、{'label': 'LABEL_0', 'score': 0.5814786553382874}
でした。
日本語の感情分析に特化したBERTベースモデル
huggingface/transformersには日本語の感情分析に特化したBERTベースモデルが提供されていました。huggingface/transformersではコントリビューターがモデルの提供を積極的に行っているみたいです。
from transformers import pipeline
nlp = pipeline("sentiment-analysis",model="daigo/bert-base-japanese-sentiment",tokenizer="daigo/bert-base-japanese-sentiment")
print(nlp("この商品を買ってよかったです"))
上記のモデルからポジティブ
またはネガティブ
のどちらかの値が出力されます。
例の出力結果は、{'label': 'ポジティブ', 'score': 0.9867748022079468}
でした。
まとめ
本投稿ではhuggingface/transformersで簡単に推論する方法を紹介しました!
2つ目の紹介したモデルのほうが、感情分析に特化されたモデルになっているため、精度が高いです。
今後も様々なモデルが簡単に使える様になると思います!