Python sentence-transformers库示例详解

 更新时间:2025年08月28日 15:28:36   作者:音程  
Sentence Transformer是一个Python框架,用于句子、文本和图像嵌入Embedding,它基于Transformer架构的预训练模型,并在大量语义相似性数据上进行了微调,能够捕捉句子之间的深层语义关系,本文给大家介绍Python sentence-transformers库的相关知识,感兴趣的朋友一起看看吧

sentence-transformers 是一个非常流行的 Python 库,专门用于将文本(句子、段落、文档)转换为高质量的语义向量(嵌入)。它基于 Transformer 架构(如 BERT、RoBERTa、DistilBERT 等) 的预训练模型,并在大量语义相似性数据上进行了微调,能够捕捉句子之间的深层语义关系。

📦 什么是sentence-transformers?

  • 项目地址:https://www.sbert.net/
  • 作者:Nils Reimers 和 Iryna Gurevych(德国达姆施塔特工业大学)
  • 主要功能
    • 将文本转化为稠密向量(sentence embeddings)
    • 支持多种语言
    • 支持多任务学习和跨语言检索
  • 底层依赖:基于 PyTorch 和 HuggingFace Transformers

🧠 主要用途

场景描述
文本相似度计算判断两个句子是否语义相似(例如问答系统中的答案匹配)
聚类对大量文本进行自动聚类(如新闻分类、评论分组)
信息检索基于语义的搜索,而非关键词匹配
语义搜索 / 向量数据库结合 FAISS、Annoy 等库构建高效的语义搜索引擎
无监督/弱监督学习在没有标签的情况下提取语义特征进行下游任务

🚀 安装方式

pip install sentence-transformers

⚠️ 注意:安装前确保你已经安装了 PyTorch,否则可以使用 torch extra:

pip install sentence-transformers[torch]

🧪 使用示例

示例1:加载模型并编码句子

from sentence_transformers import SentenceTransformer
# 加载预训练模型(首次运行会自动下载)
model = SentenceTransformer('all-MiniLM-L6-v2')
# 待编码的句子
sentences = [
    "这是一个示例句子。",
    "另一个句子用来测试。",
    "这两句话看起来不太一样。"
]
# 编码成向量(每个句子变成一个固定维度的向量,如 384 维)
embeddings = model.encode(sentences)
print(embeddings.shape)  # (3, 384)

示例2:计算两个句子之间的余弦相似度

from sklearn.metrics.pairwise import cosine_similarity
# 计算相似度矩阵
similarity_matrix = cosine_similarity(embeddings)
print(similarity_matrix)

输出是一个 3x3 的矩阵,显示每对句子之间的语义相似度(值范围在 [0, 1] 之间)。

示例3:使用 GPU 加速推理

import torch
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model.to(device)
embeddings = model.encode(sentences, device=device)

🌐 支持的模型(推荐)

你可以从 HuggingFace Model Hub 上选择不同类型的模型,以下是几个常用的:

模型名称特点
all-MiniLM-L6-v2轻量级,速度快,适合大多数通用任务
paraphrase-MiniLM-L3-v2更小,适合资源受限环境
all-mpnet-base-v2高性能版本,效果更好但稍慢
multi-qa-mpnet-base-dot-v1适用于问答、检索任务
distiluse-base-multilingual-cased-v1支持 50+ 种语言,适合多语言场景
LaBSE支持 109 种语言,适合跨语言检索

🛠️ 自定义训练模型(进阶)

如果你有自己的语义匹配任务(如问答、对话理解),可以使用 sentence-transformers 提供的训练框架进行 fine-tune:

from sentence_transformers import SentenceTransformer, InputExample, losses
from torch.utils.data import DataLoader
# 构建训练样本
train_examples = [
    InputExample(texts=["春天来了", "天气变暖了"], label=0.8),
    InputExample(texts=["我爱中国", "我是中国人"], label=0.9),
    ...
]
# 创建数据加载器
train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=16)
# 加载模型
model = SentenceTransformer('bert-base-chinese')
# 使用余弦相似度损失函数
train_loss = losses.CosineSimilarityLoss(model)
# 开始训练
model.fit(
    train_objectives=[(train_dataloader, train_loss)],
    epochs=3,
    output_path='./my_model/'
)

