SetFitとは?少量の文章ラベルから学び、プロンプトなしで分類する技術

SetFitは、ラベル付き文章をペアにして文埋め込みを調整し、軽量な分類器を学習する技術です。2段階の学習、少数例での評価結果、日本語の実験から、問い合わせ分類やAI処理の振り分けへの応用と限界を解説します。

参考文献

Efficient Few-Shot Learning Without Prompts

Lewis Tunstall, Nils Reimers, Unso Eun Seo Jo, Luke Bates, Daniel Korat, Moshe Wasserblat, Oren Pereg

論文を見る

今回の論文

今回取り上げるのは、Lewis Tunstall、Nils Reimers、Unso Eun Seo Jo、Luke Bates、Daniel Korat、Moshe Wasserblat、Oren Peregによる「Efficient Few-Shot Learning Without Prompts」です。2022年9月22日にarXivで公開された、自然言語処理・少数例学習・文章分類の論文です。公開元はarXivで、論文の書誌情報と原論文の全文を参照できます。

選んだ理由は、少量の業務データから分類機能を作る方法を、巨大な生成モデルに頼らず考えられるためです。「文章ごとのラベル」を「文章同士の関係」へ変換して学ぶ工夫は、問い合わせの振り分けや社内ツールにも応用しやすい発想です。この記事では2022年の原論文におけるSetFitを扱います。

どんな技術か

SetFitは、少数のラベル付き文章から文章分類モデルを作る学習手法です。名前はSentence Transformer Fine-tuningに由来します。

例えば「請求」「ログイン」「解約」の問い合わせを分類したいとします。通常は、それぞれの文章を正しいカテゴリへ予測するように直接学習します。SetFitでは先に、同じカテゴリの文章同士を近づけ、異なるカテゴリの文章同士を区別できるように、文章をベクトルへ変換するモデルを調整します。そのベクトルを使い、別の分類器を学習します。

この例は仕組みを説明するためのもので、論文がこの問い合わせ業務を評価したわけではありません。ポイントは、少ない文章でも組み合わせによって複数のペアを作り、分類に役立つ表現を学ばせることです。推論時は「文章をベクトル化して分類する」という処理で済み、分類の指示文やラベルを出力するためのプロンプトは必要ありません。原論文の第3節

課題

新しい製品や業務の文章分類では、最初から大量の正解ラベルを用意できないことがあります。カテゴリごとに数件しかなければ、モデルはたまたま含まれた単語や表現に引っ張られ、別の言い方をされたときに誤分類しやすくなります。

論文が比較する少数例学習の手法には、入力を穴埋め問題へ変換したり、生成モデルへ分類を指示したりするものがあります。こうした方法では、テンプレートの表現やカテゴリと出力語の対応付けが性能に影響します。大きなモデルで高い性能を得ても、学習や配備の負担が導入を難しくする場合があります。

一方、汎用の文埋め込みに分類器を付けるだけでは、業務上の区別が十分に表現されるとは限りません。「解約方法」と「解約手数料」は意味的に近くても、振り分け先を分けたい場合があります。SetFitは、事前学習済みの文埋め込みを、手元のカテゴリの境界に合わせて調整することを狙います。

この問題は、大量の問い合わせを既知の部署へ送る、レビューを決まった観点で集計する、AI処理の経路を選ぶといった場面で現れます。回答文の生成が不要な処理なら、分類専用モデルを作ることにも実用的な意味があります。

用語解説

少数例学習(few-shot learning)
少ない正解例からタスクを学ぶ設定です。SetFitの主な実験では各クラス8件や64件を使ってモデルを更新します。例をプロンプトに並べるだけの学習とは異なります。
Sentence Transformer
文章を意味の比較に使える固定長ベクトルへ変換するモデルです。SetFitはすでに文章間の関係を学んだモデルから始め、それを手元の分類ラベルに適応させます。
対照的なペア学習
2つの文章について、近づけたい組と区別したい組を与える学習です。SetFitではクラスの一致を基準にペアを作り、コサイン類似度を正例は1、負例は0という目標に合わせます。
Siamese構造
2つの入力を、重みを共有する同じモデルで処理する構造です。SetFitでは文章ペアの両側を同じSentence Transformerでベクトル化し、共通の空間で比較します。
分類ヘッド
文ベクトルからカテゴリを予測する後段のモデルです。原論文ではロジスティック回帰を使い、文埋め込みの調整後に元の文章とラベルで学習します。

