Milvus 使用
Milvus记录:
1、安装
Python:
	$ pip install -U pymilvus   #pymilvus 中包含的一个 python 库,可以嵌入到客户端应用程序中
	$ pip install "pymilvus[model]"  #该软件包包含 PyTorch 等基本 ML 工具
	
Java:
	<dependency>
		<groupId>io.milvus</groupId>
		<artifactId>milvus-sdk-java</artifactId>
		<version>2.5.3</version>
	</dependency>
Go:
	$ go get -u github.com/milvus-io/milvus-sdk-go/v2
2、度量类型
Milvus 支持这些类型的相似性度量:
	欧氏距离 (L2):
		原理:值越小表示相似度越高。
		范围:[0, ∞);
		选择:欧氏距离测量的是连接两点的线段的长度。当选择欧氏距离作为距离度量时,Milvus 只计算应用平方根之前的值。
	内积 (IP):
		原理:数值越大,表示相似度越高。
		范围:[-1, 1];
		选择:两个 Embeddings 之间的 IP 距离,如果需要比较非标准化数据,或者需要考虑幅度和角度,IP 会更有用。如果使用 IP 计算嵌入式之间的相似性,必须对嵌入式进行归一化处理。归一化后,内积等于余弦相似度。 
	余弦相似度 (COSINE):
		原理:数值越大,表示相似度越高。
		范围:[-1, 1];
		选择:余弦相似度使用两组向量之间角度的余弦来衡量它们的相似程度。用 1 减去它们的余弦相似度,就可以得到两个向量之间的余弦距离。
	JACCARD:
		原理:数值越小,表示相似度越高。
		范围:[0, 1];
		选择:JACCARD 相似性系数衡量两个样本集之间的相似性,定义为定义集的交集的卡方值除以它们的联合的卡方值。它只适用于有限样本集。
	HAMMING:
		原理:值越小,表示相似度越高。
		范围:0,dim(向量)] [0, dim(vector);
		选择:HAMMING 距离测量二进制数据字符串。两个长度相等的字符串之间的距离是比特不同的比特位置数。
	BM25 (专门为稀疏向量的全文检索而设计):
		原理:根据词频、反转文档频率和文档规范化对相关性进行评分。
		范围:[0, ∞);
		选择:BM25 是一种广泛使用的文本相关性测量方法,专门用于全文检索。
		要素:
			术语频率 (TF):衡量术语在文档中出现的频率。虽然较高的频率通常表示较高的重要性,但 BM25 使用饱和参数 k1 来防止过于频繁的术语主导相关性得分。
			反向文档频率(IDF):反映术语在整个语料库中的重要性。在较少文档中出现的术语会获得较高的 IDF 值,这表明其对相关性的贡献更大。
			文档长度归一化:较长的文档由于包含较多的术语,往往得分较高。BM25 通过对文档长度进行归一化处理来减轻这种偏差,参数 b 控制这种归一化处理的强度。
3、CRUD
插入数据:
	res = client.insert(collection_name="demo_collection", data=data)
	collection_name:数据库名称
	data:数据内容,常见data = [{"id": i, "vector": vectors[i], "text": docs[i], "subject": "history"} for i in range(len(vectors))]
向量搜索:
	res = client.search(
		collection_name="demo_collection",  # 数据库名称
		data=query_vectors,  # 查询向量数据
		limit=2,  # 设置返回结果条数
		output_fields=["text", "subject"],  # 设置返回字段
	)
	根据插入的字段类型去匹配检索字段,选择返回字段
带元数据过滤的向量搜索:
	res = client.search(
		collection_name="demo_collection",
		data=embedding_fn.encode_queries(["tell me AI related information"]),
		filter="subject == 'biology'",  # 按条件过滤/带元数据过滤(索引)
		limit=2,
		output_fields=["text", "subject"],
	)
查询:
	res = client.query(
		collection_name="demo_collection",
		filter="subject == 'history'",
		output_fields=["text", "subject"],
	)
删除实体:
	根据id删除:
		res = client.delete(collection_name="demo_collection", ids=[0, 2])
	根据过滤条件进行删除:
	res = client.delete(
		collection_name="demo_collection",
		filter="subject == 'biology'",
	)
删除 Collections:
	client.drop_collection(collection_name="demo_collection")
	
4、检索
混合检索,使用BGEM-3(采用稀疏、稠密检索,可配置化权重,bgem3中文语言检索效果较好,可docker部署也可以本地化代码部署使用)
5、排序
结果集可进行Rerank排序,可使用GTE进行
Milvus 使用的更多相关文章
- milvus安装及其使用教程
		
milvus 简介 milvus是干什么的?通俗的讲,milvus可以让你在海量向量库中快速检索到和目标向量最相似的若干个向量,这里相似度量标准可以是内积或者欧式距离等.借用官方的话说就是: Milv ...
 - milvus和faiss安装及其使用教程
		
写在前面 高性能向量检索库(milvus & faiss)简介 Milvus和Faiss都是高性能向量检索库,可以让你在海量向量库中快速检索到和目标向量最相似的若干个向量,这里相似度量标准可以 ...
 - 虹软人脸识别SDK接入Milvus实现海量人脸快速检索
		
一.背景 人脸识别是近年来最热门的计算机视觉领域的应用之一,而且现在已经出现了非常多的人脸识别算法,如:DeepID.FaceNet.DeepFace等等.人脸识别被广泛应用于景区.客运.酒店.办公室 ...
 - 矩池云上安装及使用Milvus教程
		
选择cuda10.1的镜像 更新源及拷贝文件到本地 apt-get update cp -r /public/database/milvus/ / cd /milvus/ cp ./lib/* /us ...
 - 学习笔记(25)- NLP的几个概念
		
NLP的几个概念 从技术研究的角度,简单介绍自然语言处理的几个概念 1. 对抗学习 主要指对抗生成网络. 2个主要构成:判别器.生成器 判别模型尽可能提取特征正确率增加的模型,生成模型尽可能" ...
 - 可能是东半球第二好用的软件工具全部在这里(update in 2020.10.09)
		
1. 产品经理工具种草 浏览器:Google Chrome 网络浏览器 原型绘制软件:墨刀- 在线产品原型设计与协作平台(https://modao.cc/).摹客mockplus - 摹客,让设计和 ...
 - LUSE: 无监督数据预训练短文本编码模型
		
LUSE: 无监督数据预训练短文本编码模型 1 前言 本博文本应写之前立的Flag:基于加密技术编译一个自己的Python解释器,经过半个多月尝试已经成功,但考虑到安全性问题就不公开了,有兴趣的朋友私 ...
 - 如何借助 JuiceFS 为 AI 模型训练提速 7 倍
		
背景 海量且优质的数据集是一个好的 AI 模型的基石之一,如何存储.管理这些数据集,以及在模型训练时提升 I/O 效率一直都是 AI 平台工程师和算法科学家特别关注的事情.不论是单机训练还是分布式训练 ...
 - 搜索系统核心技术概述【1.5w字长文】
		
前排提示:本文为综述性文章,梳理搜索相关技术,如寻求前沿应用可简读或略过 搜索引擎介绍 搜索引擎(Search Engine),狭义来讲是基于软件技术开发的互联网数据查询系统,用户通过搜索引擎查询所需 ...
 - 人脸搜索项目开源了:人脸识别(M:N)-Java版
		
 一.人脸检测相关概念 人脸检测(Face Detection)是检测出图像中人脸所在位置的一项技术,是人脸智能分析应用的核心组成部分,也是最基础的部分.人脸检测方法现在多种多样,常用的技术或工具大 ...
 
随机推荐
- arthas安装和简单使用
			
介绍 Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load.内存.gc.线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参.异常,监测方法执 ...
 - Mono与IL2CPP
			
Mono: Mono是.NET Framework 的一种开源实现. Mono项目将使开发者用各种语言(C#,VB.NET等)开发的.NET应用程序,能在任何Mono支持的平台上运行, 包括Linux ...
 - @Scheduled 定时任务自定义
			
简介 @Scheduled 定时任务自定义可以通过SchedulingConfigurer实现. SchedulingConfigurer 是 Spring Framework 中的一个接口,用于配置 ...
 - python 关于__init__()方法的用法
			
__init__()方法需要结合class一起来使用更加有效 关于__init__()的含义,查到解释是"负责对象的初始化",听起来挺懵逼的,还是结合实例来理解较好 直接看代码 c ...
 - wpf 代码判断当前是否在设计模式,兼容没有UI线程的限制
			
/// <summary> /// 当前是否处于设计模式 /// </summary> bool IsInDesignMode { get { return (bool)Des ...
 - Java编程--简单的Proxy程序(代理设计模式)
			
有时候对象要完成某项任务(功能)需要很多步骤,而这些步骤全部交给对象自己完成显然是不现实的,就像我们人要吃饭,你总不能要求我们每个人都去种地.打面.做饭一样,我们只需要完成其中的吃饭这一核心操作就可以 ...
 - 【MOOC】华中科技大学计算机组成原理慕课答案-第八章-输入输出系统
			
应一个同学后台留言,说让我发就发全,那我干脆把剩的这一章测验也发了吧. 以下解析由GPT生成,不保证可读可解释,仅保证答案正确. 单选 1 (单选(2分)) 某中断系统中,每抽取一个输入数据就要中断 ...
 - 【记录】smartctl|Linux如何通过smartctl查看有没有坏的磁盘?以及使用时长、电源周期、故障记录等
			
smartctl是一个用于监测和分析硬盘健康状态的工具,可以用于检测是否存在坏的磁盘.以下是使用smartctl检查磁盘健康状态的步骤: 安装smartctl软件 在Linux系统中,smartc ...
 - 【BUG】Linux目录下明明有可执行文件却提示找不到,“No such file or directory”,解决:为64位Ubuntu安装32位程序的运行架构
			
问题 我做了如下努力: ls显示:(能够成功显示) 修改文件名:(能够正常复制.修改.移动,并且被复制的仍然不能运行) 调整文件属性,弄成777: cat显示文件.(能够成功显示) root执行文件: ...
 - 一文掌握 Ubuntu 全场景扩容操作
			
此文章为搬运,原作者链接 一文掌握 Ubuntu 全场景扩容操作 - 南北东西万里程的文章 - 知乎https://zhuanlan.zhihu.com/p/707918020 为 ubuntu扩容, ...