ホームページ  >  記事  >  テクノロジー周辺機器  >  少数ショット学習では、テキスト分類に SetFit を使用します

少数ショット学習では、テキスト分類に SetFit を使用します

王林
王林転載
2023-11-28 11:14:281523ブラウズ

翻訳者| ##この記事では、「フューショット (Few-shot

)」に関連する概念を紹介します。そして、広く使用されているテキスト分類の

SetFit 方法に焦点を当てます。

従来の機械学習 (ML) 監視下 (S

uppervised少数ショット学習では、テキスト分類に SetFit を使用します

) 機械学習では、正確な予測を行うモデルの能力を高めるために、モデルのトレーニングに大規模なデータセットが使用されます。トレーニング プロセスが完了したら、テスト データを使用してモデルの予測結果を取得できます。ただし、この従来の教師あり学習アプローチには重大な欠点があります。それは、大規模でエラーのないトレーニング データセットが必要であるということです。ただし、すべてのフィールドがこのようなエラーのないデータ セットを提供できるわけではありません。そこで、「数ショット学習」という概念が生まれました。

詳細な調査

Sentence Transformer の微調整SetFit ) その前に、自然言語処理 (

自然言語処理

NLP) の重要な側面を簡単に復習する必要があります。それは「数回の学習」です。 # 少数ショット学習# 少数ショット学習とは、限られたトレーニング データ セットを使用することを意味します。モデルをトレーニングします。モデルは、サポート セットと呼ばれるこれらの小さなコレクションから知識を取得できます。このタイプの学習は、トレーニング データの類似点と相違点を認識するように少数ショット モデルを教えることを目的としています。たとえば、与えられた画像を猫か犬として分類するようにモデルに指示するのではなく、さまざまな動物間の共通点と相違点を把握するように指示します。見てわかるように、このアプローチは入力データの類似点と相違点を理解することに重点を置いています。したがって、メタ学習 (メタ学習 #) または学習から学習

) とも呼ばれることがよくあります。

少数ショット学習のサポート セットは

k から ( k -way)nサンプル (n ショット) 学習。このうち「k」はサポートセット内のカテゴリ数を表します。たとえば、二項分類では、

k

2 と等しくなります。また、「n」は、サポート セット内の各カテゴリで利用可能なサンプルの数を示します。たとえば、肯定的な分類に 10 データ ポイントがあり、否定的な分類にも 10 データ ポイントがある場合、 n10 と同じです。要約すると、このサポート セットは双方向の 10 サンプル学習として説明できます。 少数ショット学習の基本を理解したので、SetFit を使用して進みましょう。テキスト分類を電子商取引データセットに適用します。 #SetFitアーキテクチャ

作成者## Intel Labs チームと共同開発された #Hugging Face#SetFit

は、少数サンプルの写真分類のためのオープンソース ツールです。 SetFit に関する包括的な情報は、プロジェクト ライブラリのリンク https://github.com/huggingface/setfit?ref=hackernoon.com で見つけることができます。

#出力に関しては、SetFit

はカスタマー レビュー (カスタマー レビュー、) のみを使用します。 CR) 感情分析データセット内の各カテゴリの 8 つの注釈付きの例。結果は、3,000 の例で構成される完全なトレーニング セットで調整された RoBERTa Large の結果と同じです。ボリュームの点で、わずかに最適化された RoBERTa モデルは

SetFit モデルよりも 3 倍大きいことを強調する価値があります。以下の図は SetFit アーキテクチャを示しています: ##画像ソース: https:/ / www.php.cn/link/2456b9cd2668fa69e3c7ecd6f51866bf#SetFit を使用して迅速な学習を実現します

少数ショット学習では、テキスト分類に SetFit を使用します

SetFit のトレーニング速度は非常に速く、効率的です。 GPT-3T-FEW

などの大型モデルと比較して、そのパフォーマンスは非常に優れています。以下の画像を参照してください:

少数ショット学習では、テキスト分類に SetFit を使用しますSetFit と T-Few 3B モデルの比較

下図に示すように、SetFitサンプル学習のパフォーマンスは RoBERTa よりも優れています。

少数ショット学習では、テキスト分類に SetFit を使用します

SetFit と RoBERT の比較、画像出典: https://www .php.cn/link/3ff4cea152080fd7d692a8286a587a67

データセット

以下、書籍、衣料品とアクセサリー、電子機器、家庭用家具の 4 つの異なるカテゴリで構成される独自の e コマース データ セットを使用します。このデータセットの主な目的は、電子商取引 Web サイトの商品説明を指定されたタグに分類することです。

少数サンプルのトレーニング方法の使用を容易にするために、4 つのカテゴリのそれぞれから 8 つのサンプルを選択し、合計 # 個のサンプルを選択します。 ##32 トレーニング サンプル。残りのサンプルはテスト目的で保存されます。つまり、ここで使用するサポート セットは、8 の例から学習する 4 です。次の図は、カスタム e コマース データ セットの例を示しています。

少数ショット学習では、テキスト分類に SetFit を使用します# カスタム e コマース データ セットのサンプル

