SetFit プロンプトなしで効率的なフューショット学習
SetFitは、プロンプトなしで効率的なフューショット学習を提供します
SetFitは、通常のファインチューニングよりもサンプル効率が高く、ノイズに強いです。
事前学習済みの言語モデルを用いたフューショット学習は、データサイエンティストの悪夢であるほとんどラベルのないデータを扱うための有望な解決策として浮上しています 😱。
Intel LabsとUKP Labとの共同研究を通じて、Hugging FaceはSetFitを紹介できることを嬉しく思っています。SetFitは、Sentence Transformersのフューショットファインチューニングの効率的なフレームワークです。SetFitは少量のラベル付きデータで高い精度を達成します – 例えば、顧客レビュー(CR)感情データセットでクラスごとにわずか8つのラベル付きの例を使用すると、SetFitはフルトレーニングセットの3,000の例でRoBERTa Largeのファインチューニングと競争力を持ちます 🤯!
他のフューショット学習手法と比較して、SetFitにはいくつかの特徴があります:
🗣 プロンプトや口述者不要:フューショットファインチューニングの現在の技術は、例を基に言語モデルに適した形式に変換するための手作りのプロンプトや口述者が必要です。SetFitはプロンプトを一切必要とせず、わずかな数のラベル付きテキスト例から直接豊かな埋め込みを生成します。
🏎 高速トレーニング:SetFitは、高い精度を実現するためにT0やGPT-3のような大規模なモデルを必要としません。そのため、トレーニングと推論の速度は通常1桁以上速くなります。
🌎 多言語対応:SetFitはHubの任意のSentence Transformerと組み合わせて使用できるため、マルチリンガルなチェックポイントをファインチューニングするだけで、複数の言語でテキストを分類することができます。
詳細については、私たちの論文、データ、コードをご覧ください。このブログ投稿では、SetFitの動作方法と独自のモデルをトレーニングする方法について説明します。さあ、始めましょう!
どのように動作するのか?
SetFitは効率とシンプルさを考慮して設計されています。SetFitはまず、少数のラベル付き例(通常はクラスごとに8または16個)でSentence Transformerモデルをファインチューニングします。次に、ファインチューニングされたSentence Transformerから生成された埋め込みを用いて分類器ヘッドをトレーニングします。
SetFitの2段階のトレーニングプロセス
SetFitは、ペアの文に基づいて密な埋め込みを生成するSentence Transformersの能力を活用しています。最初のファインチューニングフェーズでは、対照的なトレーニングを行い、同一クラス内と異なるクラス内の選択により、正のペアと負のペアが作成されます。その後、Sentence Transformerモデルはこれらのペア(またはトリプレット)でトレーニングされ、各例ごとに密なベクトルを生成します。2番目のステップでは、分類ヘッドがエンコードされた埋め込みとそれに対応するクラスラベルでトレーニングされます。推論時には、未知の例がファインチューニングされたSentence Transformerを通過し、分類ヘッドに供給される埋め込みがクラスラベルの予測を出力します。
また、基本となるSentence Transformerモデルをマルチリンガルなものに切り替えるだけで、SetFitはマルチリンガルな環境でシームレスに機能します。実験によると、SetFitは、ドイツ語、日本語、中国語、フランス語、スペイン語の分類タスクで、言語内および言語間の設定の両方で有望な結果を示しています。
SetFitのベンチマーキング
既存のフューショット手法よりもはるかに小さなモデルを基にしているにもかかわらず、SetFitは各種ベンチマークで最先端のフューショット手法と同等またはそれ以上のパフォーマンスを発揮します。RAFTでは、355億のパラメータを持つSetFit Roberta(all-roberta-large-v1
モデルを使用)がPETやGPT-3を上回ります。平均の人間のパフォーマンスとSetFit Robertaの30倍のサイズである110億パラメータのT-fewに次ぐ結果です。SetFitはまた、11のRAFTタスクのうち7つで人間のベースラインを上回ります。
RAFTリーダーボードの優れた方法(2022年9月時点)
他のデータセットでは、SetFitはさまざまなタスクで堅牢性を示しています。下の図に示すように、クラスごとにわずか8つの例であっても、通常、PERFECT、ADAPET、ファインチューニングされた通常のトランスフォーマーを上回ります。SetFitは、プロンプトを必要とせずに27倍小さいにもかかわらず、T-Few 3Bと同等の結果を達成します。
3つの分類データセットで他の手法とのSetFitのパフォーマンスを比較しています。
高速な学習と推論
T-Few 3BとSetFit(MPNet)のトレーニングコストと平均パフォーマンスを、クラスごとに8つのラベル付きの例を使用して比較します。
SetFitは比較的小さなモデルで高い精度を達成するため、トレーニングは非常に高速でコストも低くなります。例えば、8つのラベル付きの例を使用してNVIDIA V100上でSetFitをトレーニングすると、わずか30秒で$0.025のコストがかかります。対照的に、T-Few 3BのトレーニングにはNVIDIA A100が必要で、同じ実験に対して11分かかり、約$0.7のコストがかかります – 28倍以上の差です。実際、SetFitはGoogle Colabのような単一のGPU上でも実行でき、数分でCPU上でもSetFitをトレーニングすることができます!上の図に示されているように、SetFitの高速化はモデルのパフォーマンスと比較可能です。同様の利点は推論やSetFitモデルの蒸留にも得られ、速度が123倍に向上します 🤯。
独自のモデルのトレーニング
SetFitをコミュニティに提供するため、わずか数行のコードで独自のモデルをトレーニングできるsetfit
ライブラリを作成しました。最初に次のコマンドを実行してインストールしてください:
pip install setfit
次に、SetFitトレーニングプロセスを簡略化する2つのコアクラスであるSetFitModel
とSetFitTrainer
をインポートします:
from datasets import load_dataset
from sentence_transformers.losses import CosineSimilarityLoss
from setfit import SetFitModel, SetFitTrainer
今度は、Hugging Face Hubからテキスト分類データセットをダウンロードしましょう。顧客レビューのデータセットであるSentEval-CRデータセットを使用します:
dataset = load_dataset("SetFit/SentEval-CR")
わずかなラベル付きの例で実際のシナリオをシミュレートするために、トレーニングセットからクラスごとに8つの例をサンプリングします:
# クラスごとにN個の例を選択します(この場合は8個)
train_ds = dataset["train"].shuffle(seed=42).select(range(8 * 2))
test_ds = dataset["test"]
データセットができたので、次のステップはHubから事前学習済みのSentence Transformerモデルをロードし、SetFitTrainer
をインスタンス化することです。ここでは、多くのデータセットで優れた結果を得ることがわかったparaphrase-mpnet-base-v2モデルを使用します:
# HubからSetFitモデルをロード
model = SetFitModel.from_pretrained("sentence-transformers/paraphrase-mpnet-base-v2")
# トレーナーを作成
trainer = SetFitTrainer(
model=model,
train_dataset=train_ds,
eval_dataset=test_ds,
loss_class=CosineSimilarityLoss,
batch_size=16,
num_iterations=20, # コントラスティブラーニングのために生成するテキストペアの数
num_epochs=1 # コントラスティブラーニングに使用するエポック数
)
最後のステップは、モデルのトレーニングと評価です:
# トレーニングと評価!
trainer.train()
metrics = trainer.evaluate()
以上です – これで最初のSetFitモデルのトレーニングが完了しました!トレーニング済みのモデルをHubにプッシュすることを忘れないでください 🙂
# モデルをHubにプッシュ
# huggingface-cli loginでログインしていることを確認してください
trainer.push_to_hub("my-awesome-setfit-model")
この例では、1つの特定のベースモデルで行われた操作の例を示しましたが、パフォーマンスやタスクのために異なるSentence Transformerモデルを切り替えることもできます。例えば、マルチリンガルなSentence Transformerボディを使用することで、フューショット分類をマルチリンガルな設定に拡張することができます。
次のステップ
SetFitはフューショット分類タスクに効果的な方法であることを示しました。今後数ヶ月間、この方法が自然言語推論やトークン分類などのタスクにどれだけ一般化するかを調査します。その間、業界の実践者がSetFitを自分のユースケースに適用する様子を楽しみにしています – 質問やフィードバックがある場合は、GitHubのリポジトリで問題を開いてください 🤗。
フューショット学習を楽しんでください!
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