搭建矢量数据库:存储、检索嵌入向量的完整教程

在信息时代,数据的处理和分析已经成为了一个非常重要的领域,尤其是在人工智能和机器学习的应用中。很多时候,我们需要将非结构化的数据,如文本、音频、视频等,转化成向量形式,以便计算机能够理解和处理。为了存储、管理和检索这些嵌入向量,矢量数据库应运而生。本教程将带您一步步搭建一个矢量数据库,让您能够存储、索引和搜索嵌入向量,以支持各种实际应用,如聊天机器人、主题建模等。

什么是矢量数据库

矢量数据库是一种专门用于存储、管理和搜索嵌入向量的数据库。随着人工智能在自然语言处理、图像识别等领域的广泛应用,将非结构化数据编码为向量以供机器学习模型使用的需求逐渐增加。矢量数据库应运而生,成为企业解决这些应用需求的有效工具。

为什么使用矢量数据库

矢量数据库使企业能够在安全、可扩展的环境中使用嵌入向量来解决各种应用需求,如问答系统、聊天机器人、推荐服务等。许多客户在小规模应用中成功使用嵌入向量,但性能和安全性问题阻碍了它们进一步推广到生产环境。我们认为矢量数据库是解决这一问题的关键组成部分。

教程流程

这个教程的流程如下:

步骤一:设置环境

首先,我们需要设置开发环境,导入所需的库,并选择要使用的嵌入模型。

# 安装 Typesense 客户端
!pip install typesense

# 安装 wget 以下载数据
!pip install wget

import openai
import pandas as pd
import numpy as np
import os
import wget
from ast import literal_eval
import typesense

# 设置嵌入模型
EMBEDDING_MODEL = "text-embedding-ada-002"

步骤二:加载数据

在这一步,我们将加载事先准备好的数据,这些数据已经包含了嵌入向量。

# 下载包含嵌入向量的数据
embeddings_url = 'https://cdn.openai.com/API/examples/data/vector_database_wikipedia_articles_embedded.zip'
wget.download(embeddings_url)

# 解压数据
import zipfile
with zipfile.ZipFile("vector_database_wikipedia_articles_embedded.zip","r") as zip_ref:
    zip_ref.extractall("../data")

# 读取数据
article_df = pd.read_csv('../data/vector_database_wikipedia_articles_embedded.csv')

# 转换向量列的格式
article_df['title_vector'] = article_df.title_vector.apply(literal_eval)
article_df['content_vector'] = article_df.content_vector.apply(literal_eval)
article_df['vector_id'] = article_df['vector_id'].apply(str)

步骤三:建立矢量数据库

这一步中,我们将使用 Typesense 来建立一个本地矢量数据库,然后将嵌入向量导入数据库。

# 设置 Typesense 客户端
typesense_client = typesense.Client({
    "nodes": [{
        "host": "localhost",
        "port": "8108",
        "protocol": "http"
    }],
    "api_key": "xyz",
    "connection_timeout_seconds": 60
})

# 删除已存在的集合
try:
    typesense_client.collections['wikipedia_articles'].delete()
except Exception as e:
    pass

# 创建新的集合
schema = {
    "name": "wikipedia_articles",
    "fields": [
        {
            "name": "content_vector",
            "type": "float[]",
            "num_dim": len(article_df['content_vector'][0])
        },
        {
            "name": "title_vector",
            "type": "float[]",
            "num_dim": len(article_df['title_vector'][0])
        }
    ]
}

create_response = typesense_client.collections.create(schema)
print(create_response)

# 向集合中导入向量数据
document_counter = 0
documents_batch = []

for k,v in article_df.iterrows():
    document = {
        "title_vector": v["title_vector"],
        "content_vector": v["content_vector"],
        "title": v["title"],
        "content": v["text"],
    }
    documents_batch.append(document)
    document_counter = document_counter + 1

    if document_counter % 100 == 0 or document_counter == len(article_df):
        response = typesense_client.collections['wikipedia_articles'].documents.import_(documents

_batch, {'action': 'upsert'})
        documents_batch = []

步骤四:搜索嵌入向量

最后一步是使用矢量数据库来搜索嵌入向量。我们将使用 Typesense 的 Python 客户端来执行查询。

# 搜索相关文章
search_parameters = {
    'q': 'machine learning',
    'query_by': 'content_vector',
    'num_typos': 0,
    'per_page': 5,
    'page': 1,
    'sort_by': 'num_results',
    'filter_by': '',
    'facet_by': ''
}

