Faiss简单使用

这篇具有很好参考价值的文章主要介绍了Faiss简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Faiss是Facebook AI Research开发的快速相似性搜索(similarity search)计算库,为稠密向量提供高效相似度搜索和聚类,支持十亿级别向量的搜索。

Faiss 的核心原理是基于向量索引和近似最近邻搜索。它通过构建索引结构来加速相似性搜索,以在大规模数据集中快速找到最相似的向量。

本节不介绍Faiss的原理,只介绍使用方法。

1. 安装

# Faiss分为cpu和gpu两个版本,按需进行安装
#cpu版,faiss-cpu仅支持cpu
conda install -c pytorch faiss-cpu 

#gpu版,faiss-gpu支持cpu和gpu
conda install -c pytorch faiss-gpu

2. Faiss使用

Faiss使用较为简单,主要分为三部分,构建数据集、建立索引并添加向量、检索。

2.1 构建数据集

首先拥有数据集,然后转化为向量。文本向量化可以使用向量模型,比如m3e,ernie-base,text2vec等等。

注意,在 Python 中,矩阵始终表示为 numpy 数组。数据类型dtype必须是float32.

#例一,官方代码
import numpy as np
d = 64                           # dimension
nb = 100000                      # database size
nq = 10000                       # nb of queries
np.random.seed(1234)             # make reproducible
xb = np.random.random((nb, d)).astype('float32')
xb[:, 0] += np.arange(nb) / 1000.
xq = np.random.random((nq, d)).astype('float32')
xq[:, 0] += np.arange(nq) / 1000.
print(xb,xb.shape,xb.dtype)
print("*"*80)
print(xq,xq.shape,xq.dtype)

Faiss简单使用,自然语言处理,机器学习,faiss,python,transformer,人工智能

# 例二,使用text2vec-large-chinese模型演示
from text2vec import SentenceModel
sentences = ['如何更换花呗绑定银行卡', '花呗更改绑定银行卡','怎么换银行卡', '银行卡毁坏如何补办', '花呗如何打开']

model = SentenceModel('GanymedeNil/text2vec-large-chinese')
embeddings = model.encode(sentences)
if embeddings.dtype!='float32':
    embeddings = embeddings.astype('float32')
else:
    pass

print(embeddings,embeddings.shape,embeddings.dtype)

Faiss简单使用,自然语言处理,机器学习,faiss,python,transformer,人工智能

2.2 构建索引并添加向量

Faiss的核心是索引,建立索引可以提高搜索效率。Faiss含有多种索引,如IndexFlatL2,IndexFlatIP,IndexIVFFlat等。建立索引之前需要明确向量的维数。大多数索引需要进行训练,以分析向量的分布。

当索引建立并训练后,可以对索引执行两个操作:addsearch

#例一,跟2.1例一承接
import faiss                   # make faiss available
index = faiss.IndexFlatL2(d)   # build the index,d is dimension
print(index.is_trained)        # 指示索引是否需要训练,输出为True,代表该类index不需要训练,只需要add向量进去即可
index.add(xb)                  # add vectors to the index
print(index.ntotal)            # 索引向量的数量

Faiss简单使用,自然语言处理,机器学习,faiss,python,transformer,人工智能

#例二,跟2.1例二承接

import faiss
num,d = embeddings.shape
index = faiss.IndexFlatL2(d)  
print(index.is_trained) 
index.add(embeddings) 
print(index.ntotal)

Faiss简单使用,自然语言处理,机器学习,faiss,python,transformer,人工智能

2.3 检索

Faiss在索引上进行的基本搜索操作是k-近邻搜索,即对于每个查询向量,在数据库中找到其k个近邻。

k = 4                          # we want to see 4 nearest neighbors
D, I = index.search(xb[:5], k) # sanity check
print(I)                       # I是每个待检索query最相似TopK的索引列表
print(D)                       # D是每个待检索query最相似TopK的索引对应的距离
D, I = index.search(xq, k)     # actual search
print(I[:5])                   # neighbors of the 5 first queries
print(I[-5:])                  # neighbors of the 5 last queries

Faiss简单使用,自然语言处理,机器学习,faiss,python,transformer,人工智能

k = 4
query = ['花呗如何更换银行卡呢']
query_embedding = model.encode(query)
if query_embedding.dtype!='float32':
    query_embedding = query_embedding.astype('float32')
else:
    pass
D, I = index.search(query_embedding, k)
print(I)
print(D)
#结果解读:I是检索返回结果排序,相对来说检索结果还算准确,但是分数有点大,说明文本向量化不够准确。

Faiss简单使用,自然语言处理,机器学习,faiss,python,transformer,人工智能

2.4 总结

在本节中使用的索引类型不需要训练,大家可以使用IndexIVFFlat(倒排索引)试试,倒排索引需要进行索引训练,而且检索效率更高。

3. 小结

