当前位置: 首页 > 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、商业保险与政策性保险的主要不同之处是:经营主体不同、经营目标不同、承保机制不同。 参考答案如图所示...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...