当前位置: 首页 > news >正文

SentenceTransformers (SBERT)

文章目录

    • 一、关于 SBERT
      • 特点
      • 预训练模型
      • 应用实例
    • 二、安装
      • 开发设置
    • 三、入门使用
    • 四、训练
    • 五、Cross Encoder


一、关于 SBERT

  • 官方文档:https://www.sbert.net/
  • github : https://github.com/UKPLab/sentence-transformers
  • paper : Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
    https://arxiv.org/abs/1908.10084
  • model library : https://huggingface.co/models?library=sentence-transformers

相关教程/资源

  • 五道口纳什:[sbert 01] sentence-transformers pipeline
    https://www.bilibili.com/video/BV1sK421C7oG/
    课件代码:https://github.com/chunhuizhang/bert_t5_gpt/blob/main/tutorials/sbert-tutorials/sentence-transformers-pipeline.ipynb

Sentence Transformers(又名SBERT)是用于访问、使用和训练最先进的文本和图像嵌入模型的首选Python模块。
它可用于使用 Sentence Transformers 模型计算嵌入(快速入门)或 使用 Cross-Encoder 模型计算相似度分数(快速入门),这解锁了广泛的应用,包括 语义搜索、语义文本相似度 和 释义挖掘。

超过5,000个预训练的Sentence Transformers 模型可供🤗Hugging Face立即使用,包括许多来自大规模文本嵌入基准(MTEB)排行榜的最先进模型。
此外,使用Sentence Transformers 可以轻松训练或微调您自己的模型,使您能够为特定用例创建自定义模型。

Sentence Transformers 由UKPLab创建,由🤗Hugging Face维护。如果有什么东西坏了,或者你有进一步的问题,不要犹豫,在Sentence Transformers 存储库上打开一个问题。


特点

  1. 计算给定文本或图像的固定大小向量表示(嵌入)。
  2. 嵌入计算通常是高效的,嵌入相似度计算非常快。
  3. 适用于广泛的任务,例如语义文本相似度、语义搜索、聚类、分类、释义挖掘等。
  4. 通常用作两步检索过程中的第一步,其中使用跨编码器(又名reranker)模型对来自双编码器的top-k结果进行重新排名。

预训练模型

我们提供了100多种语言的大量预训练模型列表:https://huggingface.co/models?library=sentence-transformers

一些模型是通用模型,而另一些则为特定用例生成嵌入,只需传递模型名称即可加载预训练模型,如:SentenceTransformer('model_name')


应用实例

您可以将此框架用于:

  • 计算句子嵌入
  • 语义文本相似度
  • 语义搜索
  • 检索和重新排名
  • 聚类
  • 释义采矿
  • 翻译句子挖掘
  • 多语言图像搜索、聚类和重复检测

以及更多用例。

有关所有示例,请参见示例/应用程序。


二、安装

我们推荐 Python 3.8+PyTorch 1.11.0+

您可以使用 pip 安装 sentence-transformers:

pip install -U sentence-transformers

使用conda安装

conda install -c conda-forge sentence-transformers

从源代码安装

或者,您也可以从存储库克隆最新版本并直接从源代码安装:

pip install -e .

带有CUDA的PyTorch

如果要使用GPU/CUDA,则必须使用匹配的CUDA版本安装PyTorch。跟随 PyTorch-START了解如何安装PyTorch的更多详细信息。


开发设置

将repo(或fork)克隆到您的机器后,在虚拟环境中运行:

python -m pip install -e ".[dev]"pre-commit install

要测试您的更改,请运行:

pytest

三、入门使用

使用Sentence Transformers 模型是基本的:

from sentence_transformers import SentenceTransformer# 1. Load a pretrained Sentence Transformer model 
model = SentenceTransformer("all-MiniLM-L6-v2")# The sentences to encode
sentences = ["The weather is lovely today.","It's so sunny outside!","He drove to the stadium.",
]# 2. Calculate embeddings by calling model.encode()
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 384]# 3. Calculate the embedding similarities
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[1.0000, 0.6660, 0.1046],
#         [0.6660, 1.0000, 0.1411],
#         [0.1046, 0.1411, 1.0000]])