技術の仕組み

文章ラベルを、同じクラスかどうかのペアへ変換する

まず、各クラスに少数の文章を用意します。同じクラスから2つの文章を選べば正例ペア、異なるクラスから選べば負例ペアになります。ここでの正例は「同じ文章」や「完全な言い換え」である必要はありません。同じ分類先に属することが基準です。

原論文では各クラスについて正例をR組、負例をR組ランダムに作り、クラス数をCとすると合計2RC組のペアを学習に使います。基本設定はR=20です。3クラスなら120組になります。

元の文章がK件あると、異なる文章の組み合わせは最大K(K−1)/2組です。ただし、これは新しい独立した文章が増えるという意味ではありません。少数の文章から関係の学習信号を取り出しているのであり、ペアを大量に作っても元データにない表現や知識は補えません。また、原論文の方式は全組み合わせを必ず使うものでもありません。ペア生成の定義

ペアの関係に合わせて文埋め込みを調整する

ペアの文章を同じSentence Transformerで処理し、2本のベクトルのコサイン類似度を計算します。コサイン類似度は、ベクトルの向きがどの程度そろっているかを表す値です。

学習では、類似度とペアの目標値との差を小さくします。概念的には次のように表せます。

損失 = (cos(ST(文章A), ST(文章B)) − ペアの目標値)²

同じクラスなら目標値は1、別クラスなら0です。負例を必ず逆方向の−1へ押しやるわけではありません。文章を変えるのではなく、Sentence Transformerの重みを更新し、分類に役立つ近さを学びます。

文ベクトルをペアで整える背景は、SimCSEの文埋め込み学習でも詳しく説明しています。ただし、教師なしSimCSEが同じ文のドロップアウトの違いを使うのに対し、SetFitは手元の分類ラベルからペアの目標を作る点が異なります。

元の文章でロジスティック回帰を学習する

第2段階では、調整したSentence Transformerで元のラベル付き文章をベクトル化します。そのベクトルと元のクラスラベルを使ってロジスティック回帰を学習します。この段階の学習例数は元の文章数であり、第1段階で作ったペア数ではありません。

第1段階は「分類しやすい表現を作る」、第2段階は「その表現からクラスを決める」という役割分担です。原論文の標準方式では、両方を同時に端から端まで学習するのではなく、この順序で処理します。

推論時の流れは、入力文章 → 調整済みSentence Transformer → 文ベクトル → 分類ヘッド → クラスです。比較する相手の文章やペア生成は推論時には不要です。分類名を自然言語として生成する必要もありません。分類ヘッドと推論の説明

実験と結果

各クラス8件で、どこまで分類できるか

中心的な英語実験では、1.1億パラメータのMPNetを使ったSetFitを評価しています。感情分類のSST-5・Customer Reviews・Emotion、反実仮想文検出のAmazon Counterfactual、迷惑メール分類のEnron Spam、ニュース分類のAG Newsという6データセットです。

各クラス8件と64件の学習例を用意し、10通りのランダムな学習データ分割で平均と標準偏差を測っています。SetFitの埋め込み学習は、コサイン類似度損失、学習率0.001、バッチサイズ16、最大256トークン、1エポックという設定です。

手法各クラス8件の平均スコア各クラス64件の平均スコア
通常のRoBERTa-large調整43.0 ± 5.269.7 ± 7.8
Perfect48.7 ± 6.072.7 ± 1.9
Adapet58.3 ± 3.673.8 ± 2.2
T-Few 3B63.4 ± 1.970.3 ± 1.5
SetFit MPNet62.3 ± 4.975.3 ± 1.3

この平均はAG Newsを除いた5データセットです。T-Fewの事前学習にAG Newsが含まれるため、比較から外しています。また、Amazon Counterfactualはクラス不均衡を考慮するMCC、それ以外は正解率を使うため、平均スコアを単一タスクの正解率と読むことはできません。原論文の表2と付録表6

各クラス8件では、SetFitは通常の調整より平均19.3ポイント高く、30億パラメータのT-Fewに近いスコアです。ただし全タスクで優位ではありません。例えばSST-5ではSetFitが43.6、T-Fewが55.0でした。ラベルが少なくても有効な方式ですが、細かな感情の段階まで常にうまく分けられるわけではありません。

