句子嵌入框架Skill sentence-transformers

句子嵌入框架是一个用于生成高质量句子和文本嵌入的Python工具,支持语义相似度计算、RAG应用、多语言处理和领域特定模型,适用于自然语言处理任务,如语义搜索、文本聚类和分类。关键词:句子嵌入、语义相似度、RAG、多语言、NLP、AI、Python框架、预训练模型。

NLP 0 次安装 0 次浏览 更新于 3/21/2026

name: sentence-transformers description: 用于最先进的句子、文本和图像嵌入的框架。提供5000多个预训练模型,用于语义相似度、聚类和检索。支持多语言、领域特定和多模态模型。用于为RAG、语义搜索或相似度任务生成嵌入。最适合生产嵌入生成。 version: 1.0.0 author: Orchestra Research license: MIT tags: [Sentence Transformers, Embeddings, Semantic Similarity, RAG, Multilingual, Multimodal, Pre-Trained Models, Clustering, Semantic Search, Production] dependencies: [sentence-transformers, transformers, torch]

Sentence Transformers - 最先进的嵌入

用于句子和文本嵌入的Python框架,使用变换器。

何时使用 Sentence Transformers

使用时机:

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

指标:

  • 15,700+ GitHub星标
  • 5000+ 预训练模型
  • 支持100+ 语言
  • 基于PyTorch/Transformers

使用替代方案:

  • OpenAI Embeddings:需要基于API的最高质量
  • Instructor:任务特定指令
  • Cohere Embed:托管服务

快速开始

安装

pip install sentence-transformers

基本用法

from sentence_transformers import SentenceTransformer

# 加载模型
model = SentenceTransformer('all-MiniLM-L6-v2')

# 生成嵌入
sentences = [
    "This is an example sentence",
    "Each sentence is converted to a vector"
]

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

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

流行模型

通用目的

# 快速,质量好(384维度)
model = SentenceTransformer('all-MiniLM-L6-v2')

# 质量更好(768维度)
model = SentenceTransformer('all-mpnet-base-v2')

# 最佳质量(1024维度,较慢)
model = SentenceTransformer('all-roberta-large-v1')

多语言

# 50+ 语言
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# 100+ 语言
model = SentenceTransformer('paraphrase-multilingual-mpnet-base-v2')

领域特定

# 法律领域
model = SentenceTransformer('nlpaueb/legal-bert-base-uncased')

# 科学论文
model = SentenceTransformer('allenai/specter')

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

语义搜索

from sentence_transformers import SentenceTransformer, util

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

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

# 编码语料库
corpus_embeddings = model.encode(corpus, convert_to_tensor=True)

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

# 查找最相似
hits = util.semantic_search(query_embedding, corpus_embeddings, top_k=3)
print(hits)

相似度计算

# 余弦相似度
similarity = util.cos_sim(embedding1, embedding2)

# 点积
similarity = util.dot_score(embedding1, embedding2)

# 成对余弦相似度
similarities = util.cos_sim(embeddings, embeddings)

批量编码

# 高效的批量处理
sentences = ["sentence 1", "sentence 2", ...] * 1000

embeddings = model.encode(
    sentences,
    batch_size=32,
    show_progress_bar=True,
    convert_to_tensor=False  # 或 True 用于PyTorch张量
)

微调

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

# 训练数据
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)

# 损失函数
train_loss = losses.CosineSimilarityLoss(model)

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

# 保存
model.save('my-finetuned-model')

LangChain集成

from langchain_community.embeddings import HuggingFaceEmbeddings

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

# 用于向量存储
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

# 用于索引
index = VectorStoreIndex.from_documents(documents)

模型选择指南

模型 维度 速度 质量 使用场景
all-MiniLM-L6-v2 384 通用,原型制作
all-mpnet-base-v2 768 更好 生产RAG
all-roberta-large-v1 1024 最佳 需要高精度
paraphrase-multilingual 768 多语言

最佳实践

  1. 从all-MiniLM-L6-v2开始 - 好的基线
  2. 归一化嵌入 - 更好的余弦相似度
  3. 使用GPU(如可用) - 编码快10倍
  4. 批量编码 - 更高效
  5. 缓存嵌入 - 重新计算昂贵
  6. 为领域微调 - 提高质量
  7. 测试不同模型 - 质量因任务而异
  8. 监控内存 - 大型模型需要更多RAM

性能

模型 速度(句子/秒) 内存 维度
MiniLM ~2000 120MB 384
MPNet ~600 420MB 768
RoBERTa ~300 1.3GB 1024

资源