mcpField
S
sentence-transformers

sentence-transformers

github.com/orchestra-research数据与数据库14.1k967 次安装19 周前更新
代码仓库

关于 sentence-transformers

面向 Python 开发者的文本嵌入框架,基于 Transformers 生成句子和文本向量。支持语义搜索、相似度计算、微调及多语言嵌入。

主要功能

  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/orchestra-research/ai-research-skills --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