微信关注,获取更多

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

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

什么是矢量数据库

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

为什么使用矢量数据库

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

教程流程

这个教程的流程如下:

步骤一:设置环境

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

# 安装 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)

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

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

未经允许不得转载:大神网 » 搭建矢量数据库:存储、检索嵌入向量的完整教程

相关推荐

    暂无内容!