setfit - センテンストランスフォーマーによる効率的な少数ショット学習

(Efficient few-shot learning with Sentence Transformers)

Created at: 2022-06-30 15:10:15
Language: Python
License: Apache-2.0

🤗 モデルとデータセット |📖 ブログ|📃

SetFit - センテンストランスフォーマーによる効率的な少数ショット学習

SetFitは、センテンストランスフォーマーの少量の微調整のための効率的で迅速なフレームワークです。SetFitはラベル付きデータをほとんど持たずに高精度を達成します - たとえば、カスタマーレビューセンチメントデータセットのクラスごとにラベル付きの例が8つだけの場合、SetFitは3kの例🤯の完全なトレーニングセットでRoBERTa Largeを微調整することと競争力があります!

他の数ショットの学習方法と比較して、SetFitにはいくつかのユニークな機能があります。

  • 🗣 プロンプトや言語表示なし: 少量の微調整を行う現在の手法では、基になる言語モデルに適した形式に例を変換するために、手作りのプロンプトまたは言語化ツールが必要です。SetFit は、テキスト例から直接リッチ埋め込みを生成することで、プロンプトを完全に排除します。
  • 🏎 迅速なトレーニング:SetFitは、高精度を達成するためにT0やGPT-3などの大規模モデルを必要としません。その結果、通常、推論をトレーニングして実行する方が1桁(またはそれ以上)高速です。
  • 🌎 多言語サポート: SetFit はハブ上の任意の Sentence Transformer で使用できるため、多言語チェックポイントを微調整するだけで、複数の言語のテキストを分類できます。

はじめ

取り付け

以下を実行してダウンロードしてインストールします。

setfit

python -m pip install setfit

セットフィットモデルのトレーニング

setfit
ギングフェイスハブと統合されており、2つの主要なクラスを提供します。

  • SetFitModel
    : 事前トレーニング済みのボディと from の分類ヘッドを組み合わせたラッパー
    sentence_transformers
    scikit-learn
  • SetFitTrainer
    : SetFit の微調整プロセスをラップするヘルパー クラス。

エンドツーエンドの例を次に示します。

from datasets import load_dataset
from sentence_transformers.losses import CosineSimilarityLoss

from setfit import SetFitModel, SetFitTrainer


# Load a dataset from the Hugging Face Hub
dataset = load_dataset("emotion")

# Simulate the few-shot regime by sampling 8 examples per class
num_classes = 6
train_ds = dataset["train"].shuffle(seed=42).select(range(8 * num_classes))
test_ds = dataset["test"]

# Load SetFit model from Hub
model = SetFitModel.from_pretrained("sentence-transformers/paraphrase-mpnet-base-v2")

# Create trainer
trainer = SetFitTrainer(
    model=model,
    train_dataset=train_ds,
    eval_dataset=test_ds,
    loss_class=CosineSimilarityLoss,
    batch_size=16,
    num_iterations=20, # The number of text pairs to generate
)

# Train and evaluate
trainer.train()
metrics = trainer.evaluate()

# Push model to the Hub
trainer.push_to_hub("my-awesome-setfit-model")

その他の例については、フォルダをチェックしてください。

notebooks/

論文の結果を再現する

SetFit の結果と、論文の表 2 に示すさまざまなベースラインを再現するためのスクリプトを提供しています。ディレクトリ内のセットアップとトレーニングの手順をチェックアウトします。

scripts/

開発者によるインストール

このプロジェクトでコードを実行するには、まずCondaなどを使用してPython仮想環境を作成します。

conda create -n setfit python=3.9 && conda activate setfit

次に、基本要件を次のようにインストールします。

python -m pip install -e '.[dev]'

これにより、一貫性のあるコードフォーマットを保証するために使用するようなパッケージがインストールされます。次に、専用のベースラインディレクトリの1つに移動し、追加の依存関係をインストールします。

datasets
black
isort

cd scripts/setfit
python -m pip install -r requirements.txt

コードの書式設定

一貫性のあるコードフォーマットを保証するために、および を使用します。インストール手順を実行した後、次のコマンドを実行してコードをローカルで確認できます。

black
isort

make style && make quality

プロジェクト構造

├── LICENSE
├── Makefile        <- Makefile with commands like `make style` or `make tests`
├── README.md       <- The top-level README for developers using this project.
├── notebooks       <- Jupyter notebooks.
├── final_results   <- Model predictions from the paper
├── scripts         <- Scripts for training and inference
├── setup.cfg       <- Configuration file to define package metadata
├── setup.py        <- Make this project pip installable with `pip install -e`
├── src             <- Source code for SetFit
└── tests           <- Unit tests

引用

  doi = {10.48550/ARXIV.2209.11055},
  url = {https://arxiv.org/abs/2209.11055},
  author = {Tunstall, Lewis and Reimers, Nils and Jo, Unso Eun Seo and Bates, Luke and Korat, Daniel and Wasserblat, Moshe and Pereg, Oren},
  keywords = {Computation and Language (cs.CL), FOS: Computer and information sciences, FOS: Computer and information sciences},
  title = {Efficient Few-Shot Learning Without Prompts},
  publisher = {arXiv}, 
  year = {2022},
  copyright = {Creative Commons Attribution 4.0 International}}