日本語を含む多言語でも評価している

多言語実験では、英語・日本語・ドイツ語・フランス語・スペイン語・中国語のAmazonレビューを1〜5の星評価へ分類します。多言語Sentence Transformerを使い、各言語で学ぶ設定、英語だけで学ぶ設定、全言語で学ぶ設定を比較しています。

各クラス8件を日本語で学ぶ設定では、日本語のMAE×100は、通常の調整120.5に対してSetFitが95.5でした。MAEは予測と正解の星数のずれで、小さいほど良い指標です。英語だけで学んで日本語を評価したSetFitも93.2でした。一方、20,000件で通常の調整を行う日本語の設定は46.8です。原論文の表4

つまり日本語での少数例学習にも実験上の根拠がありますが、大量のラベルを使った学習と同等という結果ではありません。レビューの評価が、専門用語の多い社内問い合わせや複雑な条件判定へそのまま移るとも限りません。

小型モデルの利点を、計算量と実時間に分けて見る

原論文の表5では、MPNet版SetFitの推論・学習の推定FLOPsはT-Few 3Bに対して約19分の1です。これはモデル規模、入力長、固定した学習ステップ数などを用いた概算で、どのサーバーでも19倍速いことを保証する値ではありません。

実時間の例として、各クラス8件の実験でSetFitの学習は16 GB GPUの環境で約30秒、T-Few 3Bは別の大型GPU環境で約700秒と報告されています。機材も条件も異なるため、同一GPUでの厳密な速度比較とは分けて読む必要があります。原論文の第7.2節

何に使える?

以下はSetFitの構造から考えられる応用です。原論文がこれらの業務システムで効果を直接検証したものではありません。

問い合わせの部署・カテゴリ振り分け

「支払い」「アカウント」「製品不具合」など、分類先が決まっている問い合わせを扱えます。少数の代表例から文章間の関係を学べるため、新しいカテゴリを試す段階の候補になります。

ただし「支払いもログインもできない」のような複数の意図を持つ入力には注意が必要です。原論文の標準方式は単一クラス分類なので、最初は担当者への候補提示として使い、曖昧な入力の処理を別途設計するとよいでしょう。

RAGやエージェントの処理経路を選ぶ

質問を「FAQ検索」「文書検索」「担当者確認」などへ振り分ける前段モデルにも使えそうです。毎回生成モデルで経路名を出す処理を、学習済みの分類へ置き換える設計が考えられます。

経路選択がなぜ有効かは、質問の複雑さに応じて検索戦略を変えるAdaptive-RAGが具体的な判断材料になります。ただしAdaptive-RAGの分類器をSetFitへ置き換えた効果は、この論文では検証していません。ラベルは、実際に各経路で処理した結果に基づいて整える必要があります。

レビューや社内文章の定型集計

レビューを「操作性」「価格」「安定性」などの業務上の観点へ分ける用途も考えられます。文章の生成を必要とせず、同じカテゴリへ繰り返し分類する処理なら、文埋め込みと分類ヘッドという構成を活かせます。

カテゴリ別集計をする場合も、文章に複数の論点が混ざっていないかを確認する必要があります。分類単位を文や短い段落へ調整する方法は実務上の案ですが、その分割による情報損失も評価してください。

開発や事業へのヒント

まず「埋め込みを調整する価値」を比較する

小規模なプロダクトでは、最初から生成モデルの大規模な追加学習を目指す必要はありません。同じラベル付きデータで、未調整の文埋め込みにロジスティック回帰を付ける方法と、SetFitの2段階学習を比較すると、表現の調整がどれだけ効くかを確認できます。

評価用の文章はペア作成より前に分けてください。同じ文章が学習ペアと評価に混ざると、未知の文章を分類する能力を過大評価します。少数例では選んだ文章に結果が左右されるため、複数の分割で測ることにも意味があります。

注釈の量より、カテゴリの境界を整える

SetFitでは1つの誤ラベルが複数の誤ったペアへ波及します。似た文章を別カテゴリへ付けたり、意味の異なる文章を無理に同じカテゴリへまとめたりすると、埋め込みの調整方向まで乱れます。

