1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BANDAI NAMCOさんの感情分析用アダプターを使ってみた

Last updated at Posted at 2021-11-04

感情分析用アダプターとは?

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ではないので一ヶ月のリクエスト上限みたいなのがない

デメリット

  • ポジネガの二値分類なので、感情を伴わない文が入力された場合上手く対応できない。(大体ポジティブになる)

まとめ

感情分析のとっかかりとして、試してみるのはアリだと思いました。ただ、感情がのっていない文がポジティブ扱いになってしまうというデメリットがかなり大きいです。特定のユーザーのツイートに対してポジネガの割合を出す、みたいなタスクを行うとポジティブの割合がかなり大きくなってしまうので...
この感情分析アダプターは映画のレビューをもとに学習されているようですが、このような場合には必ず文に感情がのっていると仮定できるため、うまい具合に使えるかもしれませんね。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?