mcpField
S
sentence-transformers

sentence-transformers

github.com/orchestra-researchデータ・データベース14.1k967 回インストール19 週間前に更新
リポジトリ

sentence-transformers について

Transformerモデルで文やテキストの埋め込みを生成する、Python開発者向けフレームワークです。セマンティック検索、類似度計算、ファインチューニング、多言語埋め込みに対応します。

主な機能

  1. 01文やテキストの埋め込み生成
  2. 02セマンティック類似度の計算
  3. 03テキストのバッチエンコード
  4. 04埋め込みモデルのファインチューニング
  5. 05多言語モデルの利用

活用シーン

  1. 01RAG向け埋め込みの生成
  2. 02セマンティック検索の構築
  3. 03テキストのクラスタリングや分類
  4. 04埋め込みモデルのローカル実行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/orchestra-research/ai-research-skills --skill sentence-transformers

インストール後、Claude Code で/sentence-transformersを入力して読み込まれたか確認します。

同梱ファイルreferences/models.md

詳細

Sentence Transformers - 最先端の埋め込み

トランスフォーマーを使用した文およびテキストの埋め込みのための Python フレームワークです。

Sentence Transformers を使用するタイミング

以下の場合に使用します:

  • RAG 向けの高品質な埋め込みが必要な場合
  • 意味的類似性と検索
  • テキストのクラスタリングと分類
  • 多言語埋め込み(100 以上の言語)
  • 埋め込みをローカルで実行する場合(API 不要)
  • OpenAI の埋め込みに対するコスト効率の良い代替手段が必要な場合

Metrics:

  • 15,700+ GitHub stars
  • 5000+ 事前学習済みモデル
  • 100+ 言語 に対応
  • PyTorch/Transformers ベース

代わりに以下の代替手段を使用してください:

  • OpenAI Embeddings: API ベースで、最高品質が必要な場合
  • Instructor: タスク固有の指示が必要な場合
  • Cohere Embed: マネージドサービス

クイックスタート

インストール
pip install sentence-transformers
基本的な使い方
from sentence_transformers import SentenceTransformer

# Load model
model = SentenceTransformer('all-MiniLM-L6-v2')

# Generate embeddings
sentences = [
    "This is an example sentence",
    "Each sentence is converted to a vector"
]

embeddings = model.encode(sentences)
print(embeddings.shape)  # (2, 384)

# Cosine similarity
from sentence_transformers.util import cos_sim
similarity = cos_sim(embeddings[0], embeddings[1])
print(f"Similarity: {similarity.item():.4f}")

人気のモデル

汎用
# Fast, good quality (384 dim)
model = SentenceTransformer('all-MiniLM-L6-v2')

# Better quality (768 dim)
model = SentenceTransformer('all-mpnet-base-v2')

# Best quality (1024 dim, slower)
model = SentenceTransformer('all-roberta-large-v1')
多言語
# 50+ languages
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# 100+ languages
model = SentenceTransformer('paraphrase-multilingual-mpnet-base-v2')
ドメイン特化
# Legal domain
model = SentenceTransformer('nlpaueb/legal-bert-base-uncased')

# Scientific papers
model = SentenceTransformer('allenai/specter')

# Code
model = SentenceTransformer('microsoft/codebert-base')

意味的検索

from sentence_transformers import SentenceTransformer, util

model = SentenceTransformer('all-MiniLM-L6-v2')

# Corpus
corpus = [
    "Python is a programming language",
    "Machine learning uses algorithms",
    "Neural networks are powerful"
]

# Encode corpus
corpus_embeddings = model.encode(corpus, convert_to_tensor=True)

# Query
query = "What is Python?"
query_embedding = model.encode(query, convert_to_tensor=True)

# Find most similar
hits = util.semantic_search(query_embedding, corpus_embeddings, top_k=3)
print(hits)

類似度の計算

# Cosine similarity
similarity = util.cos_sim(embedding1, embedding2)

# Dot product
similarity = util.dot_score(embedding1, embedding2)

# Pairwise cosine similarity
similarities = util.cos_sim(embeddings, embeddings)

バッチエンコーディング

# Efficient batch processing
sentences = ["sentence 1", "sentence 2", ...] * 1000

embeddings = model.encode(
    sentences,
    batch_size=32,
    show_progress_bar=True,
    convert_to_tensor=False  # or True for PyTorch tensors
)

ファインチューニング

from sentence_transformers import InputExample, losses
from torch.utils.data import DataLoader

# Training data
train_examples = [
    InputExample(texts=['sentence 1', 'sentence 2'], label=0.8),
    InputExample(texts=['sentence 3', 'sentence 4'], label=0.3),
]

train_dataloader = DataLoader(train_examples, batch_size=16)

# Loss function
train_loss = losses.CosineSimilarityLoss(model)

# Train
model.fit(
    train_objectives=[(train_dataloader, train_loss)],
    epochs=10,
    warmup_steps=100
)

# Save
model.save('my-finetuned-model')

LangChain 統合

from langchain_community.embeddings import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-mpnet-base-v2"
)

# Use with vector stores
from langchain_chroma import Chroma

vectorstore = Chroma.from_documents(
    documents=docs,
    embedding=embeddings
)

LlamaIndex 統合

from llama_index.embeddings.huggingface import HuggingFaceEmbedding

embed_model = HuggingFaceEmbedding(
    model_name="sentence-transformers/all-mpnet-base-v2"
)

from llama_index.core import Settings
Settings.embed_model = embed_model

# Use in index
index = VectorStoreIndex.from_documents(documents)

モデル選択ガイド

ModelDimensionsSpeedQualityUse Case
all-MiniLM-L6-v2384FastGoodGeneral, prototyping
all-mpnet-base-v2768MediumBetterProduction RAG
all-roberta-large-v11024SlowBestHigh accuracy needed
paraphrase-multilingual768MediumGoodMultilingual

ベストプラクティス

  1. all-MiniLM-L6-v2 から始める - 良好なベースライン
  2. 埋め込みを正規化する - コサイン類似度に適している
  3. 利用可能であれば GPU を使用する - エンコーディングが 10 倍高速
  4. バッチエンコーディングを使用する - より効率的
  5. 埋め込みをキャッシュする - 再計算のコストが高い
  6. ドメイン向けにファインチューニングする - 品質が向上
  7. 異なるモデルを試す - 品質はタスクによって異なる
  8. メモリを監視する - 大規模なモデルはより多くの RAM が必要

パフォーマンス

ModelSpeed (sentences/sec)MemoryDimension
MiniLM~2000120MB384
MPNet~600420MB768
RoBERTa~3001.3GB1024

リソース

コメント