快速搭建sentence_transformer方法

sentence transformer模型可以将句子进行Embedding。这里使用docker快速构建一个sentence transformer环境,小试牛刀。

准备镜像

这里Docker的安装就不介绍了,我们使用Dockerfile来构建我们的镜像,Dockerfile内容如下:

FROM python:3.10-slimWORKDIR /appRUN pip install transformers \&& pip3 install torch --index-url https://download.pytorch.org/whl/cpu \&& pip install sentence-transformers \&& pip install Flask

Dockerfile里面的内容很简单,主要是安装pytorch以及sentence-transformers

构建镜像:docker build -t ddy_sentence_transformer .

下载模型

在官网https://www.sbert.net/的介绍中,通过下面的方式使用模型,如果模型不存在,则会自动下载:

from sentence_transformers import SentenceTransformermodel = SentenceTransformer("hkunlp/instructor-large")

然而在使用的过程中,发现根本下载不下来,因此使用离线的方式下载模型,在https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/中,找到我们需要的模型然后下载。

这里我们使用较小的模型,distiluse-base-multilingual-cased-v1.zip,模型支持中文。

将模型进行解压,得到:0_Transformer 1_Pooling 2_Dense config.json modules.json

构建一个简单的demo

新建一个main.py用于测试sentence_transformer:

from flask import Flask, request, jsonify
from sentence_transformers import SentenceTransformer, utilapp = Flask(__name__)
model = SentenceTransformer('/app/distiluse-base-multilingual-cased-v1')def encode_text(texts):    # Encode the texts and convert to listembeddings = model.encode(texts, convert_to_tensor=True, show_progress_bar=False)embeddings_list = embeddings.tolist()return embeddings_list@app.route('/cal_distance', methods=['POST'])
def cal_distance():params = request.jsonsentence_1 = params['sentence_1']sentence_2 = params['sentence_2']embedding_1 = encode_text([sentence_1])[0]embedding_2 = encode_text([sentence_2])[0]distance = util.pytorch_cos_sim(embedding_1, embedding_2)print('sentence_1:', sentence_1, '|| sentence_2:' , sentence_2 , '===distance:', distance)return jsonify({'status': 'ok'})
if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

程序的主要作用就是判断两句话的相似度

运行程序

docker run \-p 5000:5000 \-v /home/my_user/lib/ddy/sentence_transformer/distiluse-base-multilingual-cased-v1/:/app/distiluse-base-multilingual-cased-v1/ \-v /home/my_user/lib/ddy/sentence_transformer/code/main.py:/app/ \--name ddy \ddy_sentence_transformer \python -u main.py

测试

data = {"sentence_1": '教师', "sentence_2": '老师'}
requests.post('http://10.26.120.58:5000/cal_distance', json=data)

可以看出程序的输出结果:

sentence_1: 教师 || sentence_2: 老师 ===distance: tensor([[0.9625]])

可以看出来相似性还挺高的。

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

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

相关文章

pytorch——猫狗识别

猫狗识别 训练模型导入需要的包数据加载数据预处理加载数据集并返回对应的图像和标签提取标签信息创建训练和测试的数据加载器图像分类CNN的卷积神经网络模型MYVGG的卷积神经网络模型AlexNet的卷积神经网络模型 训练过程测试过程定义了一个主函数 测试模型导入需要的库加载之前…

无线模块应用晶振SG5032VAN

随着物联网(IoT)和无线通信技术的迅速发展,无线模块已经成为各种智能设备的重要组成部分。在无线模块中,选择高性能的时钟源对于确保系统的稳定性和可靠性至关重要。爱普生SG5032VAN是一款LVDS差分晶振,作为一款高性能…

WINUI——Behavior(行为)小结

前言 在使用MVVM进行WINUI或WPF开发时,Command在某些时候并不能满足逻辑与UI分离的要求。这时肯定就需要其它技术的支持,Behavior就是一种。在WPF中是有Behavior直接支持的,转到WINUI后,相对有一些麻烦,于是在此记录之…

Enscape 4.1.0 软件安装教程+离线资源库

软件介绍 Enscape 是专门为建筑、规划、景观及室内设计师打造的渲染产品,无需导入导出文件,在常用的软件内部即可看到逼真的渲染效果。 你无需了解记忆各种参数的用法,一切都是傻瓜式的一键渲染,你可以把精力更多地投入到设计中…

归并排序——二路归并排序

目录 1、简述 2、复杂度 3、稳定性 4、例子 1、简述 二路归并排序(Merge Sort)是一种基于分治法的排序算法,通过将数组递归地拆分成两部分,分别排序后再合并,从而实现整个数组的有序。二路归并排序具有稳定性和高…

ElementUI之el-tooltip显示多行内容

