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は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 | 完全オープンソース |
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(Massive Text Embedding Benchmark)は、埋め込みモデルの包括的な評価基準である。
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推奨。