使用Qdrant+FastText实现向量存储和检索

news2024/11/17 1:30:51

1 概述

在《使用FastText库训练词向量》一文中,已经训练并保存好了一个用 FastText 训练的词向量模型-model_0809_001。在接下来的实践中,将直接使用该词向量模型来生成对应数据的向量,然后将向量和对应的负载存储到 Qdrant 中,然后进行向量检索。

2 向量存储和检索

下面是使用 Qdrant+FastText 实现向量存储和检索的实践案例。

2.1 创建 Qdrant 向量数据库

引入 qdrant_client 版本 为 1.10.1 的 Qdrant 的 python 客户端库。

pip install qdrant-client
或
conda install conda-forge::qdrant-client

创建并启动一个Qdrant数据库,数据持久化到磁盘,数据存储地址 “/Users/Shared/data/qdrant”。

from qdrant_client import QdrantClient
 
client = QdrantClient(path="/Users/Shared/data/qdrant")

2.2 创建数据集

创建一个名称为 test_collection_0812 的数据集。其中向量维度为200维(和FastText词向量模型设置的向量维度保持一致),相似度计算方式使用欧几里德距离-Distance.EUCLID。

def create_collection_0812():
    client.create_collection(
        collection_name="test_collection_0812",
        vectors_config=VectorParams(size=200, distance=Distance.EUCLID),
    )

2.3 新增向量数据 

首先使用 FastText 加载训练好的向量模型-model_0809_001, 然后使用该模型生成特征数据的向量,并往 test_collection_0812 数据集中新增向量数据。

# 加载词向量模型
model = fasttext.load_model(model_0809_001)

def add_vectors_0812():
    # 往向量库新增数据
    client.upsert(
        collection_name="test_collection_0812",
        wait=True,
        points=[
            PointStruct(id=1, vector=model['黄疸茵陈片'], payload={"genericName": "黄疸茵陈片"}),
            PointStruct(id=2, vector=model['美沙拉嗪肠溶片'], payload={"genericName": "美沙拉嗪肠溶片"}),
            PointStruct(id=3, vector=model['盐酸贝那普利'], payload={"genericName": "盐酸贝那普利"}),
            PointStruct(id=4, vector=model['痔康片'], payload={"genericName": "痔康片"}),
            PointStruct(id=5, vector=model['阿普唑仑'], payload={"genericName": "阿普唑仑"}),
            PointStruct(id=6, vector=model['黄疸茵陈冲剂'], payload={"genericName": "黄疸茵陈冲剂"}),
            PointStruct(id=7, vector=model['肝素钙注射液'], payload={"genericName": "肝素钙注射液"}),
            PointStruct(id=8, vector=model['黄疸茵陈颗粒'], payload={"genericName": "黄疸茵陈颗粒"}),
        ],
    )

2.4 向量检索

进行向量检索时,同样是使用向量模型-model_0809_001生成查询入参的向量,然后进行向量搜索。搜索结果的分数(score)越小代表搜索结果与入参越相近。下面是搜索与“黄疸茵陈片”最相近的6条数据的案例。

def query_0812(genericName, size):
    search_result = client.search(
        collection_name="test_collection_0812", query_vector=model[genericName], limit=size, with_vectors=True
    )

    for var in search_result:
        print(var)


if __name__ == '__main__':
    query_0811("黄疸茵陈片", 6)

搜索结果如下所示:

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

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

相关文章

基于Conda的Python版本管理与Python包管理

文章目录 前言Conda是什么Conda与Anaconda安装Anaconda安装包windows v2024.06-1安装包更多版本安装包(Windows/Mac/Linux) 安装 使用步骤创建Python环境激活Python环境安装Python包列出和切换 Python 版本管理多个环境 总结 前言 开发环境中,需要使用不同的Python…

eNSP 华为三层交换机配置DHCP

华为三层交换机配置DHCP 华为DHCP原理:(思科四个都是广播包) 1、客户端广播发送DHCP Discover包。用于发现当前局域网中的DHCP服务器。 2、DHCP服务器单播发送DHCP Offer包给客户端。携带分配给客户端的IP地址。 3、客户端广播发送DHCP Resqe…

如何给Airtest脚本/报告增加log记录

1. 前言 尽管Airtest脚本运行过程中会输出非常丰富的log信息,并且Airtest报告也会把我们脚本的的运行步骤显示出来,但有时候,我们会需要在脚本里面,插入一些自定义的log内容(比如某些关键点),并…

UR5e机器人Gazebo仿真模拟

Gazebo仿真环境 Gazebo是一款开源的机器人仿真平台,基于物理引擎,能够模拟机器人在真实世界中的运动和交互。它支持多种机器人模型与传感器,以及丰富的环境场景,为机器人研发提供了便捷的测试平台。 UR5e机器人Gazebo仿真模拟步骤…

基于Windows系统和‌Linux系统,以tomcat为案例,讲解如何新增自启动服务。

文章目录 引言‌I Linux系统‌(以CentOS为例)基础知识:运行级别(run level)基于chkconfig 工具,设置服务启动类型。基于systemctl 新增系统服务制定定时任务优化停止Tomcat服务命令II 基于Windows系统设置服务自启动的常规操作安装多个tomcat服务,并设置自启动。引言 场景…

IDEA中@Test测试时无法通过键盘输入

在IDEA中使用Test发现Scanner无法在控制台输入,如下所示: 发现这里是只读模式,无法进行输入。 解决方案: 找到编辑虚拟机选项,添加如下: -Deditable.java.test.consoletrue 如下所示:(重启一次IEDA)