使用SentenceTransformer("all-MiniLM-L6-v2")我们选择加载哪个Sentence Transformers 模型。在本例中,我们加载all-MiniLM-L6-v2,这是一个MiniLM模型,在超过10亿训练对的大型数据集上进行微调。

使用 SentenceTransformer.similarity(), 我们计算所有句子对之间的相似度。正如预期的那样,前两句之间的相似度(0.6660)高于第一句和第三句之间的相似度(0.1046)或第二句和第三句之间的相似度(0.1411)。

优化Sentence Transformers 模型很简单,只需要几行代码。有关详细信息,请参阅训练概述部分。


相关文档

  1. SentenceTransformer
  2. SentenceTransformer.encode
  3. SentenceTransformer.similarity

其他有用的方法和链接:

  • SentenceTransformer.similarity_pairwise
  • SentenceTransformer > Usage
  • SentenceTransformer > Pretrained Models
  • SentenceTransformer > Training Overview
  • SentenceTransformer > Dataset Overview
  • SentenceTransformer > Loss Overview
  • SentenceTransformer > Training Examples

四、训练

该框架允许您微调自己的句子嵌入方法,从而获得特定任务的句子嵌入,您有各种选项可供选择,以便为您的特定任务获得完美的句子嵌入。

有关如何训练自己的嵌入模型的介绍,请参阅训练概述。我们提供了如何在各种数据集上训练模型的各种示例。

一些亮点是:

  • 支持各种 Transformer 网络,包括BERT、RoBERTa、XLM-R、DistilBERT、伊莱克特拉、BART、…
  • 多语言多任务学习
  • 训练期间评估以找到最佳模型
  • 20多个损失函数允许专门针对语义搜索、释义挖掘、语义相似度比较、聚类、三元组损失、对比损失等调整模型。

五、Cross Encoder

交叉编码器(又名 reranker)模型的特点:

  1. 计算给定文本对的相似度分数。
  2. 与Sentence Transformers (又名双编码器)模型相比,通常提供卓越的性能。
  3. 通常比Sentence Transformers 模型慢,因为它需要对每对而不是每个文本进行计算。
  4. 由于前面的2个特性,交叉编码器通常用于对Sentence Transformers 模型的top-k结果进行重新排序。

Cross Encoder 模型的用法类似于Sentence Transformers :


from sentence_transformers.cross_encoder import CrossEncoder# 1. Load a pretrained CrossEncoder model
model = CrossEncoder("cross-encoder/stsb-distilroberta-base")# We want to compute the similarity between the query sentence...
query = "A man is eating pasta."# ... and all sentences in the corpus
corpus = ["A man is eating food.","A man is eating a piece of bread.","The girl is carrying a baby.","A man is riding a horse.","A woman is playing violin.","Two men pushed carts through the woods.","A man is riding a white horse on an enclosed ground.","A monkey is playing drums.","A cheetah is running behind its prey.",
]# 2. We rank all sentences in the corpus for the query
ranks = model.rank(query, corpus)# Print the scores
print("Query: ", query)
for rank in ranks:print(f"{rank['score']:.2f}\t{corpus[rank['corpus_id']]}")
"""
Query:  A man is eating pasta.
0.67    A man is eating food.
0.34    A man is eating a piece of bread.
0.08    A man is riding a horse.
0.07    A man is riding a white horse on an enclosed ground.
0.01    The girl is carrying a baby.
0.01    Two men pushed carts through the woods.
0.01    A monkey is playing drums.
0.01    A woman is playing violin.
0.01    A cheetah is running behind its prey.
"""# 3. Alternatively, you can also manually compute the score between two sentences
import numpy as npsentence_combinations = [[query, sentence] for sentence in corpus]
scores = model.predict(sentence_combinations)# Sort the scores in decreasing order to get the corpus indices
ranked_indices = np.argsort(scores)[::-1]
print("Scores:", scores)
print("Indices:", ranked_indices)
"""
Scores: [0.6732372, 0.34102544, 0.00542465, 0.07569341, 0.00525378, 0.00536814, 0.06676237, 0.00534825, 0.00516717]
Indices: [0 1 3 6 2 5 7 4 8]
"""