all-mpnet-base-v2」という名前の Sentence Transformers の事前トレーニング済みモデルを使用して、テキスト データをさまざまなベクトル埋め込みに変換します。このモデルは、入力テキストに対して次元 768 のベクトル埋め込みを生成できます。

次のコマンドに示すように、conda 環境 (オープン ソース ソフトウェア) を使用します。パッケージ管理システムと環境管理システム) を使用して、SetFit の実装を開始します。

!pip3 install SetFit !pip3 install sklearn !pip3 install transformers !pip3 install sentence-transformers

ソフトウェア パッケージをインストールした後、次のコードを通じてデータ セットをロードできます。

from datasets import load_datasetdataset = load_dataset('csv', data_files={"train": 'E_Commerce_Dataset_Train.csv',"test": 'E_Commerce_Dataset_Test.csv'})

以下の図を参照して、トレーニング サンプルとテスト サンプルの数を確認してみましょう。

#トレーニングとテスト データ 少数ショット学習では、テキスト分類に SetFit を使用します

#sklearn# を使用しますパッケージ内の #LabelEncoder は、テキスト ラベルをエンコードされたラベルに変換します。

from sklearn.preprocessing import LabelEncoder le = LabelEncoder()

LabelEncoder を通じて、トレーニング データ セットとテスト データ セットをエンコードし、ラベルが追加されますデータセットの「ラベル」列に追加します。以下のコードを参照してください:

Encoded_Product = le.fit_transform(dataset["train"]['Label']) dataset["train"] = dataset["train"].remove_columns("Label").add_column("Label", Encoded_Product).cast(dataset["train"].features)Encoded_Product = le.fit_transform(dataset["test"]['Label']) dataset["test"] = dataset["test"].remove_columns("Label").add_column("Label", Encoded_Product).cast(dataset["test"].features)
以下では、

SetFit モデルと文コンバーターを初期化します (sentence-トランス)モデル。

from setfit import SetFitModel, SetFitTrainer from sentence_transformers.losses import CosineSimilarityLossmodel_id = "sentence-transformers/all-mpnet-base-v2" model = SetFitModel.from_pretrained(model_id)trainer = SetFitTrainer(  model=model, train_dataset=dataset["train"], eval_dataset=dataset["test"], loss_class=CosineSimilarityLoss, metric="accuracy", batch_size=64, num_iteratinotallow=20, num_epochs=2, column_mapping={"Text": "text", "Label": "label"})
2 つのモデルを初期化した後、トレーニング プログラムを呼び出すことができます。

trainer.train()

2 トレーニング ラウンド (エポック) が完了したら、 eval_dataset、トレーニングされたモデルを評価します。

trainer.evaluate()
テスト後、トレーニング モデルの最高精度は

87.5% でした。 87.5% の精度は高くありませんが、結局のところ、私たちのモデルはトレーニングに 32 サンプルのみを使用しました。言い換えれば、データ セットの限られたサイズを考慮すると、テスト データ セットで 87.5% の精度を達成することは、実際には非常に素晴らしいことです。 さらに、

SetFit は、後で使用するためにトレーニングされたモデルをローカル ストレージに保存することもできます。未来の予測。 #

trainer.model._save_pretrained(save_directory="SetFit_ECommerce_Output/")model=SetFitModel.from_pretrained("SetFit_ECommerce_Output/", local_files_notallow=True)
#次のコードは、新しいデータに基づく予測結果を示しています:

input = ["Campus Sutra Men's Sports Jersey T-Shirt Cool-Gear: Our Proprietary Moisture Management technology. Helps to absorb and evaporate sweat quickly. Keeps you Cool & Dry. Ultra-Fresh: Fabrics treated with Ultra-Fresh Antimicrobial Technology. Ultra-Fresh is a trademark of (TRA) Inc, Ontario, Canada. Keeps you odour free."]output = model(input)
予測出力は 1 であり、ラベルの LabelEncoded

値は「Clothing and Accessories」であることがわかります。従来の AI モデルは、安定したレベルの出力を生成するために大量のトレーニング リソース (時間とデータを含む) を必要とします。対照的に、私たちのモデルは正確かつ効率的です。

この時点で、「少数ショット学習」の概念と、テキスト分類やその他のアプリケーションで SetFit を使用する方法を基本的に習得したと思います。もちろん、より深い理解を得るために、実際のシナリオを選択し、データセットを作成し、対応するコードを記述し、プロセスをゼロショット学習とシングルショット学習に拡張することを強くお勧めします。

#翻訳者紹介

##Julian Chen は 51CTO コミュニティの編集者であり、他にもさまざまな知識を持っています。 IT プロジェクトの実装に 10 年以上の経験があり、社内外のリソースとリスクの管理に優れ、ネットワークと情報セキュリティに関する知識と経験の普及に重点を置いています

#原題:

##Mastering Few-Shot Learning with SetFit for Textclassification、著者: Shyamガネーシュ S)

以上が少数ショット学習では、テキスト分類に SetFit を使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。