【大模型】FAISS向量数据库记录:从基础搭建到实战操作

news2024/9/20 20:51:48

文章目录

    • 文章简介
    • Embedding模型
      • BGE-M3 模型亮点
    • FAISS是什么
      • FAISS实战
        • 安装faiss
        • 加载Embedding模型
        • 创建FAISS数据库
        • 搜索FAISS数据
        • 删除FAISS数据
        • 保存、加载FAISS索引
    • 总结

本人数据分析领域的从业者,拥有专业背景和能力,可以为您的数据采集、数据挖掘和数据分析需求提供支持。期待着能够与您共同探索更多有意义的数据洞见,为您的项目和业务提供数据分析方面的帮助。

文章简介

RAG系统的成功在很大程度上取决于其高效地获取和处理海量信息的能力。向量数据库又在其中发挥了不可替代的作用,并构成了RAG系统的核心。向量数据库专门用于存储和管理高维向量数据,它们能把文本、图像、音频甚至视频转换为向量并存储。RAG系统最终能实现的效果就取决于这些底层向量数据库的表现。

在众多向量数据库和向量库中,每个都有自己的一些特点,选择一个适合自己应用场景的也需要经过评估,本文将介绍FAISS的基本搭建和使用。

Embedding模型

Embedding模型在RAG技术中非常关键,因为它们直接影响到信息检索的效果和生成文本的质量。经过多方对比和业务场景选择,本文选用了BGE-M3作为Embedding模型。

BGE-M3 模型亮点

  1. 多语言(Multi-Linguality),训练集包含100+种以上语言
  2. 多功能(Multi-Functionality),支持稠密检索(Dense Retrieval),还支持稀疏检索(Sparse Retrieval)与多向量检索(Multi-vector Retrieval)
  3. 多粒度(Multi-Granularity) BGE-M3目前可以处理最大长度为8192 的输入文本,支持“句子”、“段落”、“篇章”、“文档”等不同粒度的输入文本

huggingface下载太慢、超时可以使用国内的开源模型服务平台下载
如modelscope:

  • SDK下载
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Xorbits/bge-m3')
  • Git下载
    请确保 lfs 已经被正确安装
git lfs install
git clone https://www.modelscope.cn/Xorbits/bge-m3.git

FAISS是什么

Faiss 是一个用于高效相似性搜索和密集向量聚类的库。它包含在任意大小的向量组中搜索的算法,直到可能不适合 RAM 的向量组。它还包含用于评估和参数调整的支持代码。

Faiss 是用 C++ 编写的,带有完整的 Python 包装器(版本 2.0+ 和 3.0+)。一些最有用的算法是在 GPU 上实现的。它由Facebook AI Research开发。

FAISS实战

安装faiss

推荐使用Anaconda安装,如果你的电脑上还未安装与配置Anaconda环境,请先安装Anaconda。
cpu版本:

conda install -c pytorch faiss-cpu

gpu版本:

conda install -c pytorch faiss-gpu
加载Embedding模型

安装sentence_transformers

conda install sentence-transformers
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("./bge-m3") 
model.max_seq_length

可以看到该模型max_tokens为8192

创建FAISS数据库

Faiss 中有常用的三种索引方式 IndexFlatL2、IndexIVFFlat 和 IndexIVFPQ。

本示例使用IndexFlatL2 进行演示。

  • IndexFlatL2 - 暴力检索L2

    使用欧氏距离(L2)进行精确检索。

    适用于较小规模的数据集,采用暴力检索的方式,即计算查询向量与所有数据库向量之间的距离,然后返回相似度最高的前 k 个向量。

  • IndexIVFFlat - 倒排索引,加速:

    使用倒排索引结构,将数据集划分为多个聚类空间,以加速搜索。

    在查询阶段,首先定位到可能包含相似向量的聚类中心,然后在该聚类中心附近进行精确搜索。

  • IndexIVFPQ - 省空间超快:

  • 使用 Product Quantization(PQ)技术进行有损压缩,以节省内存。

    在查询阶段,返回近似结果。
    本示例使用IndexFlatL2

import faiss 
import numpy as np

d = 1024  # 设置向量维度为 1024
sentences = ['中国气象局启动暴雨二级应急响应!黄淮地区及四川盆地等地有强降雨', '强降雨集中在河南山东安徽江苏等地', '警惕次生灾害', '主雨带逐步移至四川盆地到黄淮一带(扎实做好防汛抗旱、抢险救灾各项工作)', '中国气象局启动暴雨二级响应,黄淮地区及四川盆地等有强降雨', '长江水利委员会贯彻落实水利部防汛会商要求',  '聚焦防汛抗洪丨河南对郑州等9市启动防汛三级应急响应', '受降雨影响', '河南郑州、南阳等地部分高速路段禁止所有车辆上站', '暴雨黄色预警:10省区部分地区有大到暴雨', '河南局地有特大暴雨', '超40支救援队驰援南阳!当地应急管理局:降水量逐渐减小,暂无人员伤亡', '透视2024广东高招提前批:小语种转向“复合型”', '大湾区做强“高教圈”', '广东省教育考试院:考生可通过这些方式查询高考录取结果', '广东2024高招录取启动!投档、进档、预录、退档、征集志愿……一文看懂!', '广东高考提前批本科院校录取结束,清华大学摘得非军检院校投档线首位', '\ufeff学子观察/中欧班列省成本', '“新三样”加速出海', '构建欧亚贸易“黄金通道”', '中欧班列(西安)让“中国制造”一路畅行', '江苏中欧(亚)班列累计开行超1.6万列', '2024年中欧班列累计开行1万列', '发送货物108.3万标箱同比增长11%', ......]

