SentenceTransformers介绍

news/2024/11/8 19:58:10/

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.ppmy.cn/news/42775.html

相关文章

Linux学习笔记——多线程

文章目录补充知识Linux线程概念线程的优点线程的缺点线程异常线程用途多进程的应用场景Linux进程VS线程重新理解进程进程和线程线程共享的进程资源和环境为什么线程切换的成本更低进程和线程的关系Linux线程控制POSIX线程库创建线程线程ID及进程地址空间布局线程终止线程等待线…

中国电子学会2022年06月份青少年软件编程Python等级考试试卷四级真题(含答案)

2022-06 Python四级真题 分数:100 题数:38 测试时长:60min 一、单选题(共25题,共50分) 1.有如下Python程序,包含lambda函数,运行该程序后,输出的结果是?(C &#xf…

Maven项目的JDK版本不一致引发的问题

1.运行提示java: 错误: 不支持发行版本 5&#xff08;改成JDK8&#xff09; 2.运行提示java&#xff1a;-source 8 中不支持 instanceof 中的模式匹配(改成JDK17) 解决方案&#xff08;以JDK8为例&#xff09; 1.普通Maven项目 通过指定Maven插件的JDK版本解决 <build>…

Spring Boot异步任务、异步消息

目录 1.异步任务 1.1.概述 1.2.使用 2.异步消息 2.1.概述 2.2.使用 1.异步任务 1.1.概述 举一个例子&#xff0c;我现在有一个网上商城&#xff0c;客户在界面点击下单后&#xff0c;后台需要完成两步&#xff1a; 1.创建客户订单 2.发短信通知客户订单号 这里面第2步…

口语化讲解Spring、Mybatis

前言 本文对Spring、Mybatis相关知识做了一个相对完整的总结&#xff0c;涉及到Spring IOC\DI、Bean、AOP、一二三级缓存、Mybatis运行原理、组件等。特别注意&#xff0c;口语化八股文系列&#xff0c;仅作突击复习核心知识点用&#xff0c;推荐有一定八股基础的人食用&#…

【CSIG图像图形技术挑战赛-开放世界目标检测竞赛】火热报名中!

竞赛名称&#xff1a;开放世界目标检测竞赛/Few Shot&#xff09;主办方: 中国图象图形学学会&#xff08;CSIG&#xff09;合作方: 360集团竞赛目的与意义&#xff1a;目标检测是计算机视觉中的核心任务之一&#xff0c;主要目的是让计算机可以自动识别图片中目标的类别&#…

差速巡线机器人设计-良好(80+)的报告-2023

如何提分&#xff1f;将一篇报告提升20分以上呢&#xff1f;差速巡线机器人设计-及格&#xff08;60&#xff09;的报告-2023_zhangrelay的博客-CSDN博客姓名&#xff1a; 学号&#xff1a; 实践项目1名称&#xff1a;差速巡线机器人设计 60分&#xff1a;缺乏思考、没有对比、…

企业推广常用的网络推广方法有哪些?

网络推广是指通过互联网向目标用户推广产品、服务或品牌的过程&#xff0c;其主要目的是为了扩大业务范围&#xff0c;提高企业知名度&#xff0c;增加销售额。在当今的数字化时代&#xff0c;网络推广已经成为了企业不可或缺的一部分。本文将介绍一些常见的网络推广方法和途径…