用途 sentence-transformers 是一个 Python 框架,用于生成句子和文本的嵌入(embeddings),底层基于 PyTorch 与 Transformers。它提供 5000 多个预训练模型,可用于语义相似度、聚类、分类和检索等任务,也支持图像嵌入。官方资料显示项目在 GitHub 有 15,700+ stars,支持 100+ 种语言。
主要能力
- 生成句子和文本向量,用于计算语义相似度(余弦相似度、点积)。
- 语义搜索:先把语料编码为向量,再对查询编码并检索最相似条目。
- 文本聚类与分类。
- 多语言嵌入,覆盖 100+ 种语言。
- 支持本地运行,无需调用 API,可作为部分商业嵌入 API 的低成本替代。
- 支持批量编码与模型微调。
使用方式 安装:pip install sentence-transformers
基础用法包括加载模型、encode 生成向量,再用 util.cos_sim 或 util.dot_score 计算相似度;语义搜索可用 util.semantic_search 指定 top_k;批量编码可设置 batch_size、show_progress_bar 和 convert_to_tensor。微调时可使用 InputExample 构造训练数据、DataLoader 装载数据,配合 CosineSimilarityLoss 等损失函数调用 model.fit,并用 model.save 保存模型。此外提供与 LangChain(HuggingFaceEmbeddings、Chroma)和 LlamaIndex(HuggingFaceEmbedding、VectorStoreIndex)的集成示例。
常用模型
- 通用:all-MiniLM-L6-v2(384 维,快)、all-mpnet-base-v2(768 维,质量更好)、all-roberta-large-v1(1024 维,质量最好但更慢)。
- 多语言:paraphrase-multilingual-MiniLM-L12-v2(50+ 语言)、paraphrase-multilingual-mpnet-base-v2(100+ 语言)。
- 领域专用:法律(nlpaueb/legal-bert-base-uncased)、科学论文(allenai/specter)、代码(microsoft/codebert-base)。
适用场景 需要高质量嵌入的 RAG、语义相似度与搜索、文本聚类与分类、多语言嵌入、本地离线运行嵌入,以及希望控制成本、不依赖 API 的场景。
限制与注意事项 官方建议可先以 all-MiniLM-L6-v2 作为基线;对嵌入做归一化有利于余弦相似度;有 GPU 时可显著加速编码;嵌入计算开销较大,建议缓存结果;针对领域数据微调可提升质量;不同模型在任务上的效果存在差异,需要测试;大模型占用更多内存。资料给出 MiniLM 约 120MB、MPNet 约 420MB、RoBERTa 约 1.3GB 的内存占用参考。项目采用 Apache 2.0 许可。官方资料称,如果确实需要通过 API 获得最高质量,或者需要托管服务,也可以考虑 OpenAI Embeddings、Instructor、Cohere Embed 等替代方案。关于收费与价格,资料暂未提供。