ElementUI之el-tooltip显示多行内容 文章目录 ElementUI之el-tooltip显示多行内容1. 多行文本实现2. 实现代码3. 展示效果 1. 多行文本实现 展示多行文本或者是设置文本内容的格式,使用具名 slot 分发content,替代tooltip中的content属性。 2. 实现代码 …

Sui主网升级至V1.26.2版本

Sui主网现已升级至V1.26.2版本,同时Sui协议升级至48版本。 其他升级要点如下所示: 协议 #17881 Sui原生随机性功能现在已在测试网启用。 索引器 #17649 JSON-RPC:现在JSON-RPC在查询时将返回正确的币种元数据和总供应量信息。 索引器…

【图像处理与机器视觉】灰度变化与空间滤波

基础 空间域与变换域 空间域:认为是图像本身,对于空间域的操作就是对图像中的像素直接进行修改 变换域:变换系数处理,不直接对于图像的像素进行处理 邻域 图像中某点的邻域被认为是包含该点的小区域,也被称为窗口 …

在IDEA中使用Git在将多次commit合并为一次commit

案例: 我想要将master分支中的 测试一、测试二、测试三三次commit合并为一次commit 1. 点击Git 2. 双击点击commit所在的分支 3. 右键要合并的多个commit中的第一次提交的commit 4. 点击右键后弹出的菜单中的Interactively Rebase From Here选项 5. 点击测试二…

常用Linux命令的具体使用示例

文件操作类: ls -l: 列出当前目录下所有文件和目录的详细信息。cd /home: 切换到/home目录。pwd: 显示当前工作目录的完整路径。cp source.txt destination.txt: 将source.txt文件复制到destination.txt。mv oldname.txt newname.txt: 将文件oldname.txt重命名为ne…

MySQL排序操作

025排序操作 select .. from .. order by 字段 asc/descselect empno, ename, sal from emp order by sal asc;asc 不写的话,默认升序 多个字段排序 查询员工的编号、姓名、薪资,按照薪资升序排列,如果薪资相同的,再按照姓名升…

二叉树的顺序结构(堆的实现)

前言 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。 现实中我们通常把堆 ( 一种二叉树 ) 使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事&…

问题:8255A的端口A工作在方式2时,使用端口C的______作为与CPU和外部设备的联络信号。 #媒体#经验分享#其他

问题:8255A的端口A工作在方式2时,使用端口C的______作为与CPU和外部设备的联络信号。 参考答案如图所示

邮件安全证书,保障通信安全的必备利器

在数字通信日益普及的今天,电子邮件的安全性越来越受到人们的关注。邮件安全证书,作为保障邮件通信安全的重要工具,逐渐走进了大众的视野。本文将为大家揭秘邮件安全证书,解答关于它的常见问题,帮助大家更好地了解和使…

学习好困-合理调整下

学习时感到困倦是一种常见现象,可能由多种因素引起,如环境、身体状况、学习方法等。以下是一些原因及其解决方法: 可能的原因 环境因素: - 光线不足:昏暗的环境容易让人感到疲倦。 - 空气不流通:缺乏…

浮点数的精度和精度丢失,如何规避,有简单操作

在日常工作中,如果做财务软件相关肯定会遇到这种问题,凭证金额表面上看是相等的,但程序运算出的结果却是FALSE。 例如:验证凭证金额借方总金额是否等于贷方总金额? 直接sum(借方分录金额1.1借方分录金额2.…

RK3568技术笔记之一 RK3568总体介绍

RK3568是瑞芯微开发出一款很好用的芯片。我先把ROCKCHIP的原厂信息搬过来看看。 首先声明一下,这篇文章里的资讯版权归瑞芯微电子股份有限公司。毕竟是我转过来的嘛。 我自己的心得,版权就归我啦。 主要特性 Quad-core Cortex-A55 up to 2.0GHzMali-G…

认识HTTP状态码(status code)

目录 1、200 OK(访问成功)👇 2、404 Not Found (没有找到资源)👇 3、403 Forbidden (访问拒绝)👇 4、405 Method Not Allowed👇 6、504 Gateway Timeout…

CV Method:经典CNN Backbone总结

文章目录 前言一、ResNet二、ResNeXt三、Res2Net四、SeNet五、ResNeSt六、DenseNet七、CSPNetPytorch Model Code总结 前言 Backbone作为一切深度学习任务的基础,不论是理论还是实际应用都有重要的意义,本文针对经典Backbone进行总结,这些Ba…

[word] word怎样转换成pdf #职场发展#经验分享#职场发展

word怎样转换成pdf word怎样转换成pdf?word格式是办公中常会用到的格式,word格式编辑好了要想转换成pdf格式再来传输的话需要怎么操作呢?小编这就给大家分享下操作方法,一起来学习下吧! 1、安装得力PDF转换器&#x…