simbertmilvus实现相似句检索

news2024/12/23 5:30:08

       朋友们,simbert模型是一个较好的相似句检索模型,但是在大规模检索中,需要实现快速检索,这个时候离不开milvus等向量检索库,下面用实际代码来讲一下simbert之milvus应用。 

import numpy as np
from bert4keras.backend import keras, K
from bert4keras.models import build_transformer_model
from bert4keras.tokenizers import Tokenizer
import tensorflow as tf
from openapi_server.models.sentence_schema import SentenceSchema
from openapi_server.models.QaVecSchema import QaVecSchema
import connexion
from mysql_tool.connection import DBHelper
from config.loadconfig import get_logger
from milvus import Milvus, IndexType, MetricType, Status
import random
from bert4keras.snippets import sequence_padding
from apscheduler.schedulers.background import BackgroundScheduler
import datetime
import os

 

logger = get_logger(__name__)
global graph
graph = tf.get_default_graph()
sess = keras.backend.get_session()
# 获取绝对目录上上级目录
upper2path = os.path.abspath(os.path.join(os.getcwd()))
# bert配置
config_path =   "/Users/Downloads/data/model/chinese_simbert_L-6_H-384_A-12/bert_config.json"
checkpoint_path =  "/Users/Downloads/data/model/chinese_simbert_L-6_H-384_A-12/bert_model.ckpt"
dict_path =  "/Users/Downloads/data/model/chinese_simbert_L-6_H-384_A-12/vocab.txt"
# 建立分词器
tokenizer = Tokenizer(dict_path, do_lower_case=True)

 

# 建立加载模型
bert = build_transformer_model(
    config_path,
    checkpoint_path,
    with_pool='linear',
    application='unilm',
    return_keras_model=False,
)

# 加载编码器
encoder = keras.models.Model(bert.model.inputs, bert.model.outputs[0])

 

向量入库:

def qa2vecs():
    collection_reconstruct()
    data = qa_query()
    milvus, collection_name = MilvusHelper().connection()
    param = {
        'collection_name': collection_name,
        'dimension': 384,
        'index_file_size': 256,  # optional
        'metric_type': MetricType.IP  # optional
    }
    milvus.create_collection(param)
    vecs = []
    ids = []
    progress_idx = 0
    with sess.as_default():
        with graph.as_default():
            for record in data:
                progress_idx += 1
                token_ids, segment_ids = tokenizer.encode(record["text"])
                vec = encoder.predict([[token_ids], [segment_ids]])[0]
                vecs.append(vec)
                ids.append(record["id"])
                if (len(ids) % 5000 == 0 or progress_idx == len(data)) and len(ids) > 0:
                    logger.info("data sync :{:.2f}%".format(progress_idx * 100.0 / len(data)))
                    milvus.insert(collection_name=collection_name, records=vecs_normalize(vecs), ids=ids, params=param)
                    vecs = []
                    ids = []
    milvus.close()
    return progress_idx

 上面的向量入库的时候,文本的id和text都存了,milvus里面有id->text的向量,所以最终检索的时候,能够同时拿到vector和id,然后id去mysql里面找即可。

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

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

相关文章

addr2line 使用,定位kernel panic 代码位置

在kernel崩溃时,方便定位代码。 需要打开kernel配置CONFIG_DEBUG_INFO。 需要有System.map和vmlinux文件,一般在out目录。 一般panic的时候会有给出panic的指针,如下down_write。 el1_data说明发生异常了,进入和entry.S文件&a…

视频转换、视频压缩、录屏等工具合集:迅捷视频工具箱

这是一款功能强大的视频处理软件,提供了多种视频处理功能。可以使用该软件进行视频剪辑、视频转换、音频转换、视频录像、视频压缩、字幕贴图等多种操作。软件界面简洁易用,操作方便,可以满足各种视频处理需求。 基本功能 视频压缩&#xff…

华为设备这14个广域网命令,值得网工收藏

华为设备广域网命令是网络管理员在运维过程中常用的一类命令。该命令集涵盖了DCC配置命令、PPP配置命令、MP配置命令、PPPoE命令、ATM配置命令、帧中继配置命令、HDLC配置命令、LAPB配置命令、X.25配置命令、IP-Trunk配置命令、ISDN配置命令、Modem配置命令、RTC终端接入配置命…

商场楼层索引图怎么做?商场内部地图导航怎么做?

商场内部地图导航怎么做?最近,某论坛上有一个帖子,主题是谈谈“逛商场中最糗的事情”,网友们纷纷跟帖回应,讲述自己在商场里遇到的尴尬,从在停车场找车如何困难,还有在商场里“迷路”的经历………

解决Ubuntu系统/usr/lib/xorg/Xorg占用显卡内存问题

