mcpField
S
sentence-transformers

sentence-transformers

github.com/davila7数据与数据库33.0k376 次安装今天更新
代码仓库

关于 sentence-transformers

sentence-transformers 是使用 Transformers 生成句子和文本嵌入的 Python 框架,适用于搜索、RAG 与文本分析。它支持多语言模型、本地运行、批量编码、相似度计算和微调。

主要功能

  1. 01生成句子与文本嵌入
  2. 02计算语义相似度
  3. 03批量编码文本
  4. 04提供多语言预训练模型
  5. 05支持嵌入模型微调

适用场景

  1. 01为 RAG 文档生成嵌入
  2. 02构建语义搜索
  3. 03比较句子或文本相似度
  4. 04对文本进行聚类或分类

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davila7/claude-code-templates --skill sentence-transformers

安装后在 Claude Code 中输入/sentence-transformers确认已加载。

附带文件references/models.md

详细介绍

Sentence Transformers - 最先进的嵌入

使用 transformers 进行句子和文本嵌入的 Python 框架。

何时使用 Sentence Transformers

在以下情况使用:

  • 需要用于 RAG 的高质量嵌入
  • 语义相似度和搜索
  • 文本聚类和分类
  • 多语言嵌入(100+ 种语言)
  • 在本地运行嵌入(无需 API)
  • 作为 OpenAI 嵌入的高性价比替代方案

指标:

  • 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)

模型选择指南

模型维度速度质量使用场景
all-MiniLM-L6-v2384快好通用、原型开发
all-mpnet-base-v2768中更好生产环境 RAG
all-roberta-large-v11024慢最佳需要高精度
paraphrase-multilingual768中好多语言

最佳实践

  1. 从 all-MiniLM-L6-v2 开始 - 良好的基线
  2. 归一化嵌入 - 更适合余弦相似度
  3. 如有 GPU 则使用 - 编码速度提升 10 倍
  4. 批量编码 - 更高效
  5. 缓存嵌入 - 重新计算成本高
  6. 针对领域进行微调 - 提升质量
  7. 测试不同模型 - 质量因任务而异
  8. 监控内存 - 大型模型需要更多 RAM

性能

模型速度(句/秒)内存维度
MiniLM~2000120MB384
MPNet~600420MB768
RoBERTa~3001.3GB1024

资源

评论

支持 Markdown