SetFitABSA SetFitを使用したFew-Shotアスペクトベースの感情分析
『Few-Shotアスペクトベースの感情分析にSetFitABSA SetFitを使用』
SetFitABSAは、テキスト内の特定の側面に対する感情を検出する効率的な技術です。
Aspect-Based Sentiment Analysis (ABSA)は、テキスト内の特定の側面に対する感情を検出するタスクです。例えば、「この電話は画面が素晴らしいですが、バッテリーは小さすぎます」という文では、側面の用語は「画面」と「バッテリー」であり、それぞれに対する感情極性はPositiveとNegativeです。
ABSAは、さまざまなドメインの製品やサービスの顧客フィードバックを分析して貴重な情報を抽出するために、組織によって広く使用されています。しかし、ABSAのためのラベル付けトレーニングデータは、トレーニングサンプル内で側面を手動で細かく識別する必要があるため、手間のかかる作業です。
- 「AV 2.0、自動運転車における次のビッグウェイブ」
- ChatGPTの初めての記念日:AIインタラクションの未来を変える
- 「あなたは専門家です」というAIのプロンプトはあなたが思っているほど魔法のようなものではありません
Intel LabsとHugging Faceは、ドメイン固有のABSAモデルのfew-shotトレーニングのためのフレームワークであるSetFitABSAを紹介しています。SetFitABSAは、few-shotシナリオでLlama2やT5などの生成モデルに比べて競争力があり、さらに優れた性能を発揮します。
LLMベースの手法と比較して、SetFitABSAには次の2つのユニークな利点があります:
🗣 プロンプトが不要です: LLMを使ったfew-shot in-context学習では、結果がもろくなり、表現に敏感になり、ユーザーの専門知識に依存する手作りのプロンプトが必要です。SetFitABSAは、ラベル付けされた少数のテキスト例から直接豊かな埋め込みを生成することで、プロンプトを完全に不要とします。
🏎 高速トレーニング: SetFitABSAは、わずかなラベル付きトレーニングサンプルのみを必要とします。さらに、専門のタグ付けツールを必要としないシンプルなトレーニングデータ形式を使用します。これにより、データのラベリングプロセスが迅速かつ容易になります。
このブログ記事では、SetFitABSAの動作方法と、SetFitライブラリを使用して独自のモデルをトレーニングする方法を説明します。では、さっそく見ていきましょう!
どのように機能しますか?
SetFitABSAの3つのステージからなるトレーニングプロセス
SetFitABSAは3つのステップで構成されています。第1ステップでは、テキストから側面候補を抽出し、第2ステップでは、側面候補を側面または非側面として分類し、最終ステップでは抽出された各側面に感情極性を関連付けます。第2ステップと第3ステップはSetFitモデルに基づいています。
トレーニング
1. 側面候補の抽出
本研究では、製品やサービスの特徴である側面は、通常名詞または名詞の組み合わせ(連続する名詞の文字列)であると想定しています。我々はspaCyを使用して、(few-shot)トレーニングセットの文章から名詞/名詞の組み合わせをトークン化し抽出します。抽出した名詞/名詞の組み合わせがすべて側面ではないため、これらを側面候補と呼びます。
2. 側面/非側面の分類
側面候補が得られたので、側面か非側面かを区別できるモデルをトレーニングする必要があります。そのためには、側面/非側面のラベルを持つトレーニングサンプルが必要です。これは、トレーニングセット内の側面を真の側面とみなし、それ以外の重なり合わない候補側面を非側面とみなしてFalse
とラベル付けすることで行われます:
- トレーニング文: “ウェイターはフレンドリーではありませんが、クリームパスタは最高です。”
- トークン化: [ウェイター, は, フレンドリー, で, は, ない, が, クリーム, パスタ, は, 最高, です, 。]
- 抽出された側面候補: [ウェイター, は, フレンドリー, で, は, ない, が, クリーム, パスタ, は, 最高, です, 。]
- トレーニングセットからのゴールドラベル、BIO形式での表現: [B-ASP, O, O, O, O, O, O, B-ASP, I-ASP, O, O, O, O, O]
- 生成された側面/非側面のラベル: [ウェイター, は, フレンドリー, で, は, ない, が, クリーム, パスタ, は, 最高, です, 。]
全ての側面候補がラベル付けされた今、それを候補側面分類モデルのトレーニングにどのように利用するのでしょうか?言い換えれば、文の分類フレームワークであるSetFitを用いて、個々のトークンを分類する方法はどうなのでしょうか?それでは、以下のテンプレートを使用して、各側面候補と訓練文全体を連結させることで、トレーニングインスタンスを生成します:
aspect_candidate:training_sentence
上記の例にこのテンプレートを適用すると、3つのトレーニングインスタンスが生成されます。2つは側面トレーニングインスタンスを表す「True」のラベルであり、もう1つは非側面トレーニングインスタンスを表す「False」のラベルです:
トレーニングインスタンスを生成した後、我々はSetFitの力を利用して、入力テキストレビューから側面を抽出するための少数ショットドメイン特異的な二値分類器をトレーニングする準備が整います。これが私たちの最初の微調整済みSetFitモデルとなります。
3. 感情の極性分類
テキストから側面を抽出した後、各側面に対して感情の極性(例:ポジティブ、ネガティブ、中立)を関連付ける必要があります。このため、2番目のSetFitモデルを使用し、以下の例に示すように側面抽出モデルと同様の方法でトレーニングします:
- 訓練文: “Waiters aren’t friendly but the cream pasta is out of this world.”
- トークン化された文: [Waiters, are, n’t, friendly, but, the, cream, pasta, is, out, of, this, world, .]
- 訓練セットからの正解ラベル: [NEG, O, O, O, O, O, POS, POS, O, O, O, O, O, .]
側面抽出モデルとは異なり、この訓練セットには非側面は含まれていません。なぜなら、目標は本当の側面に対する感情極性を分類することだからです。
推論の実行
推論時には、テスト文はspaCyの側面候補抽出フェーズを通過し、テンプレートaspect_candidate:test_sentence
を使用してテストインスタンスが生成されます。次に、側面/非側面分類器によって非側面がフィルタリングされます。最後に、抽出された側面は感情極性分類器に送られ、各側面ごとに感情極性が予測されます。
実際には、このモデルは通常のテキストを入力として受け取り、側面とその感情を出力することを意味します:
モデルの入力:
"their dinner specials are fantastic."
モデルの出力:
[{'span': 'dinner specials', 'polarity': 'positive'}]
ベンチマーク
SetFitABSAは、最近のAWS AI LabsおよびSalesforce AI Researchによる最先端のT5とGPT2のpromptを使用した作業との比較実験を行いました。より完全な結果を得るために、Llama-2-chatモデルのin-context learningを使用したモデルとも比較しています。我々は、Semantic Evaluation Challenge 2014 (SemEval14)の人気のあるLaptop14およびRestaurant14 ABSA データセットを使用しました。SetFitABSAは、側面語句抽出(SB1)の中間タスクおよび詳細な側面抽出と感情極性予測(SB1+SB2)のABSA全体のタスクで評価されました。
モデルサイズの比較
SB1タスクでは、SetFitABSAは110Mパラメータであり、SB2では110Mパラメータです。また、SB1+SB2 SetFitABSAは220Mパラメータから構成されています。
パフォーマンスの比較
トレーニングインスタンスの数が少ない場合、SetFitABSAの利点が明確に見られます。SetFitABSAはT5よりも2倍小さく、GPT2-mediumよりも3倍小さいにも関わらず、パフォーマンスは同等またはそれ以上です。また、Llama 2と比較しても、Llama 2の方が64倍大きいにも関わらず、パフォーマンスは同等かそれ以上です。
SetFitABSA vs GPT2
SetFitABSA vs T5
公平な比較のために、SetFitABSAをさまざまなベースライン(GPT2、T5など)が使用したデータセット分割と比較しました。
SetFitABSA vs Llama2
Llama2のインコンテキストトレーニングサンプルの数を増やしても、パフォーマンスの向上は見られませんでした。この現象は以前ChatGPTでも示されており、さらなる調査が必要だと考えています。こちらをご覧ください
独自のモデルのトレーニング
SetFitABSAはSetFitフレームワークの一部です。ABSAモデルをトレーニングするには、absa
オプションを有効にしてsetfit
をインストールします:
python -m pip install -U "setfit[absa]"
加えて、en_core_web_lg
spaCyモデルをインストールする必要があります:
python -m spacy download en_core_web_lg
次に、トレーニングセットを準備します。トレーニングセットの形式は、text
、span
、label
、ordinal
の列を持つDataset
です:
- text:アスペクトを含む完全な文章またはテキスト。
- span:完全な文章からのアスペクト。複数の単語で構成される場合もあります。例:「食べ物」。
- label:アスペクトスパンに対応する(極性)ラベル。例:「ポジティブ」。収集したトレーニングデータのタグ付け時にラベル名を任意に選ぶことができます。
- ordinal:テキスト内でアスペクトスパンが複数回出現する場合、この番号はそれらの出現のインデックスを表します。通常は0であり、各アスペクトは入力テキストに一度しか表示されません。
例えば、トレーニングテキスト「素晴らしい食べ物のあるレストランで、最悪のサービスを目にした」には2つのアスペクトが含まれているため、トレーニングセットテーブルに2行追加します:
トレーニングデータセットの準備ができたら、ABSAトレーナーを作成してトレーニングを実行できます。SetFitモデルはトレーニングがかなり効率的ですが、SetFitABSAは2つのモデルを連続してトレーニングするため、トレーニング時間を短縮するためにGPUを使用することをおすすめします。例えば、以下のトレーニングスクリプトは、無料のGoogle Colab T4 GPUを使用して約10分で完全なSetFitABSAモデルをトレーニングします。
from datasets import load_datasetfrom setfit import AbsaTrainer, AbsaModel# 上記のようにトレーニングデータセットを作成します# 便宜上、準備済みのデータセットを使用しますtrain_dataset = load_dataset("tomaarsen/setfit-absa-semeval-restaurants", split="train[:128]")# ハブから選択した文ベクトルエンコーダを使用したモデルを作成しますmodel = AbsaModel.from_pretrained("sentence-transformers/paraphrase-mpnet-base-v2")# トレーナーを作成します:trainer = AbsaTrainer(model, train_dataset=train_dataset)# トレーニングを実行します:trainer.train()
以上です!ドメイン固有のABSAモデルをトレーニングしました。トレーニングしたモデルをディスクに保存またはHugging Face Hubにアップロードすることができます。ただし、モデルには2つのサブモデルが含まれているため、それぞれに固有のパスが与えられます:
model.save_pretrained( "models/setfit-absa-model-aspect", "models/setfit-absa-model-polarity")# またはmodel.push_to_hub( "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-aspect", "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-polarity")
今、トレーニングされたモデルを推論に使用できます。まず、モデルを読み込むことから始めます:
from setfit import AbsaModelmodel = AbsaModel.from_pretrained( "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-aspect", "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-polarity")
次に、推論を実行するために予測APIを使用します。入力はテキストレビューを表す文字列のリストです:
preds = model.predict([ "Best pizza outside of Italy and really tasty.", "The food variations are great and the prices are absolutely fair.", "Unfortunately, you have to expect some waiting time and get a note with a waiting number if it should be very full."])print(preds)# [# [{'span': 'pizza', 'polarity': 'positive'}],# [{'span': 'food variations', 'polarity': 'positive'}, {'span': 'prices', 'polarity': 'positive'}],# [{'span': 'waiting time', 'polarity': 'neutral'}, {'span': 'waiting number', 'polarity': 'neutral'}]# ]
トレーニングオプション、モデルの保存と読み込み、推論の詳細については、SetFitのドキュメントを参照してください。
参考文献
- Maria Pontiki、Dimitris Galanis、John Pavlopoulos、Harris Papageorgiou、Ion Androutsopoulos、Suresh Manandhar。2014. SemEval-2014タスク4:アスペクトベースの感情分析。プロシーディング第8回国際ワークショップセマンティック評価(SemEval 2014)ページ27-35。
- Siddharth Varia、Shuai Wang、Kishaloy Halder、Robert Vacareanu、Miguel Ballesteros、Yassine Benajiba、Neha Anna John、Rishita Anubhai、Smaranda Muresan、Dan Roth、2023 “Instruction Tuning for Few-Shot Aspect-Based Sentiment Analysis”. https://arxiv.org/abs/2210.06629
- Ehsan Hosseini-Asl、Wenhao Liu、Caiming Xiong、2022. “A Generative Language Model for Few-shot Aspect-Based Sentiment Analysis”. https://arxiv.org/abs/2204.05356
- Lewis Tunstall、Nils Reimers、Unso Eun Seo Jo、Luke Bates、Daniel Korat、Moshe Wasserblat、Oren Pereg、2022. “Efficient Few-Shot Learning Without Prompts”. https://arxiv.org/abs/2209.11055
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles