SentenceTransformers介绍

news2025/1/12 15:47:30

SentenceTransformer使用范例

1使用SentenceTransformers获得句子向量嵌入

from sentence_transformers import SentenceTransformer

#模型下载
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')

# 编码句子
sentences = ['Python is an interpreted high-level general-purpose programming language.',
    'Python is dynamically-typed and garbage-collected.',
    'The quick brown fox jumps over the lazy dog.']

# 获得句子嵌入向量
embeddings = model.encode(sentences)

# 打印嵌入向量
for sentence, embedding in zip(sentences, embeddings):
    print("Sentence:", sentence)
    print("Embedding:", embedding)
    print("")
# Sentence: Python is an interpreted high-level general-purpose programming language.
# Embedding: [-1.17965914e-01 -4.57159936e-01 -5.87313235e-01 -2.72477478e-01 ...
# ...

2计算句子或者词语的余弦相似度

  • 余弦相似度(Cosine Similarity)是n维空间中两个n维向量之间角度的余弦。它等于两个向量的点积(向量积)除以两个向量长度(或大小)的乘积。

在这里插入图片描述

取值范围为[-1:1],取值为-1表示完全不相似,取值为1表示完全相似


from sentence_transformers import SentenceTransformer, util

# 加载模型
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')

# 句子
sentences = ['Python is an interpreted high-level general-purpose programming language.',
    'Python is dynamically-typed and garbage-collected.',
    'The quick brown fox jumps over the lazy dog.']

# 讲语句进行向量编码
embeddings = model.encode(sentences)

# 计算相似度
sim = util.cos_sim(embeddings[0], embeddings[1])
print("{0:.4f}".format(sim.tolist()[0][0])) # 0.6445
sim = util.cos_sim(embeddings[0], embeddings[2])
print("{0:.4f}".format(sim.tolist()[0][0])) # 0.0365

3语义搜索

语义搜索通过理解搜索查询的内容来提高搜索的准确性,而不是仅仅依赖于词汇匹配。这是利用嵌入之间的相似性完成的。

语义搜索是将语料库中的所有条目嵌入到向量空间中。在搜索时,查询也会被嵌入到相同的向量空间中,并从语料库中找到最接近的嵌入。

请添加图片描述
语料库中文档的插入和查询的嵌入

# 下载模型
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')

# Corpus of documents and their embeddings
corpus = ['Python is an interpreted high-level general-purpose programming language.',
    'Python is dynamically-typed and garbage-collected.',
    'The quick brown fox jumps over the lazy dog.']
corpus_embeddings = model.encode(corpus)

# Queries and their embeddings
queries = ["What is Python?", "What did the fox do?"]
queries_embeddings = model.encode(queries)

# Find the top-2 corpus documents matching each query
hits = util.semantic_search(queries_embeddings, corpus_embeddings, top_k=2)

# Print results of first query
print(f"Query: {queries[0]}")
for hit in hits[0]:
    print(corpus[hit['corpus_id']], "(Score: {:.4f})".format(hit['score']))
# Query: What is Python?
# Python is an interpreted high-level general-purpose programming language. (Score: 0.6759)
# Python is dynamically-typed and garbage-collected. (Score: 0.6219)

# Print results of second query
print(f"Query: {queries[1]}")
for hit in hits[1]:
    print(corpus[hit['corpus_id']], "(Score: {:.4f})".format(hit['score']))
# Query: What did the fox do?
# The quick brown fox jumps over the lazy dog. (Score: 0.3816)
# Python is dynamically-typed and garbage-collected. (Score: 0.0713)

为了充分利用语义搜索,必须区分对称和非对称语义搜索,因为它会严重影响要使用的模型的选择。

文章参考:
5分钟 NLP系列 — SentenceTransformers 库介绍
Sentence Transformer官网

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

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

相关文章

JavaScript【五】JavaScript中的对象

文章目录🌟前言🌟对象:🌟声明对象:🌟隐式创建对象:🌟实例化Object:🌟实例化自定义构造函数:(会重复占用内存)🌟new运算符具体做了什么…

自动内存管理之【常量池】

首先上一段代码,一起思考,打印的结果,基于jdk1.8。 StringBuilder sbnew StringBuilder("我爱我媳妇儿");String s sb.toString();System.out.println(s.intern()s); //falsesb.append(",她也很爱我!&…

C++——入门讲解

作者&#xff1a;几冬雪来 时间&#xff1a;2023年4月16日 内容&#xff1a;C入门讲解 目录 前言&#xff1a; 1.什么是C&#xff1a; 2.C关键字&#xff1a; 3.命名冲突&#xff1a; 4.域和::操作符&#xff1a; 5.std内容讲解&#xff1a; 6.<<符&#xff1a…

STM32F4_独立看门狗详解(IWDG)

目录 1. 独立看门狗是什么 2. 独立看门狗 IWDG简介 3. 独立看门狗的主要特性 4. 独立看门狗功能 4.1 独立看门狗功能框图 4.2 IWDG寄存器 4.2.1 关键字寄存器 IWDG_KR 4.2.2 预分频器寄存器 IWDG_PR 4.2.3 重载寄存器 IWDG_RLR 4.2.4 状态寄存器 IWDG_SR 5. 库函数…

OpenCV实战之人脸美颜美型(六)——磨皮

1.需求分析 有个词叫做“肤若凝脂”,直译为皮肤像凝固的油脂,形容皮肤洁白且光润,这是对美女的一种通用评价。实际生活中我们的皮肤多少会有一些毛孔、斑点等表现,在观感上与上述的“光润感”相反,因此磨皮也成为美颜算法中的一项基础且重要的功能。让皮肤变得更加光润,就…

