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 torchdevice = '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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86952.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《聚类算法》入门--大白话篇:像整理房间一样给数据分类

一、什么是聚类算法? 想象一下你的衣柜里堆满了衣服,但你不想一件件整理。聚类算法就像一个聪明的助手,它能自动帮你把衣服分成几堆:T恤放一堆、裤子放一堆、外套放一堆。它通过观察衣服的颜色、大小、款式这些特征,把…

AutoGen(五) Human-in-the-Loop(人类在环)实战与进阶:多智能体协作与Web交互全流程(附代码)

AutoGen Human-in-the-Loop(人类在环)实战与进阶:多智能体协作与Web交互全流程(附代码) 引言:AI自动化的极限与人类参与的价值 在大模型(LLM)驱动的AI应用开发中,完全自…

并查集 Union-Find

目录 引言 简单介绍 浅浅总结 算法图解 初始化 根节点查找 集合合并 连通性检查 例题 大概思路 完整代码: 引言 一个小小的并查集让我们在ccpc卡了那么久(还有unordered_map,如果不是忘了map自动排序这么一回事也不至于试那么多发),至今仍然心有…

书籍在行列都排好序的矩阵中找数(8)0626

题目: 给定一个有N*M的整型矩阵matrix和一个整数K,matrix的每一行和每一列都是排好序的。实现一个函数,判断K是否在matrix中。 0 1 2 5 2 3 4 7 4 4 4 8 5 …

深度学习04 卷积神经网络CNN

卷积神经网络与人工神经网络关系与区别 概念 卷积神经网络(Convolutional Neural Network, CNN)是人工神经网络(Artificial Neural Network, ANN)的一种特殊形式,两者在核心思想和基础结构上存在关联,但在…

vue基础之组件通信(VUE3)

文章目录 前言一、父子组件通信1.父组件向子组件通信2.子组件向父组件通信3.ref父组件直接操作子组件通信。 二、跨代通信1. 跨层级通信2.事件总线通信 总结 前言 vue3的组件通信和vue2相比在语法上会有些差距,且vue3有的通信方式也在功能上比vue2更加完善&#xf…

【RidgeUI AI+系列】中文重复统计器

中文重复统计器 文字重复统计是一个使用文本处理工具, 输入文本内容并指定最小词长度后, 就能自动高亮显示重复的词。 本教程将会借助AI实现这个应用的开发 页面脚本编写 该工具的基础流程较为清晰:用户输入一段文字后,调用提取…

代码随想录|图论|05岛屿数量(深搜DFS)

leetcode:99. 岛屿数量 题目 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均…

数据结构-第二节-堆栈与队列

一、概念: 堆栈与队列也是线性表,但是: 堆栈:只能在一个端进行插入删除,此端称为栈顶。(特点:后来居上) 队列:在一端进行插入(队尾)&#xff0…

HarmonyNext动画大全02-显式动画

HarmonyOS NEXT显式动画详解 1. 核心接口 显式动画通过animateTo接口实现,主要特点包括: 触发方式:需主动调用接口触发动画 参数配置 : animateTo({duration: 1000, // 动画时长(ms)curve: Curve.Ease, // 动画曲线delay: 200…

芯谷科技--高压降压型 DC-DC 转换器D7005

在当今电子设备日益复杂且对电源性能要求极高的背景下,一款高效、稳定的电源管理芯片至关重要。 D7005凭借其卓越的性能和广泛的应用适配性,成为众多工程师在设计电源方案时的优选。 产品简介 D7005 是一款高效、高压降压型 DC-DC 转换器,具…

MySQL的GTID详解

GTID(Global Transaction Identifier,全局事务标识符)是MySQL 5.6及以上版本引入的重要特性,用于在主从复制环境中唯一标识每个事务,简化复制管理、故障转移和数据一致性维护。以下从多维度详细介绍GTID: …

专题:2025中国游戏科技发展研究报告|附130+份报告PDF、原数据表汇总下载

原文链接:https://tecdat.cn/?p42756 本报告汇总解读基于艾瑞咨询《2025中国游戏科技发展白皮书》、伽马数据《2025年1-3月中国游戏产业季度报告》、嘉世咨询《2025中国单机游戏市场现状报告》等多份行业研报数据。当《黑神话:悟空》以虚幻引擎5复刻东…

【数据挖掘】数据挖掘综合案例—银行精准营销

要求: 1、根据相关的信息预测通过电话推销,用户是否会在银行进行存款 2、数据bank.csv,约4520条数据,17个属性值 提示: 17个属性,分别是年龄,工作类型,婚姻状况,受教育…

postgresql查看锁的sql语句

发现一个查看postgresql锁比较好的sql语句,参考链接地址如下 链接地址 查看锁等待sql witht_wait as(select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.trans…

JSON 格式详解

JSON 格式详解 随着互联网的发展和各种 Web 应用程序的普及,数据交换已经成为了我们日常开发中的重要环节。而在各种数据交换格式中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁、易于阅…

原型设计Axure RP网盘资源下载与安装教程共享

对于初学者来说,我们熟悉一下其定义:‌Axure RP是一款常用的快速原型设计工具‌,主要用于创建应用软件或Web网站的线框图、流程图、原型和规格说明文档,广泛应用于产品经理、UI/UX设计师等专业领域。‌‌ 主要用户群体&#xff1…

iframe嵌套 redirect中转页面 route跳转

需求是项目A要使用iframe内嵌项目B的页面, 由于需要嵌套的页面很多,每个页面路径和参数又各不相同, 所以我们在项目B里做了一个中转页面,这样就能自己掌控项目A传递过来的东西了; routes.js 增加一个菜单:…

IP数据报 封装成 MAC帧 ( 目的MAC地址6B 源MAC地址6B 类型2B 数据部分 FCS校验和4B )

将 IP 数据报(Internet Protocol Datagram)封装成 MAC 帧 需要在数据链路层添加适当的头部信息,以便在局域网内进行传输。这个过程涉及将网络层(IP 层)的数据通过数据链路层(MAC 层)封装成适合物…

Note2.4 机器学习:Batch Normalization Introduction

Batch Normalization(批标准化,BN)通过标准化数据的操作,使得损失函数的优化地形(optimization landscape)更加平滑,从而达到更好地训练效果。BN常用于卷积神经网络(CNN)…