R语言统计分析——多元线性回归

参考资料:R语言实战【第2版】 1、多元线性回归 当预测变量不止一个时,简单线性回归就变成了多元线性回归。从技术上来说,多项式回归可以算是多元线性回归的特例:二次回归有两个预测变量(X和X^2)。 以基础包…

使用DOM破坏启动xss

实验环境&#xff1a; Lab: Exploiting DOM clobbering to enable XSS | Web Security Academy (portswigger.net) 分析&#xff1a; 找破坏点&#xff1a; 第一个输入框可以看见是<texarrea>;不能插入语句.&#xff1a; 构造一个语句试试 <img src1 οnerrοraler…

深入理解HTTPS协议:CA证书的安全机制

文章目录 一、HTTP的不足二、HTTP 加密 证书 完整性保护 HTTPS三、加密与解密1、对称密钥加密2、非对称密钥加密3、证书 一、HTTP的不足 HTTP 主要有这些不足&#xff0c;例举如下&#xff1a; 通信使用明文&#xff08;不加密&#xff09;&#xff0c;内容可能会被窃听不…

kettle获取URL接口数据

使用kettle获取URL接口数据结果保留到文件里 1 生成记录里添加URL信息 2 使用Rest_Client组件处理URL数据结果保存到字段里&#xff08;json的&#xff09; 3 使用json_input 组件处理json数据 4 保存结果到文件里

【protobuf】ProtoBuf——proto3语法详解、字段规则、消息类型的定义与使用、通讯录的写入和读取功能实现

文章目录 ProtoBuf5. proto3语法详解5.1 字段规则5.2 消息类型的定义与使用 ProtoBuf 5. proto3语法详解 在语法详解部分&#xff0c;依旧通过项目推进的方式开展教学。此部分会对通讯录多次升级&#xff0c;用 2.x 表示升级的版本&#xff0c;最终将完成以下内容的升级&#x…

2 C 语言开发工具的选择、 MinGW 的安装与配置、VS Code 的安装与配置、插件推荐

目录 1 开发工具的选择 1.1 Visual Studio 1.2 Code::Block 1.3 Clion 1.4 VS Code 1.5 在线编辑工具 2 开发工具安装 2.1 安装 MinGW-w64 2.1.1 MinGW-w64 介绍 2.1.2 解压 MinGW 2.1.3 将 MinGW 添加至环境变量 2.1.4 验证安装 2.2 安装 VS Code 2.2.1 下载安装…

无刷直流电机的个人总结

电机分类 主要分为两大类&#xff1a;有刷电机&#xff0c;无刷电机 有刷电机 原理图截图来源&#xff0c;工作原理就是对转子线圈通电后产生磁性和外壳中的永磁体相互作用&#xff0c;导致转子转动。而在转子转动过程中如果不改变电流方向&#xff0c;那么磁性不变&#xf…

ROS机械臂——ROS结合OpenCV案例(含资源)

纲要 摄像头驱动 图像属性 图像压缩 ### Realsense摄像头 点云展示 ### 点云图像属性 ## 摄像头标定 摄像头标定流程 如何使用标定文件 OpenCV ROS与OpenCV的集成框架 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b0ff143b710543839325d19c7a3c04c5.png R…

【Mysql】Xtrabackup备份恢复(Mysql5.6/5.7/8.0)

目录 一、前言 二、Mysql8.0为例 1、安装Xtraback工具 1&#xff09;mysql8.0.x版本 2&#xff09;mysql5.6、5.7版本 2、备份操作 3、恢复操作 一、前言 官网下载地址&#xff1a;Software Downloads - Percona 本测试环境&#xff1a;centos_x86、mysql8.0.39、mysq…

Nginx的源码编译

一:Nginx 介绍 Nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务 器 解决C10K问题&#xff08;10K Connections&#xff09; Nginx功能&#xff1a;静态的web资源服务器html&#xff0c;图片&#xff0c;js&#xff0c;css&#xff…

【记git 重命名文件失败,和正确方法】

【背景】 想要重命名一个文件&#xff0c;并同步到远程 【过程】 1.我是直接把 “驱动增加he.c” 文件重命名为 “驱动增加播放he接口方法” &#xff0c;想着直接提交就会同步重命名git仓记录的文件名。然后就可以推送到远程仓库&#xff0c;同步重命名远程仓库的文件名。 2.然…

计算机的错误计算(六十五)

摘要 计算机的错误计算&#xff08;五十五&#xff09;展示了大数的余弦函数值的错误计算 。本节探讨另外一类数值&#xff1a; 附近数 的余弦函数的计算精度问题。 例1. 已知 计算 先用 Python计算&#xff1a; 然后在 Visual Studio 2010中用下列代码计算&#xff1a; …

c语言中比较特殊的输入函数

目录 一.getchar()函数 1.基本功能 2.使用方法 (1).读取单个字符 (2).读取多个字符&#xff08;直到遇到换行符&#xff09; (3).处理输入中的空白字符 3.返回值 4.应用场景 5.注意事项 二.fgets()函数 1.函数原型 2.工作原理 3.使用示例 (1).从标准输入读取一行…

qt笔记之qml中的TextEdit、TextInput、TextArea、TextField的区别

qt笔记之qml中的TextEdit、TextInput、TextArea、TextField的区别 code review! 文章目录 qt笔记之qml中的TextEdit、TextInput、TextArea、TextField的区别一.对比二.C环境中类似功能的控件 一.对比 TextEdit、TextInput、TextArea和TextField都是用于文本输入的组件&#…