embeddings = model.encode(sentences)  # 使用模型对句子进行编码,获取句子嵌入向量
index = faiss.IndexFlatL2(d)  # 创建一个 L2 距离的索引
index.add(embeddings)  # 将句子嵌入向量添加到索引中

print("向量数量:", index.ntotal)  # 打印索引中向量的总数 101个
搜索FAISS数据
k = 5  # 设置检索的最近邻个数

# 对查询句子进行编码,并在索引中进行检索,返回距离和索引
D, I = index.search(model.encode(['河南大雨']), k)  # 检查结果

# 打印每个最近邻的距离和对应的句子
for i, _i in enumerate(I[0]):
    print(D[0][i], sentences[_i])

output:

0.31428105 河南局地有特大暴雨
0.5695877 受降雨影响
0.59010285 强降雨集中在河南山东安徽江苏等地
0.8355587 中国气象局启动暴雨二级响应,黄淮地区及四川盆地等有强降雨
0.8516881 聚焦防汛抗洪丨河南对郑州等9市启动防汛三级应急响应
删除FAISS数据
print(index.ntotal)
index.remove_ids(np.arange(5)) # 需要移除的向量的id
print(index.ntotal)  #移除了5个向量,还剩96个
保存、加载FAISS索引

可以使用如下方法将索引保存为文件:

faiss.write_index(index, "large.index")

需要使用时,使用以下方法读取文件建立索引:

index = faiss.read_index("news.index")
print("向量数量:", index.ntotal)  

可以看到索引数量依然是96个

总结

本文介绍了FAISS在RAG系统中的重要作用以及其基本使用方法。通过使用BGE-M3模型进行句子嵌入,并利用FAISS进行索引和检索,我们展示了如何高效地管理和搜索高维向量数据。此外,本文还涵盖了如何删除向量、保存和加载索引等实用操作。希望这些内容能帮助您更好地理解和应用FAISS,以提升数据处理和信息检索的效率。

数据采集、产品定制开发、数据分析

url='https://wx.《17610352720》.wx'

大数据分析为运营和各行业带来了前所未有的机会,使企业能够更敏锐地洞察市场、优化运营,并更有效地应对竞争和变革。在信息时代,充分利用大数据分析,将成为企业取得竞争优势的不可忽视的关键要素。

创作不易,如果你觉得有帮助,请点个赞支持一下。你的鼓励是我创作的最大动力,期待未来能为大家带来更多有趣的分析文章。感谢大家的阅读和支持!

最后,祝愿你我的生活都灿烂如花。

在这里插入图片描述

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

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

相关文章

Java语言程序设计基础篇_编程练习题**14.29(游戏:豆机)

第十四章第二十九题 **14.29 (游戏:豆机) 请写一个程序,显示编程练习题 7.21 中介绍的豆机,如图 14-52c 所示 代码展示 package chapter_14;import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layou…

易保全参与起草的两项区块链全国团体标准正式发布

在数字化转型浪潮席卷全球的今天,区块链技术以其去中心化、透明性、不可篡改等独特优势,正逐步成为重塑各行各业信任机制与业务流程的关键力量。 近日,中国通信工业协会正式发布了《区块链服务 基于区块链的去中心化标识符技术要求》与《区块…

什么是反向代理?

这里写目录标题 一、什么是反向代理?二、反向代理的工作原理三、使用反向代理的好处四、反向代理的风险 在网络领域中,代理服务器是一种常见的技术,用于转发客户端和服务器之间的请求和响应。代理服务器又可以分为反向代理和正向代理两种类型…

QT实现图片开关控件-自定义控件

开关按钮大家应该很熟悉,在设置里面经常遇到,切换时候的滑动效果比较帅气。通常说的开关按钮,有两个状态:on、off。大部分的开关按钮控件,基本上有两大类,第一类是纯代码绘制,这种对代码的掌控度…

SD-WAN组网搭建5G备份方案实现方式

SD-WAN(Software-Defined Wide Area Network,软件定义广域网)结合5G作为备份链路是现代企业网络弹性策略的一部分,尤其是在需要高可用性和快速故障切换的场景下。以下是实现SD-WAN组网并集成5G备份方案的一般步骤: 1. …

Spring完整知识点汇总一

Spring简介 额外知识点 在之前的学习中我们在Service业务层创建Dao/Mapper数据访问层(持久层)的对象是通过工具类来获取对应Dao/Mapper数据访问层(持久层)的接口代理对象在此处我们不用工具类来获取对应Dao/Mapper数据访问层&…

