Sentence Transformer(文埋め込みモデル)(センテンストランスフォーマー)
Sentence Transformerとは、トランスフォーマーアーキテクチャをベースに文全体を1つの固定長ベクトルに変換する埋め込みモデルの総称で、Sentence-BERT(2019年)を起点にE5、BGE、GTE等のモデルが続き、セマンティック検索・RAG・テキスト分類の基盤技術となっている。
Sentence Transformer(文トランスフォーマー)は、BERTやRoBERTaなどの事前学習済みトランスフォーマーモデルを、文レベルの埋め込み生成に特化させたモデル群である。BERTの[CLS]トークン出力を直接使うと文類似度タスクの性能が低い(GloVeの平均プーリングにすら劣る場合がある)という問題を解決するため、Sentence-BERT(2019年、Reimers & Gurevych)がシャム(Siamese)ネットワーク構造を導入した。
Sentence-BERTの仕組み
Sentence-BERTはBERTをシャムネットワーク構造で学習する。
- 構造: 2つの同一BERTモデル(重み共有)に文ペアを入力し、各文の埋め込みを生成
- プーリング: [CLS]トークンまたは全トークンの平均プーリング(Mean Pooling)で文ベクトルを生成
- 学習目標: NLI(Natural Language Inference)データセットで対照学習。含意関係にある文ペアのベクトルを近づけ、矛盾する文ペアを遠ざける
- 高速化: 1万文の全ペア類似度計算がBERTの65時間→5秒に短縮(Sentence-BERT論文)
主要モデル比較表
| モデル | 開発元 | 次元数 | パラメータ | MTEB平均 | 特徴 |
|---|---|---|---|---|---|
| all-MiniLM-L6-v2 | Microsoft | 384 | 22M | 56.3 | 軽量・高速。入門に最適 |
| all-mpnet-base-v2 | Microsoft | 768 | 109M | 57.8 | MiniLMより高精度 |
| multilingual-e5-large-instruct | Microsoft | 1024 | 560M | 66.3 | 指示付き多言語対応 |
| bge-large-en-v1.5 | BAAI | 1024 | 335M | 64.2 | オープンソース英語特化 |
| BGE-M3 | BAAI | 1024 | 568M | 68.2 | 多言語・Dense+Sparse+ColBERT |
| gte-large-en-v1.5 | Alibaba | 1024 | 434M | 65.4 | 商用利用可能 |
| Jina Embeddings v3 | Jina AI | 1024 | 570M | 69.8 | タスク別LoRAアダプター |
| nomic-embed-text-v1.5 | Nomic AI | 768 | 137M | 62.3 | 完全オープンソース |
学習手法の進化
対照学習(Contrastive Learning)
- SimCSE(2021): ドロップアウトマスクの違いを正例ペアとして活用する教師なし対照学習。追加データ不要で高品質な埋め込みを実現
- E5(2022): 「query: 」「passage: 」プレフィクスで検索クエリと文書を区別する指示付き対照学習
- BGE(2023): RetroMAEによる事前学習 + 対照学習の2段階訓練で高精度を達成
指示付き埋め込み(Instruction-tuned Embedding)
- E5-mistral-7b-instruct(2024): 7Bパラメータの言語モデルを埋め込みモデルに変換。タスク指示文を入力に含めることで、同じテキストでも検索/分類/クラスタリングで異なるベクトルを生成
- Jina Embeddings v3(2024): タスク別のLoRAアダプターを内蔵し、推論時にタスクを切り替え
Sentence Transformer ライブラリの使い方
sentence-transformers(Python)ライブラリは、Hugging Face Hub上の600以上のモデルを簡単に利用できる。
主な機能:
model.encode(sentences): 文リストをバッチでベクトル化util.cos_sim(emb1, emb2): コサイン類似度の計算util.semantic_search(query_emb, corpus_emb, top_k): セマンティック検索SentenceTransformer.fit(): カスタムデータでのファインチューニングutil.paraphrase_mining(model, sentences): パラフレーズ(言い換え)の自動検出
MTEB ベンチマーク
MTEB(Massive Text Embedding Benchmark)は、埋め込みモデルの包括的な評価基準である。
- 8タスクカテゴリ: 検索(Retrieval)、再ランキング(Reranking)、クラスタリング(Clustering)、分類(Classification)、文類似度(STS)、ペア分類(Pair Classification)、要約(Summarization)、BitextMining
- 58データセット: 英語のみのMTEB-enと多言語のMTEB-multilingual
- リーダーボード: Hugging Face上で公開。2025年時点でNV-Embed-v2が英語トップ、BGE-M3が多言語トップクラス
よくある質問(FAQ)
Q1: 初めてSentence Transformerを使うならどのモデルがおすすめですか? A: 英語ならall-MiniLM-L6-v2(22Mパラメータ・384次元)が軽量で入門に最適。日本語を含む多言語ならmultilingual-e5-large-instruct。精度重視ならBGE-M3。
Q2: Sentence TransformerとOpenAI Embeddingの使い分けは? A: コスト・プライバシー・カスタマイズ性でSentence Transformer(自前ホスティング)、手軽さ・運用負荷の低さでOpenAI API。OpenAI text-embedding-3-smallは$0.02/1Mトークンと安価だが、データが外部送信される。
Q3: GPU なしでもSentence Transformerは実用的ですか? A: all-MiniLM-L6-v2ならCPUで1秒あたり約200文をエンコード可能。バッチ処理なら実用的。リアルタイム検索で大規模データ(100万文以上)を扱う場合はGPU推奨。
まとめ
- Sentence TransformerはBERTベースの文埋め込みモデル群で、セマンティック検索・RAGの基盤
- Sentence-BERT(2019)のシャム構造から、SimCSE→E5→BGE→Jina v3へと進化
- MTEB ベンチマークで客観評価が可能(2025年トップはNV-Embed-v2)
- sentence-transformers Pythonライブラリで600以上のモデルを簡単に利用可能