search_results = typesense_client.collections['wikipedia_articles'].documents.search(search_parameters)
print(search_results)

以上就是搭建矢量数据库的简要教程。使用矢量数据库,您可以存储大量嵌入向量,并以高效的方式进行检索和搜索。这对于各种应用,尤其是自然语言处理和推荐系统,非常有用。

请根据您的具体需求进行进一步的优化和扩展,以构建适合您项目的矢量数据库。

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:搭建矢量数据库:存储、检索嵌入向量的完整教程

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年12月15日
下一篇 2023年12月15日

相关推荐

  • 在Ubuntu上使用Shell脚本和定时任务管理数据库:自动化数据处理的完美解决方案

    在现代信息时代,数据管理和处理对于各种组织和个人都至关重要。Ubuntu是一种功能强大的操作系统,而Shell脚本和定时任务是自动化数据管理的强大工具。本教程将向您展示如何在Ubuntu上使用Shell脚本和定时任务来有…

    2023年10月12日
    00
  • 为什么在C#中一个类一个命名空间?解析命名空间的使用

    在软件开发领域,我们时常会遇到一些让人不解的编程习惯或者代码风格,有时候甚至会觉得“这样写有点怪”。今天,我们将探讨一个有关C#编程中的命名空间使用的话题,为什么有些人喜欢在C#中一个类一个命名空间?让我…

    2023年10月15日
    00
  • 在 Ubuntu 20.04 上安装 Docker 的教程

    一天,王大神坐在电脑前,准备开始一个新的项目。他需要在自己的 Ubuntu 20.04 系统上安装 Docker,以便更轻松地创建、部署和运行应用程序。然而,他意识到自己对 Docker 的安装过程并不熟悉。于是,他决定寻找一份…

    2023年3月19日
    00
  • 禁止IPv6地址的HTTP访问并关闭连接的解决方法

    在配置Nginx服务器时,经常需要处理不同类型的访问请求,包括IPv6地址的HTTP访问。有时候,我们希望禁止IPv6地址的HTTP访问,并关闭连接,以增强安全性。本文将介绍如何在Nginx中实现这一目标,确保IPv6地址的HTTP…

    2023年11月1日
    00
  • 知乎网页版入口:解锁知识分享的大门

    在数字时代,知识的获取变得前所未有的便捷。知乎作为一个卓越的知识分享平台,在让用户分享知识的同时,也让用户更容易获取知识。但有一些用户想要在电脑上使用知乎,却不知道知乎网页版的入口在哪里。本文将为大…

    2023年10月9日
    00
  • 深度学习与自然语言处理:LangChain、Deep Lake和OpenAI实现问答系统

    深度学习和自然语言处理领域一直是人工智能中备受关注的话题。如何构建一个强大的问答系统一直是研究人员和工程师们的追求。本教程将向您展示如何使用LangChain、Deep Lake和OpenAI实现一个强大的问答系统,让您的…

    2023年10月14日
    00
  • 统信UOS操作系统重置密码

    在使用统信UOS(UnionTech UOS)操作系统时,有时候我们可能会忘记登录密码或需要重置密码。虽然这听起来可能有些复杂,但实际上,只要你熟悉Linux和GRUB引导,重置密码的过程非常简单。本教程将为你详细介绍如何在…

    2022年7月20日
    00
  • 优化种子文件批量转换成磁力链的Python代码

    种子文件转换成磁力链是一个常见的需求,特别是对于那些喜欢分享和下载种子文件的人来说。在本教程中,我们将介绍如何优化已有的Python代码,以实现将多个种子文件批量转换成磁力链的功能。通过模块化、改进变量名…

    2023年12月18日
    00
  • 用Python实现服装图像分类

    服装图像分类是机器学习领域中的一个重要任务,它涉及对图像中的不同服装类别进行准确的自动识别。无论是在电子商务领域的商品分类,还是在智能家居中的虚拟试衣间,图像分类都有着广泛的应用。本教程将详细介绍如…

    2023年8月23日
    00
  • 使用深度学习模型预测实时路况

    在繁忙的城市生活中,交通拥堵是一个不可避免的问题。无论是上下班还是外出旅行,我们都可能受到交通路况的影响。然而,随着科技的进步,深度学习模型的出现为预测和管理实时路况提供了新的可能性。本教程将详细介…

    2023年5月10日
    00