赞
踩
本文将介绍三种常用的向量数据库:faiss, Milvus和Qdrant,并给出一个具体的使用例子。
向量数据库(Vector Database)是一种专门用于存储、管理、查询、检索向量的数据库,主要应用于人工智能、机器学习、数据挖掘等领域。
在向量数据库中,数据以向量的形式进行存储和处理,需要将原始的非向量型数据转化为向量表示(比如文本使用Embedding技术获得其表征向量)。
这种数据库能够高效地进行相似性搜索,快速找到最相似的向量,适用于人脸识别、图像搜索、推荐系统等需要相似性匹配的应用。
去年大模型的大火也带动了向量数据库的迅速发展,使得向量数据库成为热门方向之一,成为AI领域不可或缺的一项重要工具。
本文将介绍常见的三种向量数据库,并结合具体的样例文本给出它们在文本相似性搜索方面的应用。这三个向量数据库分别为:
我们使用的样例文本来源于百度百科的“中国载人登月工程”词条,将其本文切分为句子,过滤其中的纯数字的句子,保存为dengyue.txt文件。
对于上述文本,使用OpenAI的embedding模型text-embedding-ada-002来获取句子的表征向量(向量维度为1536,L2范数为1,即单位向量),并保存为numpy模块的npz文件,用于离线存储,避免每次使用时都需要加载。
示例的代码如下:
# -*- coding: utf-8 -*- import os import re import json from typing import List from dotenv import load_dotenv import requests import numpy as np from sentencex import segment load_dotenv() def get_embedding(texts: List[str]): url = "https://api.openai.com/v1/embeddings" payload = json.dumps({ "model": "text-embedding-ada-002", "input": texts, "encoding_format": "float" }) headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {os.getenv("OPENAI_API_KEY")}' } response = requests.request("POST", url, headers=headers, data=payload) embedding = [_["embedding"] for _ in response.json()['data']] response.close() return embedding def read_file(): with open("dengyue.txt", "r", encoding="utf-8") as f: content = [_.strip() for _ in f.readlines() if _.strip()] file_sentences = [] for line in content: sents = list(segment(language="zh", text=line)) for sent in sents: # filter if sent and not re.match(r'\[\d+\]', sent): file_sentences.append(sent) return file_sentences if __name__ == '__main__': sentences = read_file() sentences_embeddings = np.array(get_embedding(sentences)) np.savez('text_embedding.npz', sentences_embeddings) with open('text.json', 'w') as f: f.w
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。