業務で使うなら、各カテゴリの定義、境界にある例、対象外の例を先に整理するとよいでしょう。少量のデータを使える技術ほど、ラベルの一貫性と表現の多様性が重要になります。

分類結果を、そのまま業務判断にしない

ロジスティック回帰はクラスの確率を出せますが、その値が業務上の正しさを保証するわけではありません。既知のどのカテゴリにも属さない文章でも、通常は何らかのクラスを選びます。

実務上の設計案として、評価データで確率の信頼性を確認し、低信頼の入力は人手や生成モデルへ回す経路を作れます。評価には全体の正解率だけでなく、カテゴリ別の適合率・再現率、誤った振り分けによる影響、処理時間も含めると、導入判断につながります。

限界

SetFitは少量データから学べますが、事前学習済みSentence Transformerが持つ言語や領域の能力に依存します。日本語の実験はありますが、略語、コード、長い契約文書などを同じ精度で扱えるとは言えません。原論文の中心的な学習設定は最大256トークンなので、長文を切り詰めれば分類に必要な部分を失う可能性があります。

計算面では、埋め込みモデルの重みを更新する学習が必要です。SetFitはLoRAのように少数の追加パラメータだけを更新する手法ではありません。ペア数やクラス数を増やすと学習量も増えます。推論もロジスティック回帰だけでなく、毎回の文章エンコードを含むため、CPUでの遅延や同時処理能力は実測が必要です。

データ面では、同じクラスの文章を近づけることが常に適切とは限りません。広いカテゴリの中に複数の異なる意味がある場合、まとめすぎる学習になります。また、各クラスの学習例を同数にする実験と、実運用の偏った出現頻度は違います。運用に近い評価集合で確かめる必要があります。

再現性にも制約があります。原論文のT-Few比較は主に3B版で、11B版を同じ中心実験で動かした結果ではありません。SST-5の入力はT-Fewの事前学習にも登場しています。比較モデルの事前学習、入力テンプレート、選んだラベル付き例が異なることを踏まえる必要があります。比較条件と表2の注記

著者の公式実装は公開されていますが、原論文のロジスティック回帰を使う方式と、後続の実装上の選択肢を同一視しないことが大切です。導入時にはライブラリの版、埋め込みモデル、ペア生成、分類ヘッド、学習設定を記録してください。

よくある質問

Q. 各クラス8件あれば十分でしょうか?

A. 原論文では8件で有効な結果が出ていますが、必要数を保証する値ではありません。8件が典型的な言い換えや境界例を含むかで結果が変わります。独立した評価データを用意し、クラス別の誤りを見て追加する例を決めてください。

Q. プロンプトを使わないなら、ラベルも不要ですか?

A. ラベルは必要です。同じクラスかどうかからペアを作り、その後に元のクラスラベルで分類器を学習します。不要なのは、入力を穴埋め文へ変換するテンプレートや、カテゴリを生成語へ対応付ける設定です。

Q. 日本語の問い合わせ分類にも使えますか?

A. 多言語Sentence Transformerを使った日本語レビューの実験はあります。ただし問い合わせ分類は別のタスクです。日本語と業務用語を扱えるモデルを選び、代表例と紛らわしい例で、未調整モデルとの比較を行う必要があります。

Q. ペアを増やすほど新しい学習データが増えますか?

A. 独立した文章が増えるわけではありません。同じ文章の組み合わせから関係を学ぶため、元のラベルが誤っていれば誤った学習信号も増えます。組み合わせ数だけでなく、元の例の品質と多様性を優先してください。

Q. SetFitを入れるとRAGの回答も良くなりますか?

A. SetFit自体は文章分類の技術です。検索先や処理経路を正しく選べれば間接的な改善は考えられますが、検索・回答品質を直接保証しません。経路分類の精度と、分類後の回答品質・処理時間を分けて測ってください。

今日の学び

この論文は、ラベル付き文章が少ない状況で、分類精度と学習・配備の負担を両立する課題を扱いました。クラスラベルから文章ペアを作って文埋め込みを調整し、その後にロジスティック回帰を学ぶ2段階の方式で解こうとしています。

得られるヒントは、少ないラベルでも「例同士の関係」に変えると別の学習信号を取り出せることです。分類先が決まった業務なら、生成モデルへ毎回判断を依頼する以外に、小さな専用モデルを育てる選択肢があります。