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

文章目录

    • 文章简介
    • 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 npd = 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.mzph.cn/news/873003.shtml

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

相关文章

通用图形处理器设计GPGPU基础与架构(二)

一、前言 本系列旨在介绍通用图形处理器设计GPGPU的基础与架构,因此在介绍GPGPU具体架构之前,需要了解GPGPU的编程模型,了解软件层面是怎么做到并行的,硬件层面又要怎么配合软件,乃至定出合适的架构来实现软硬件协同。…

15- 微分方程

对三角函数不敏感

Linux - 基础开发工具(yum、vim、gcc、g++、make/Makefile、git、gdb)

目录 Linux软件包管理器 - yum Linux下安装软件的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 vim的简单配置 Linux编译器 - gc…

提高记忆力7种自然(高效)的方法

你的记忆力如何?你的认知功能是否如你所希望的那样强大? 如果没有,那么你肯定会对将在本文中与你分享的记忆改善技巧感兴趣的。 不管你怎么想,或者别人怎么说,提高你记忆信息的能力是完全有可能的。只要知道正确的方法即可。(别担心,你并不需要做出任何重大的生活方式改…

10 个 OKR 提示将改变您执行 OKR 的方式

我们都喜欢好的表情包,因为它们很有趣,可以分享,非常适合与同事们一起开怀大笑。表情包可以为工作场所带来一种友情和轻松的感觉,从而建立一种健康的团队文化,这一点很重要。然而,我们都知道它们也会分散注…

怎么减少pdf格式的内存,怎么减少pdf文件大小

在数字化时代,pdf文件因其格式稳定、兼容性强等特点,成为工作与学习中的常用文档格式。然而,较大的pdf文件往往给存储和传输带来不便。本文将为你详细介绍如何巧妙减小pdf文件内存,助你轻松解决文件传输和存储的烦恼。 让我们来看…

基于SpringBoot的招生管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Eclipse、Navicat、Maven 系统展示 首页 个人中心 学生管理 专…

[C/C++入门][ifelse]19、制作一个简单计算器

简单的方法 我们将假设用户输入两个数字和一个运算符&#xff08;、-、*、/&#xff09;&#xff0c;然后根据所选的运算符执行相应的操作。 #include <iostream> using namespace std;int main() {double num1, num2;char op;cout << "输入 (,-,*,/): &quo…

OWASP 移动应用 2024 十大安全风险

1. OWASP 移动应用 2024 十大安全风险 开放全球应用程序安全项目 &#xff08;OWASP&#xff09; 是一个非营利性基金会&#xff0c;致力于提高软件的安全性。自 2014、2016 年两次发布了移动应用的十大风险后&#xff0c;今年再次发布2024版。这对移动应用软件的检查工具有着…

xcode下swift .infinity报Invalid frame dimension (negative or non-finite)错误

xcode又报错了&#xff1a;Invalid frame dimension (negative or non-finite) 报错原因 xcode升级后&#xff0c;调整frame的时候不建议使用width: .infinity或者height: .infinity 解决办法 1.使用 maxWidth 属性&#xff1a; 通过将 frame 的宽度属性更改为 maxWidth&am…

数据结构之细说链表

1.1顺序表的问题以及思考 经过上一篇顺序表的学习&#xff0c;我们知道顺序表还是有很多缺点 顺序表的缺点&#xff1a; 1.中间/头部的插入删除&#xff0c;实际复杂度为O(N) 2.增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗 3.扩容一般…

3.5、matlab打开显示保存点云文件(.ply/.pcd)以及经典点云模型数据

1、点云数据简介 点云数据是三维空间中由大量二维点坐标组成的数据集合。每个点代表空间中的一个坐标点&#xff0c;可以包含有关该点的颜色、法向量、强度值等额外信息。点云数据可以通过激光扫描、结构光扫描、摄像机捕捉等方式获取&#xff0c;广泛应用于计算机视觉、机器人…

用了6年git,不知道cherry-pick是啥意思

背景 可能是测试开发角色原因&#xff0c;平时很少有代码冲突或多人协同的编码场景。今天有个协同项目&#xff0c;需要提交自己的代码到其它业务的代码库中&#xff0c;这个代码库是分支开发分支上线模式&#xff0c;同时会有多个同事提交代码&#xff0c;然后模块负责的同学…

AG32 的MCU与FPGA的主频可以达到568MHz吗

Customers: AG32/ AGRV2K 这个芯片主频和定时器最高速度是多少&#xff1f;用户期望 CPLD计时器功能0.1ns以下。 AGM RE: CPLD做不到 0.1ns的速率&#xff0c;这个需要10G以上的时钟。 那AGRV2K最高多少MHz呢&#xff1f; 一般200MHZ比较容易实现。 进一步说明&#xff1…

昇思25天学习打卡营第29天 | 文本解码原理--以MindNLP为例

今天是29天&#xff0c;学习了文本解码原理--以MindNLP为例。 MindNLP 是一个基于 MindSpore 的开源自然语言处理&#xff08;NLP&#xff09;库。它具有以下特点&#xff1a; 支持多种 NLP 任务&#xff1a;如语言模型、机器翻译、问答、情感分析、序列标记、摘要等&#xff…

如何在 Python 中使用 CSV 文件进行读写?

如何在 Python 中使用 CSV 文件进行读写&#xff1f; 文章目录 一、说明二、什么是 CSV&#xff1f;三、使用 csv.reader 在 Python 中读取 CSV 文件的步骤四、使用 with&#xff08;&#xff09; 语句实现代码五、如何使用 .readlines&#xff08;&#xff09; 在 Python 中读…

YOLOv5和LPRNet的车牌识别系统

车牌识别系统 YOLOv5和LPRNet的车牌识别系统结合了深度学习技术的先进车牌识别解决方案。该系统整合了YOLOv5目标检测框架和LPRNet文本识别模型 1. YOLOv5目标检测框架 YOLO是一种先进的目标检测算法&#xff0c;以其实时性能和高精度闻名。YOLOv5是在前几代基础上进行优化的…

硅谷裸机云多IP服务器怎么样?

硅谷裸机云多IP服务器是一种在硅谷地区提供的、具有多个IP地址的裸机云服务器。这种服务器结合了裸机服务器的高性能和云服务器的灵活性&#xff0c;同时提供了多个IP地址&#xff0c;为用户的各种需求提供了支持。以下是关于硅谷裸机云多IP服务器的一些详细信息&#xff0c;ra…

关于git clone速度极慢的解决方法

关于git clone速度极慢的解决方法 前言 如果没有一个可靠且稳定的魔法&#xff0c;接下来的就不用看了 尝试过的方法(未成功) 既然有成功&#xff0c;那么在探索过程中也必定会有失败的方法&#xff0c;下面也介绍一下我试过的没啥用的方法&#xff0c;给各位避雷&#xff…

Ubuntu安装virtualbox(win10)

virtualbox下载安装 1、下载virtualbox 下载路径&#xff1a;Linux_Downloads – Oracle VM VirtualBox 根据自己的Ubuntu版本选择对应的安装包下载 2、安装virtualbox 到下载路径&#xff08;一般为~/Download&#xff09;打开终端输入命令 sudo dpkg -i xxx.deb 继续执…