Faiss检索使用简单,主要在于如何进行准确的文本向量化,才能确保返回正确的检索结果。目前大模型外接知识库中,其中一步就是文本检索,文本检索不准确就会导致“garbage in, garbage out“。

参考

  • https://www.writebug.com/article/1c571b48-1b41-11ee-8711-0242ac14000f

  • https://github.com/facebookresearch/faiss

  • https://zhuanlan.zhihu.com/p/357414033

  • https://zhuanlan.zhihu.com/p/133210698

  • https://blog.csdn.net/weixin_43791511/article/details/122513786文章来源地址https://www.toymoban.com/news/detail-593597.html

到了这里,关于Faiss简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于自然语言处理技术的智能客服与机器人

    作者:禅与计算机程序设计艺术 46.《基于自然语言处理技术的智能客服与机器人》 引言 随着互联网技术的快速发展,智能客服和机器人已经成为现代企业重要的运营手段之一。智能客服以自然语言处理技术为基础,能够实现高效、人性化的对话交互,有效提升客户满意度;

    2024年02月13日
    浏览(69)
  • 人工智能领域热门博客文章:自然语言处理和机器翻译

    作者:禅与计算机程序设计艺术 近年来,随着人工智能的迅猛发展,给人们生活带来的改变正在产生越来越多的影响力。其中,自然语言处理(Natural Language Processing,NLP)和机器翻译(Machine Translation,MT)被认为是两个最重要的研究方向。自然语言处理涉及到对人的语言进行

    2024年02月07日
    浏览(57)
  • 让AI分析更加简单:ApacheZeppelin如何简化自然语言处理任务

    作者:禅与计算机程序设计艺术 在自然语言处理(NLP)领域,有着许多需要解决的问题,其中最重要的当然就是文本分类、关系抽取等等了。目前业界有很多成熟的文本分类工具,比如维基百科的分类系统,但是这些分类工具的准确性一般都比较高,但同时也存在一定的局限性

    2024年02月06日
    浏览(51)
  • [自然语言处理] 自然语言处理库spaCy使用指北

    spaCy是一个基于Python编写的开源自然语言处理库。基于自然处理领域的最新研究,spaCy提供了一系列高效且易用的工具,用于文本预处理、文本解析、命名实体识别、词性标注、句法分析和文本分类等任务。 spaCy的官方仓库地址为:spaCy-github。本文主要参考其官方网站的文档,

    2024年02月15日
    浏览(100)
  • 基于自然语言处理的结构化数据库问答机器人系统

      完整代码下载:https://download.csdn.net/download/andrew_extra/88614388         知识库,就是人们总结出的一些历史知识的集合,存储、索引以后,可以被方便的检索出来供后人查询/学习。QnA Maker是用于建立知识库的工具,使用 QnA Maker,可以根据 FAQ(常见问题解答)文档或者 U

    2024年02月04日
    浏览(56)
  • 自然语言处理在智能客服和聊天机器人中的应用

    🎉欢迎来到AIGC人工智能专栏~自然语言处理在智能客服和聊天机器人中的应用 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:AIGC人工智能 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术

    2024年02月10日
    浏览(57)
  • 第九课:机器学习与人工智能、计算机视觉、自然语言处理 NLP及机器人

    各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料! 以区分飞蛾为例: 标记数据如下。 虚线为决策边界如下。 右下角表为混淆矩阵。 本质上是用任意线段来切分决策空间,不一定是直线。 不用统计学的算法。模拟人类学习的过程,将数据进行加权求

    2024年02月03日
    浏览(104)
  • 【Chatgpt4 教学】 NLP(自然语言处理)第九课 朴素贝叶斯分类器的工作原理 机器学习算法

    我在起,点更新NLP自然语言处理==》《 王老师带我成为救世主 》 为啥为它单独开章,因为它值得,它成功的让我断了一更,让我实践了自上而下找能够理解的知识点,然后自下而上的学习给自己的知识升级,将自己提升到能够解决当前遇到的问题的水平。 (1)--------------

    2023年04月15日
    浏览(52)
  • 自然语言处理学习笔记(三)————HanLP安装与使用

    目录 1.HanLP安装 2.HanLP使用 (1)预下载  (2)测试 (3)命令行  (4)测试样例 3.pyhanlp可视化 4. HanLP词性表 1.HanLP安装  HanLP的 Python接口由 pyhanlp包提供,其安装只需一句命令: 安装完成 2.HanLP使用 (1)预下载 第一次使用pyhanlp时,会自动下载许多hanlp的jar包(包含许多算法

    2024年02月14日
    浏览(55)
  • 【自然语言处理】大模型高效微调:PEFT 使用案例

    PEFT(Parameter-Efficient Fine-Tuning,参数高效微调),是一个用于在不微调所有模型参数的情况下,高效地将预训练语言模型(PLM)适应到各种下游应用的库。 PEFT方法仅微调少量(额外的)模型参数,显著降低了计算和存储成本,因为对大规模PLM进行完整微调的代价过高。最近的

    2024年02月13日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包