问题描述: 服务器新安装的Ubuntu系统,开机默认/usr/lib/xorg/Xorg线程会占用显卡内存,占用内存大小为4Mb,虽然占用量不大,但是对于强迫症患者来说实在太不友好! 解决方法:将xorg的线程移动到集…

为什么我们需要API接口?API接口的核心又是什么?

API(Application Programming Interface)是一种连接不同软件之间的标准化的接口,可以让不同软件间进行数据交互和通信。API接口的作用很多,以下是几个主要的原因: 1.提高软件系统的灵活性和可扩展性。API接口可以将不…

大数据 | Hadoop HA高可用搭建保姆级教程(大二学长的万字笔记)

知识目录 一、写在前面🎈二、集群准备🍟2.1 集群规划2.2 集群解释 三、说明🔑3.1 主机名说明3.2 用户名说明3.3 操作目录说明3.3 必要工具说明 四、上传资料🌵4.1 资料准备4.2 脚本准备4.3 配置文件准备 五、解压与修改文件&#…

华为OD机试真题 Java 实现【递增字符串】【2023Q1 200分】,附详细解题思路

一、题目描述 定义字符串完全由“A’和B"组成,当然也可以全是"A"或全是"B。如果字符串从前往后都是以字典序排列的,那么我们称之为严格递增字符串。 给出一个字符串5,允许修改字符串中的任意字符,即可以将任…

色彩空间转换 HSV,GRAY

RGB色彩空间是一种比较常见的色彩空间,除此之外比较常见的色彩空间还包括GRAY色彩空间(灰度图像)、YCrCb色彩空间、HSV色彩空间、HLS色彩空间、CIEL*a*b*色彩空间、CIEL*u*v&#xf…

租售keysight E8257D 50G模拟信号发生器 销售/回收

是德(Keysight) E8257D 模拟信号发生器 Keysight E8257D (Agilent) PSG 模拟信号发生器提供业界领先的输出功率、电平精度和高达 67 GHz 的相位噪声性能(工作频率可达 70 GHz)。Agilent PSG 模拟信号发生器的高输出功率和卓越的电…

SpringBoot + MyBatis报错:Invalid bound statement (not found)解决

背景:XML配置文件规范 使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。 在Mybatis中使用XML映射文件方式开发&#xff0c…

从速度、质量到成本,Grid分布式并行测试在web自动化测试中尽显优势。

目录 前言: 一、Grid分布式并行测试简介 二、Grid分布式并行测试的优势 三、Grid分布式并行测试架构 四、Grid分布式并行测试封装 五、结语 前言: WEB自动化测试已经成为了软件开发流程中不可或缺的一部分。测试人员通过编写脚本,模拟用…

由于找不到msvcp140.dll文件,我们要怎么解决这种情况?

在使用电脑的过程中,我们经常会遇到各种各样的问题,其中之一就是缺少msvcp140.dll文件。这个问题通常会导致某些软件无法正常运行,而且很多人对于如何解决这个问题并不是很清楚。本文将会介绍多种修复方法,并对比哪种方法比较方便…

海睿思分享 | 颠覆传统方式的数仓构建工具

你还在为构建数仓的低效率而发愁吗? 你还在为数仓构建不能体系化而苦恼吗? 也许大家都不愿意承认,但是绝大部分的企业当前是没有统一、标准、公共、全局的模型设计的,而仅仅是把数据同步上来,然后基于业务需求做烟囱式…

pwn中利用off by null的一个思路,构造假chunk的难以触及pre_size咋整

题目分享 children_tcache 链接:https://pan.baidu.com/s/1jARmxmGaoN_VADlb6m0D8A?pwdra0l 提取码:ra0l 参考博客: tcache在pwn题中常见的利用姿势 - 先知社区 (aliyun.com) 开始: 这道题的具体写法我就不说了&#xff0…

如何快速运用R语言实现生物群落(生态)数据统计分析与绘图

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂,涉及众多统计分析方法。本次以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线,通过多个来自…

【课程】12 水资源大系统多目标理论

2022级博士研究生课程笔记。 仅供学习交流,如若侵权,请联系我删除,谢谢。 感谢董老师的精彩分享!

【课程】13 数据同化理论和方法

2022级博士研究生课程笔记。 仅供学习交流,如若侵权,请联系我删除,谢谢。 感谢时沈老师的精彩分享!

MySQL分库分表方案及sharding-spher(1)

一、数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发…

史上最完整的Spring Bean的生命周期

Bean的生命周期总 Spring Bean 的生命周期 Spring中的bean的生命周期主要包含四个阶段:实例化Bean–> Bean属性填充–>初始化Bean—>销毁Bean 加载Bean定义 通过 loadBeanDefinitions 扫描所有xml配置、注解将Bean记录在beanDefinitionMap中创建Bean对象…