🔎Unsloth ガイドによる埋め込みモデルのファインチューニング

Unsloth を使って埋め込みモデルを簡単にファインチューニングする方法を学びます。

埋め込みモデルのファインチューニングは、特定のタスクにおける検索およびRAGの性能を大きく改善できます。これにより、モデルのベクトルがあなたのドメインと、ユースケースで重要な「類似性」の種類に合うようになり、データに対する検索、RAG、クラスタリング、レコメンデーションが向上します。

例: 「Google launches Pixel 10」と「Qwen releases Qwen3」という見出しは、両方を単に「Tech」とラベル付けするだけなら類似として埋め込みできますが、意味検索をしている場合は、別の内容について述べているため類似ではありません。ファインチューニングは、ユースケースにとって「正しい」種類の類似性をモデルに学習させ、エラーを減らし、結果を改善します。

Unslotharrow-up-right は現在、埋め込み、 分類器, BERT, リランカー モデルの学習を 約1.8〜3.3倍高速に 対応しています。メモリ使用量は20%少なく、他のFlash Attention 2実装よりコンテキスト長は2倍で、精度低下はありません。EmbeddingGemma-300M はわずか 3GBのVRAMで動作します。学習済みの モデルをどこでも使用できます: transformers、LangChain、Ollama、vLLM、llama.cpp など。

Unslothは SentenceTransformersarrow-up-right を使用して、Qwen3-Embedding、BERT などの互換モデルをサポートします。 ノートブックやアップロードがなくても、引き続きサポートされています。

無料のファインチューニング用ノートブックを3つの主なユースケース向けに作成しました:

  • All-MiniLM-L6-v2: セマンティック検索、検索、クラスタリング向けに、コンパクトでドメイン固有の文埋め込みを生成し、自分のデータでチューニングします。

  • tomaarsen/miriad-4.4M-split: 医療関連の質問と生物医学論文を埋め込み、高品質な医療セマンティック検索とRAGを実現します。

  • electroglyph/technical: 技術文書の意味と意味的類似性をよりよく捉えます(ドキュメント、仕様、エンジニアリング議論)。

アップロード済みモデルの残りは こちらのコレクションで見ることができますarrow-up-right.

Unslothの貢献者である electroglypharrow-up-rightに心から感謝します。このサポートには彼の仕事が非常に重要でした。Hugging Face 上の electroglyph のカスタムモデルは こちらarrow-up-right.

🦥 Unslothの機能

  • パイプラインを書き直す必要なく、埋め込みに対してLoRA/QLoRAまたはフルファインチューニングが可能

  • エンコーダー専用の SentenceTransformer モデルへの最良のサポート( modules.json)

  • Cross-encoderモデルは、フォールバック経路でも正しく学習できることが確認されています

  • このリリースは transformers v5

を持たないモデルには限定的なサポートがあります modules.json (デフォルトの SentenceTransformers プーリングモジュールを自動割り当てします)。カスタムなこと(カスタムヘッド、非標準のプーリング)をしている場合は、プール済み埋め込みの動作などの出力を再確認してください。

MPNet や DistilBERT のようにカスタム追加が必要だった一部のモデルは、勾配チェックポイント機能を transformers モデルにパッチ適用することで有効化されました。

🛠️ ファインチューニングのワークフロー

新しいファインチューニングの流れは FastSentenceTransformer.

を中心にしています。主な保存/Hubへの公開メソッド:

  • save_pretrained() を保存します LoRAアダプターを ローカルフォルダに

  • save_pretrained_merged() を保存します マージ済みモデルを ローカルフォルダに

  • push_to_hub() をプッシュします LoRAアダプターを Hugging Face に

  • push_to_hub_merged() をプッシュします マージ済みモデルを Hugging Face に

そして非常に重要な点が1つあります。推論時の読み込みには for_inference=True

が必要です。 from_pretrained() と似ていますが、:

  • モデルを 推論用に 読み込むには FastSentenceTransformer必ず 次を渡してください: for_inference=True

したがって、推論時の読み込みは次のようになります:

Hugging Face の認証については、次を実行する場合:

Hubメソッドを呼び出す前に同じ仮想環境内で実行すると、

  • push_to_hub() および push_to_hub_merged() トークン引数は不要です.

✅ 推論して、どこにでもデプロイ!

ファインチューニングしたUnslothモデルは、transformers、LangChain、Weaviate、sentence-transformers、Text Embeddings Inference (TEI)、vLLM、llama.cpp、カスタム埋め込みAPI、pgvector、FAISS/ベクトルデータベース、そして任意のRAGフレームワークなど、主要なツールすべてで使用・デプロイできます。

ファインチューニング済みモデルは後から自分のデバイスにローカルでダウンロードできるため、ロックインはありません。

📊 Unslothのベンチマーク

埋め込みのファインチューニングにおいて、Unslothの利点には速度があります!私たちは一貫して 1.8〜3.3倍高速 であることを示しています。128から2048、さらにそれ以上のさまざまな系列長にわたる多様な埋め込みモデルでです。

EmbeddingGemma-300M の QLoRA はわずか 3GBのVRAM で動作し、LoRA は 6GB VRAM で動作します。

以下は、ヒートマップで比較した Unsloth のベンチマークです。 SentenceTransformers + Flash Attention 2 (FA2) を4bit QLoRAで使用した場合との比較です。 4bit QLoRAでは、Unsloth は1.8倍から2.6倍高速です:

以下は、ヒートマップで比較した Unsloth のベンチマークです。 SentenceTransformers + Flash Attention 2 (FA2) を16bit LoRAで使用した場合との比較です。 16bit LoRAでは、Unsloth は1.2倍から3.3倍高速です:

🔮 モデルサポート

Unslothがサポートする人気の埋め込みモデルをいくつか紹介します(ここにすべてのモデルは載っていません):

ほとんどの 一般的なモデルarrow-up-right はすでにサポートされています。もし欲しいエンコーダー専用モデルがまだない場合は、ぜひ GitHub issuearrow-up-right を開いてリクエストしてください。

最終更新

役に立ちましたか?