WebPack5.0 快速入门

前端工程化WebPack5️⃣ 前置知识: 此文章属于前端——框架进阶篇,需要实现掌握:HTMLCSSJS三件套、Node... 😀推荐分享一波个人Blog文档: JavaScript、前端工程\模块化、邂逅Node.JS的那一夜 什么是WebPack❓ Web…

飞凌全志T527开发板modbus移植使用教程

交叉编译 进入到源码目录,执行 ./configure ac_cv_func_malloc_0_nonnullyes --hostaarch64-none-linux-gnu --enable-static --prefix/home/feng/文档/development/Linux/application/OK527N/libmodbus-3.1.10/install/其中–host为交叉编译器的前缀;…

谈一谈一条SQL的查询、更新语句究竟是如何执行的?

文章目录 理解执行流程衍生知识redo logbinlog 本篇文章是基于《MySQL45讲》来写的个人理解与感悟。 理解 先看下图: 上一篇文章我们讨论了一条SQL查询语句的执行流程,并介绍了执行过程中涉及的处理模块。 回顾一下: 大体来说,…

RK3568笔记三十九:多个LED驱动开发测试(设备树)

若该文为原创文章,转载请注明原文出处。 通过设备树配置一个节点下两个子节点控制两个IO口,一个板载LED,一个外接LED。 一、介绍 通过学习设备树控制GPIO,发现有多种方式 一、直接通过寄存器控制 二、通过设备树,但…

【中项】系统集成项目管理工程师-第一模块:IT技术和管理-1.5数字化转型与元宇宙

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 备注:IT技术和管理-1.4章节涉及敏感,无法发送,故跳过。 软考同样是国家人社部和工信部组织的国家级考试…

工业三防平板适用于各种工业场景

在当今高度工业化的时代,工业三防平板作为一种专为恶劣工业环境设计的设备,正逐渐成为各种工业场景中不可或缺的一部分。 工业三防平板具备出色的防水、防尘和防摔性能,这使得它能够在潮湿、多尘以及容易发生碰撞的环境中稳定运行。无论是在矿…

“富二代”用英语怎么说?真的不是“second rich”!成人英语学习柯桥学外语到蓝天广场

看了沈腾马丽新电影《抓娃娃》,笑得前仰后合。遇上“不靠谱”的爹妈硬是要穷养孩子,就算是“富二代”日子也不好过啊! 想必很多人小时候都幻想过:自己的爸妈其实是大富豪,为了磨练自己才假装没钱的。随着逐渐长大才不得…

【内网Tesla T4_16G为例】GPU安装NVIDIA Driver、CUDA、cuDNN、Python

这篇文章主要记录下在内网(无法连接外网)服务器安装NVIDIA Driver、CUDA、cuDNN、Python的过程,机器配置GPU:1*NVIDIA T4 16G,CPU:8C42G,操作系统:GPU-RHEL7.9-x86-64。 想了解如何内网部署ollama&#xf…

数据结构(双向链表)

链表的分类 链表的结构⾮常多样,以下情况组合起来就有8种(2 x 2 x 2)链表结构: 虽然有这么多的链表的结构,但是我们实际中最常⽤还是两种结构:单链表和双向带头循环链表 1.⽆头单向⾮循环链表&#xff1a…

【ROS2】高级:解锁 Fast DDS 中间件的潜力 [社区贡献]

目标:本教程将展示如何在 ROS 2 中使用 Fast DDS 的扩展配置功能。 教程级别:高级 时间:20 分钟 目录 背景 先决条件在同一个节点中混合同步和异步发布 创建具有发布者的节点创建包含配置文件的 XML 文件执行发布者节点创建一个包含订阅者的节…

AI伦理挑战:构建未来信任的桥梁

在人工智能(AI)技术蓬勃发展的今天,其伦理挑战如同双刃剑的另一面,日益成为全球关注的焦点。面对隐私侵犯、算法偏见、信息真实性危机等伦理困境,我们需要构建全面而精细的应对策略,确保技术进步的同时,守护人类社会的…

MimicMotion-腾讯开源视频生成框架

腾讯宣布开源可控视频生成框架 MimicMotion,该框架可以通过提供参考人像及由骨骼序列表示的动作,来产生平滑的高质量人体动作视频 MimicMotion 具有以下几个亮点: 首先,通过引入了置信度感知的姿态引导信号,大幅提升了…

读书笔记:改善既有代码的设计

差不多两年都没写过博客了,好学的习惯差不多都落下了,两年里几乎也把学到的很多东西都应用了,但不学习好像就有点停步不前的感觉了,以后给自己定个目标每周写一遍博客。 写博客好处: 一是加深自己的印象(能…

幽微之处见真章:数据类型与内存存储的内在联系

嘿嘿,家人们,今天咱们来深度剖析数据类型在内存中的存储,好啦,废话多不讲,开干! 1.:数据类型介绍 在前面呢,博主已经介绍了基本的数据类型: char //字符数据类型 ---->占据1个字节 short //短整型 …