interface陷阱

A1 interface Duck Typing: 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子&#xff0c;那么这只鸟就可以被称为鸭子 目的: 在 Go 中&#xff0c;Interface&#xff08;接口&#xff09;只是一组方法集合。描述事物的外部行为而非内部结构。 通过接口实现多态的概…

微服务架构——SpringCloud快速入门

认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 单体架构 将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署。 优点&#…

如何保证缓存和数据库的数据一致性

文章目录1、错误的解决方案1.1、 先更新数据库&#xff0c;再删除缓存1.2、 先更新数据库&#xff0c;再更新缓存1.3、 先删除缓存&#xff0c;再更新数据库1.4、 先更新缓存&#xff0c;再更新数据库2、正确的解决方案2.1、使用 CAS2.2、使用分布式锁2.3、使用消息队列异步更新…

字符串匹配—KMP算法

字符串匹配的应用非常广泛&#xff0c;例如在搜索引擎中&#xff0c;我们通过键入一些关键字就可以得到相关的搜索结果&#xff0c;搜索引擎在这个过程中就使用字符串匹配算法&#xff0c;它通过在资源中匹配关键字&#xff0c;最后给出符合条件的搜索结果。并且我们在使用计算…

SpringBoot解决用户重复提交订单(方式三:通过Redis实现-升级版)

文章目录前言1、方案实践1.1、引入Redis依赖1.2、添加Redis环境配置1.3、编写服务验证逻辑&#xff0c;通过 aop 代理方式实现1.4、在相关的业务接口上&#xff0c;增加SubmitLimit注解即可2、小结前言 在上一篇文章中&#xff0c;我们详细的介绍了随着下单流量逐渐上升&#…

【PyTorch】第二节:梯度的求解

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;PyTorch 描述&#x1f3a8;&#xff1a;PyTorch 是一个基于 Torch 的 Python 开源机器学习库。 寄语&#x1f493;&#xff1a;&#x1f43e;没有白走的路&#xff0c;每一步都算数&#…

python提取多个pdf特定页,并合并为新pdf文件

文章目录1&#xff0c;代码结构2&#xff0c;代码详解2.1&#xff0c;将范围字符串转成list2.2&#xff0c;获取pdf文件特定页2.3&#xff0c;将pdf页list合并为pdf文件并保存2.4&#xff0c;遍历所有要合并的文件&#xff0c;进行合并2.5&#xff0c;给出要合并的pdf文件及范围…

大模型学习

大模型学习计算机视觉方向ViTImage Token EmbeddingMulti-head Self-attentionStable Diffusionstable diffusion支持功能stable diffusion整体结构ClipText如何训练图像信息创建器&#xff08;Image information creator&#xff09;自动编码解码器&#xff08;降噪绘制图形&a…

One Note插件——gem for onenote的安装

文章目录一、前言二、报错原因三、解决方法一、前言 平时写笔记都是用的OneNote来记录&#xff0c;但是Onenote没有 Markdown编辑器 ,写起来很不方便&#xff0c;搜索了解后知道gem for OneNote这个插件&#xff0c;于是下载安装了&#xff0c;但是插件每次都要手动勾选&#…

什么是小程序SDK?安全吗?

前面分享了很多小程序相关的内容&#xff0c;常常提到小程序SDK的概念&#xff0c;但似乎有很多小伙伴不是很理解&#xff0c;今天就来跟大家聊聊小程序SDK。 什么是小程序SDK&#xff1f; 小程序SDK是一种开发工具包&#xff0c;用于开发和构建小程序应用程序。它提供了一系列…

【thingsboard+chirpstack 下行数据通信测试】

这里写目录标题 7. 节点未收到 tb 平台下发数据原因分析7.1 收到的size为07.2 节点收不到数据7.3 可以收到数据的一组例子7.4 节点没收到数据原因分析本文主要描述 tb 下发的数据,节点接收不到原因分析。 主要是数据格式以及解析脚本的对应关系 7. 节点未收到 tb 平台下发数据…

Golang数据类型比较

直接使用比较的情况 分类说明是否能比较说明基本类型整型&#xff08; int/uint/int8/uint8/int16/uint16/int32/uint32/int64/uint64/byte/rune等&#xff09;浮点数&#xff08; float32/float64&#xff09;复数类型&#xff08; complex64/complex128&#xff09;字符串&a…

《Vue3实战》 第一章 nods/npm安装、配置

1、nods.js安装&#xff08;Windows&#xff09; 1.1、下载并安装node https://nodejs.org/en/ , 安装到d盘nodejs目录 1.2、配置环境变量 path配置 1.3、配置全局包存放目录和缓存目录 在根目录下创建node_global&#xff08;全局包存放目录&#xff09;和node_cache&…

关于药物|新药|药品市场调研报告(实操资料分享)

药品市场调研报告是指对药品行业进行详细的市场情况研究和分析。往往伴随着药品市场调研目的地不同&#xff0c;如战略探索、新药开发、投资决策等&#xff0c;报告编辑的内容要点要求也不一样。但总的核心要点内容笔者已提炼&#xff0c;如下&#xff1a; 一、药品市场调研报告…

DeePMD-kit 配置环境备忘

版本 Conda Conda是一个开源的包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖项&#xff0c;并在它们之间轻松切换。它可以在Linux、OS X和Windows上运行&#xff0c;是为Python程序创建的&#xff0c;但可以打包和分发任何软件。 conda enactivatec…