我们选择加载的CrossEncoder模型 CrossEncoder("cross-encoder/stsb-distilroberta-base")

在本例中,我们加载 cross-encoder/stsb-distilroberta-base ,这是在STS基准数据集上微调的DistilRoBERTa模型。


相关文档

  1. CrossEncoder
  2. CrossEncoder.rank
  3. CrossEncoder.predict

其他有用的方法和链接:

  • CrossEncoder > Usage
  • CrossEncoder > Pretrained Models
  • CrossEncoder > Training Overview
  • CrossEncoder > Dataset Overview
  • CrossEncoder > Loss Overview
  • CrossEncoder > Training Examples

2024-07-19(五)

相关文章:

SentenceTransformers (SBERT)

文章目录 一、关于 SBERT特点预训练模型应用实例 二、安装开发设置 三、入门使用四、训练五、Cross Encoder 一、关于 SBERT 官方文档:https://www.sbert.net/github : https://github.com/UKPLab/sentence-transformerspaper : Sentence-BERT: Sentence Embedding…...

第三届智能机械与人机交互技术学术会议(IHCIT 2024)

【北航主办丨本届SPIE独立出版丨已确认ISSN号】 第三届智能机械与人机交互技术学术会议(IHCIT 2024) 2024 3rd International Conference on Intelligent Mechanical and Human-Computer Interaction Technology 2024年7月27日----中国杭州&#xff0…...

图的访问(C++)

题目描述 给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点。 输入格式 第 1 行 2 个整数 N,M,表示点数和边数。 接下来 M 行,每行 2 个整数 Ui,Vi,表…...

LeetCode做题记录(第二天)169. 多数元素

题目:169. 多数元素 标签:数组 哈希表 分治 计数 排序 题目信息: 思路一: 在题目中出现了计数,那我们就可以直接考虑考虑使用哈希表 unordered_map 即遍历的时候记录每个数的出现次数,当出现次数大于n/…...

Adobe XD中文设置指南:专业设计师的现场解答

Adobe XD是世界领先的在线合作UI设计工具。它摆脱了Sketch、Figma等传统设计软件对设备的依赖,使设计师可以随时随地使用任何设备打开网页浏览器,轻松实现跨平台、跨时空的设计合作。然后,为了提高国内设计师的使用体验,Adobe XD如…...

CentOS 7 安装Jenkins2.346.1(war方式安装)

既然想要安装Jenkins,肯定是先要从官网解读所需环境配置信息,如需了解更多自行查阅 https://www.jenkins.io/doc/book/installing/linux/ JDK17,Maven3.9 安装 先从官网分别下载JDK17与Maven3.9 下载好之后上传至服务器、并解压&#xff1a…...

使用Java -jar运行就jar包时报异常:org.yaml.snakeyaml.error.YAMLException异常

Java运行就 .jar包时出现的 YAMLException 异常 我在本地环境测试时,使用 java -jar 命令运行 Java 可执行 .jar 包时,遇到了 org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 异常;这…...

golang实现的ab测试http代理工具

压测工具ab不能统计http请求的错误情况,包括http状态码错误和响应正文的错误关键字。 所以加层代理用于统计http错误情况,重在统计错误情况,而不是代理的性能,主要用于功能接口的测试,比如测试一下请求多少次接口会返…...

Maven学习——Maven的下载、安装与配置(详细攻略!)

目录 前言 1.下载与安装 2.配置Maven的环境变量 3.配置Maven的本地仓库 4. 配置Maven的镜像远程仓库 前言 我在之前写了一篇博客,是介绍Maven的基本概念和下载安装,但是由于篇幅过长,Maven的下载与安装写的并不详细🐶&#x…...

