感情分析用アダプターとは?
BANDAI NAMCO研究所が作成した、BERTと組み合わせることによって感情分析ができるものです。
ここで行われる感情分析は、与えられた文がポジティブなのかネガティブなのかの二値分類となっています。
ダウンロードや詳細説明、Google Colabでのデモは以下のサイトに書かれています。
この記事ではローカル環境でこれを使った感情分析の方法を紹介します。
コードとしてはGitHubで紹介されている方法とほぼ同じなのですが、エラーが出てしまうことが考えられるのでその解決方法も含めて説明します。
実行環境
項目 | バージョン等 |
---|---|
OS | mac Mojave |
python | 3.8.2 |
pyenv | 1.2.26 |
transformers | 4.12.2 |
torch | 1.10.0 |
adapter-transformers | 2.2.0 |
実行コード
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification, AdapterType
#モデルのロード
def load_model():
adapter_path = "ADAPTER_PATH" # 事前学習済みのアダプターが保存されたディレクトリのパス
model = AutoModelForSequenceClassification.from_pretrained(
"cl-tohoku/bert-base-japanese-whole-word-masking")
tokenizer = AutoTokenizer.from_pretrained(
"cl-tohoku/bert-base-japanese-whole-word-masking")
model.load_adapter(adapter_path)
return model, tokenizer
#ロードされたモデルを使った感情分析
def predict(sentence, model, tokenizer):
token_ids = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(sentence))
input_tensor = torch.tensor([token_ids])
outputs = model(input_tensor, adapter_names=['sst-2'])
result = torch.argmax(outputs[0]).item()
return 'positive' if result == 1 else 'negative'
if __name__ == "__main__":
model, tokenizer = load_model()
print(predict("ちゃんと出力されてめっちゃ嬉しい!", model, tokenizer))
predict関数の第一引数に分析したい文字列を入れればOKです。
この場合、出力は、
positive
となります。
以下、多くの人が遭遇するだろうエラーを挙げます。
ImportError: cannot import name 'AdapterType' from 'transformers'
最初、私がこのコードを実行した時、このようなエラーが出ました。
実はこれ実行するためには、transformersだけでなくadapter-transformersというモジュールもインストールする必要があるんです。
pythonファイルではtransformersと同様に import transformers
で使えるので気づくのが遅れました...
下のコードをターミナルで実行すれば大丈夫です。
$ pip install adapter-transformers
その他エラー
ここで使っている、東北大が公開している日本語BERTに関連するエラーが発生する可能性があるので、そのエラーについても書いておきます。
fugashiのモジュールが存在しない
ModuleNotFoundError: No module named 'fugashi'
ipadicのモジュールが存在しない
ModuleNotFoundError: The ipadic dictionary is not installed. See https://github.com/polm/ipadic-py for installation.
これらについても、対応するモジュールをインストールするだけで大丈夫です。
$ pip install fugashi
$ pip install ipadic
使ってみた感想
メリット
- 学習の必要がないので手軽に感情分析を試すことができる
- APIではないので一ヶ月のリクエスト上限みたいなのがない
デメリット
- ポジネガの二値分類なので、感情を伴わない文が入力された場合上手く対応できない。(大体ポジティブになる)
まとめ
感情分析のとっかかりとして、試してみるのはアリだと思いました。ただ、感情がのっていない文がポジティブ扱いになってしまうというデメリットがかなり大きいです。特定のユーザーのツイートに対してポジネガの割合を出す、みたいなタスクを行うとポジティブの割合がかなり大きくなってしまうので...
この感情分析アダプターは映画のレビューをもとに学習されているようですが、このような場合には必ず文に感情がのっていると仮定できるため、うまい具合に使えるかもしれませんね。