🔍 常见结合使用的库

库名作用
faiss快速构建高维向量索引,用于语义搜索
annoy近似最近邻搜索,适合内存有限的设备
pandas处理大规模文本数据
transformers获取原始 Transformer 模型
scikit-learn聚类、降维等后处理

✅ 总结

功能描述
中文支持✔️(需使用中文预训练模型)
多语言支持✔️(部分模型支持 50~109 种语言)
易用性✔️(API 简洁清晰)
可扩展性✔️(可自定义训练、结合其他库)
推荐应用场景语义搜索、文本聚类、相似度判断、信息检索

如果你正在做以下工作,建议使用 sentence-transformers

  • 想要做语义级别的文本匹配
  • 不想手动写特征工程
  • 想快速部署一个语义搜索引擎
  • 想要在无标签情况下做文本聚类分析

到此这篇关于Python sentence-transformers库的文章就介绍到这了,更多相关Python sentence-transformers内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python遍历目录下文件、读取、千万条数据合并详情

    Python遍历目录下文件、读取、千万条数据合并详情

    这篇文章主要介绍了Python遍历目录下文件、读取、千万条数据合并详情,对文件夹和文件进行属性判断,首先对文件夹进行遍历,看文件夹里有什么样的文件,读取出文件夹中的所有文件,下面文章将详细介绍该内容,需要的小伙伴可以参考一下
    2022-01-01
  • python 测试实现方法

    python 测试实现方法

    使用python进行测试也足够简明了
    2008-12-12
  • Python数据结构之Array用法实例

    Python数据结构之Array用法实例

    这篇文章主要介绍了Python数据结构之Array用法实例,较为详细的讲述了Array的常见用法,具有很好的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • Python数据结构列表

    Python数据结构列表

    这篇文章主要介绍了Python数据结构列表,本文重点内容主要是对列表数据结构的使用,在Python中,序列是一组按顺序排列的值。Python 有 3 种内置的序列类型:字符串、 元组和列表,下面一起进入文章了解更详细内容吧,需要的小伙伴可以参考一下</P><P>
    2021-12-12
  • Django框架用户注销功能实现方法分析

    Django框架用户注销功能实现方法分析

    这篇文章主要介绍了Django框架用户注销功能实现方法,结合实例形式分析了基于Django框架的删除cookie实现用户注销功能的相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • python批量导入数据进Elasticsearch的实例

    python批量导入数据进Elasticsearch的实例

    今天小编就为大家分享一篇python批量导入数据进Elasticsearch的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python sqlobject(mysql)中文乱码解决方法

    python sqlobject(mysql)中文乱码解决方法

    在使用python写项目的时候,用到了sqlobject库函数connectionForURI连接mysql,但是遇到了中文显示乱码的问题,在添加记录的时候还抛出异常
    2008-11-11
  • Python使用Matplotlib绘制散点趋势线的代码详解

    Python使用Matplotlib绘制散点趋势线的代码详解

    Matplotlib是一个用于数据可视化的强大Python库,其基本功能之一是创建带有趋势线的散点图,散点图对于可视化变量之间的关系非常有用,本文将指导您使用Matplotlib绘制散点趋势线的过程,涵盖线性和多项式趋势线,需要的朋友可以参考下
    2025-01-01
  • Python如何定义有默认参数的函数

    Python如何定义有默认参数的函数

    这篇文章主要介绍了Python如何定义有默认参数的函数,帮助大家更好的理解和学习Python,感兴趣的朋友可以了解下
    2020-08-08
  • 详解在Python程序中使用Cookie的教程

    详解在Python程序中使用Cookie的教程

    这篇文章主要介绍了详解在Python程序中使用Cookie的教程,Cookie在无论哪种语言的网络编程学习当中都是重要的知识点,需要的朋友可以参考下
    2015-04-04

最新评论