C#知识|账号管理系统-修改账号按钮功能的实现

哈喽,你好啊,我是雷工! 前边学习了通过选择条件查询账号的功能: 《提交查询按钮事件的编写》 本节继续学习练习C#,今天练习修改账号的功能实现。 以下为学习笔记。 01 实现功能 ①:从查询到的账号中,选择某一账号,然后点击【修改账号】按钮,将选中的信息获取显示到…...

bug等级和优先级

一、bug的等级 1、致命 这类bug是最严重的,通常导致系统无法运行、主要功能失效或严重资源不足。举例包括软件在安装过程中崩溃,导致无法完成安装;登录功能失效,用户无法验证身份进入系统;主要功能模块(如…...

记录|C# winform布局学习

目录 前言一、自适应布局Step1. 添加AutoAdaptWindowsSize类Step2. Form中引用Step3. 创建SizeChanged事件函数Step4. 在Fram.Disiger中添加 更新时间 前言 参考视频: C#5分钟winform快速自适应布局 参考文章: 其他参考: 写这篇文章&#xff…...

C/C++ json库

文章目录 一、介绍1.1 json 介绍 二、C/C json 库选型2.1 选型范围2.2 jsoncpp2.2.2 jsoncpp 编译和交叉编译 2.3 rapidjson2.4 nlohmann/json2.5 sonic-cpp 五、常见问题5.1 jsoncpp 中关于浮点数的控制和中文显示问题5.2 jsoncpp序列化double类型时精度损失问题的解决办法 一…...

C++案例四:简易记事本程序

文章目录 程序介绍代码说明包含必要的头文件主函数定义变量定义主循环显示菜单和读取选择处理用户选择程序介绍 编写一个简单的记事本程序,可以帮助用户添加和查看笔记。这个案例可以练习C++中的输入输出、向量(std::vector)、字符串处理(std::string)、以及简单的控制结…...

【VUE学习】day03-过滤器filter

VUE学习第三天 过滤器filter全局过滤器私有过滤器 过滤器filter 作用:常见的文本格式化使用场景:插值表达式、v-bind用法:{{msg | filterName}} ; v-bind:属性‘msg | filterName’ msg:需要格式化的文本信息(管道符前面的数据&a…...

技术成神之路:设计模式(八)责任链模式

介绍 责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象依次处理请求,避免请求的发送者和接收者之间的显式耦合。该模式通过将多个可能处理请求的对象连接成一条链,并沿着这条链传递请求…...

【Zynq UltraScale+ RFSoC】~~~

Zynq UltraScale RFSoC 系列为 5G 无线和射频级模拟应用引入了颠覆性的集成和架构突破,可直接支持整个 5G sub-6GHz 频段。这个创新系列现已开始批量生产。此设计演示展示了多通道(8T8R 或 16T16R)Zynq UltraScale RFSoC 评估工具工具工具&am…...

STM32之八:IIC通信协议

目录 1. IIC协议简介 1.1 主从模式 1.2 2根通信线 2. IIC协议时序 2.1 起始条件和终止条件 2.2 应答信号 2.3 发送一个字节 2.4 接收一个字节 3. IIC读写操作 3.1 写操作 3.2 读操作 1. IIC协议简介 IIC协议是一个半双工、同步、一主多从、多主多从的串行通用数据总…...

mysql的数据往hive进行上报时怎么保证数据的准确性和一致性

在将MySQL的数据往Hive进行上报时,确保数据的准确性和一致性可以通过下面一系列步骤来实现 一、准备工作 环境配置: 确保MySQL和Hive环境已经安装并配置好,且都处于可运行状态。检查Hadoop集群(Hive通常运行在Hadoop之上&#x…...

问题:4、商业保险与政策性保险的主要不同之处是:经营主体不同、经营目标不同、承保机制不同。 #学习方法#其他#学习方法

问题:4、商业保险与政策性保险的主要不同之处是:经营主体不同、经营目标不同、承保机制不同。 参考答案如图所示...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...