跳至主要内容

精通 Pinecone 向量数据库教程:全面指南

通过我们对 Pinecone 的深度教程,踏入向量数据库的世界。了解如何高效处理高维数据,理解非结构化数据,并利用向量嵌入的力量驱动 AI 应用。
· 11分钟 阅读

使用 AI 探索

如果您是一名熟悉 SQL 和 MongoDB 等关系型与非关系型数据库的数据科学家或数据分析师,现在请准备好踏入一个令人兴奋的数据管理新世界。在本教程中,您将了解一种名为向量数据库的新型数据存储,它专为高效处理和运算向量数据而设计。在这篇 Pinecone 教程中,我们将重点介绍 Pinecone 向量数据库平台。

想进一步了解 Pinecone,请务必查看我们的课程:Vector Databases for Embeddings with Pinecone。

什么是向量数据库?

在传统数据库中,数据通常以行和列的形式存储,适用于结构化数据。然而,随着数据集日益复杂且维度更高,对更专业化方案的需求也随之而来。这正是向量数据库大显身手的地方。向量数据库并不采用传统的数据结构,而是优化用于处理向量——即多维空间中对数据点的数学表示。

向量数据在诸多领域得到广泛应用,包括机器学习、数据科学、计算生物学和自然语言处理(NLP)。它们可以表示数值特征、坐标、嵌入、文本、图像等。随着 AI 驱动应用的兴起,对向量化数据集的高效处理需求激增,向量数据库因此成为不可或缺的工具。

向量数据库示意图

图片来源

什么是 Pinecone?

Pinecone 是一款托管式向量数据库平台,专为解决高维数据所带来的独特挑战而构建。凭借前沿的索引与搜索能力,Pinecone 赋能数据工程师与数据科学家构建并落地可大规模运行的机器学习应用,从而高效处理和分析高维数据。

Pinecone 的关键特性

让我们来看看是什么让 Pinecone 如此好用:

全托管服务

作为全托管平台,Pinecone 负责所有与基础设施和运维相关的事项。这样开发者就能将精力集中在机器学习应用的开发与部署上,而无需担心基础设施与运维复杂性。

可扩展性

Pinecone 具备出色的可扩展性,能够轻松管理数十亿高维向量,并支持横向扩展。这使其非常适合应对最苛刻的机器学习工作负载。

实时数据摄取

Pinecone 无缝支持实时数据摄取,允许用户在新数据到来时即时存储与索引,且不会出现停机或中断。

低延迟搜索

通过采用复杂的索引算法,Pinecone 能为最近邻查询和相似度搜索提供低延迟的结果,确保面向时效性应用的快速而精确的输出。

无缝集成

Pinecone 的 API 以简洁直观为设计宗旨,简化了与现有机器学习工作流和数据流水线的集成过程。

理解非结构化数据与向量嵌入

文本嵌入模型

文本嵌入模型 - 图片来源

非结构化数据是指没有预定义或有组织格式的数据,这使得传统数据库难以高效地存储和处理。非结构化数据的例子包括文本、图像、音频和视频文件。

非结构化数据缺乏严格的结构,难以用传统方法直接分析。因此,为了在机器学习和 AI 应用中使用非结构化数据,通常需要通过向量嵌入将其转换并存储为多维数值表示。

嵌入在人工智能领域中发挥着关键作用,它提供了一种强大的技术,将诸如词语、图像或用户偏好等高维数据转换为紧凑的数值表示。这些数值嵌入使得 AI 模型能够高效处理并理解复杂信息。

将嵌入类比为针对特定任务的“专用词典”,有助于更容易理解它。例如,在文本挖掘项目中,嵌入通过分析词与词之间的关系来帮助我们把握词语的语义。该过程会生成一组嵌入,可视作任务相关的词典,提供反映词语语义的数值向量表示。不同词语之间的相似度和关系可通过其对应嵌入之间的距离来度量,从而使 AI 模型理解词语的上下文与重要性。

嵌入的重要性在于其能够降低数据维度,使机器学习模型更容易处理如表示词或物品的稀疏向量等大规模输入。借助嵌入,我们可以避免独热编码(one-hot encoding)的局限性——该方法将每个类别转换为单独的哑变量,在某些任务中会导致输入矩阵过于庞大。

如果您想了解更多关于词向量如何工作的内容,请查看我们的教程:LDA2vec: Word Embeddings in Topic Models。

回顾:

  • 向量数据库是一类专门设计用于高效处理和运算向量数据的数据库
  • Pinecone是一项全托管的向量数据库服务
  • 非结构化数据是指没有预定义或有组织格式的数据,如图像、文本、音频或视频
  • 嵌入是一种将高维数据转换为紧凑数值表示的强大技术

向量数据库如何工作?

您一定熟悉传统数据库的工作方式:在行和列中存储字符串与数字等标量数据。然而,向量数据库的运作方式不同,它处理向量,并采用不同的优化与查询方法。

在传统数据库中,查询通常在数据库中寻找精确匹配。相对地,向量数据库使用相似度度量来找到与我们的查询最匹配的向量。

向量数据库使用一系列算法,统称为近似最近邻(Approximate Nearest Neighbor,ANN)搜索。这些算法通过哈希、量化或基于图的搜索等技术来优化检索过程。

向量数据库的常见流程

向量数据库的常见流程(图片来源)

想学习如何使用 OpenAI API 创建文本嵌入,并将其存储到像 Pinecone 这样的向量数据库中吗?欢迎阅读 DataCamp 的Introduction to Text Embeddings with the OpenAI API 博文,了解其在文本分类、信息检索和语义相似度检测中的应用。

Pinecone 入门

开始使用非常简单,访问 pinecone.io 并注册一个免费账号。

Pinecone 注册页面

注册成功后,点击菜单中的 API Keys,并复制您的 environment 与 API key。在使用 Pinecone 的 Python 客户端时将会用到它们。

Pinecone API 页面

您也可以使用 pip 安装 Pinecone 的 Python 客户端。

pip install pinecone-client

Pinecone 的核心概念

在深入细节之前,让我们先了解一些您需要掌握的关键术语与概念:

Pinecone 索引(index)

在 Pinecone 中,索引代表向量数据的顶层组织结构。它负责接收与存储向量、处理对已存向量的查询,并在其数据内执行各种向量操作。每个索引基于一个或多个 pod 运行,以确保高效的功能性。

Pods

Pod 是预配置的硬件单元,用于承载 Pinecone 服务。Pinecone 中的每个索引运行在一个或多个 pod 上,增加 pod 的数量通常会带来更高的存储容量、更低的延迟与更高的吞吐量。此外,用户可以灵活创建不同规格的 pod 以满足特定需求。

距离度量(Distance Metrics)

距离度量是用于评估向量空间中两个向量相似度的数学方法。在向量数据库中,这些度量对于将存储的向量与给定的查询向量进行比较、从而找出最相似的对象至关重要。

创建向量索引时,您可以从不同的度量中进行选择:

  1. 余弦相似度。该度量评估向量空间中两个向量夹角的余弦值。取值范围为 -1 到 1,其中 1 表示向量完全相同,0 表示正交,-1 表示方向完全相反。
  2. 欧氏距离。该度量计算向量空间中两个向量之间的直线距离。取值范围从 0 到无穷大,0 表示完全相同,值越大表示差异越大。
  3. 点积。该度量计算两个向量模长与它们夹角余弦的乘积。取值范围从 -∞ 到 ∞,正值表示方向大致相同,0 表示正交,负值表示方向相反。

如何验证 Pinecone API 密钥

要在 Python 中使用 Pinecone,您需要一个 API 密钥。您可以在 Pinecone 控制台中选择“API Keys”来找到您的 API 密钥。在同一界面,您也能找到与项目关联的 environment 信息。

import pinecone
pinecone.init(api_key="API_KEY", environment = 'ENVIRONMENT')

如何创建 Pinecone 索引

要在 Pinecone 中创建一个索引,只需运行:

pinecone.create_index("myfirstindex", dimension=8, metric="euclidean")

运行该命令后,您会在控制台中看到一个 Pinecone 索引开始初始化:

Pinecone 中的入门索引

Pinecone 的数据写入与查询

要向索引中添加向量,可以使用 upsert 操作。upsert 会向索引新增一个向量;如果相同 ID 的向量已存在,则更新该向量。通过以下命令,您可以向索引 upsert 五个 8 维向量。

index = pinecone.Index("myfirstindex")

index.upsert([
    ("A", [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]),
    ("B", [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]),
    ("C", [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]),
    ("D", [0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4]),
    ("E", [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5])
])

切换到控制台,您将看到我们刚刚添加的五个向量。

在 Pinecone 中添加的向量

要检查向量的维度,您可以运行:

index.describe_index_stats()
>>> {'dimension': 8,
>>>  'index_fullness': 0.0,
>>>  'namespaces': {'': {'vector_count': 5}},
>>>  'total_vector_count': 5}

如何在 Pinecone 中查询索引并获取相似向量

在下面的示例中,我们对索引发起查询,检索与一个示例 8 维向量最相似的前三(3)个向量。该查询使用在创建索引时指定的欧氏距离度量。

index.query(
  vector=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3],
  top_k=3,
  include_values=True
)
>>> {'matches': [{'id': 'C',
>>>              'score': 0.0,
>>>              'values': [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]},
>>>             {'id': 'D',
>>>              'score': 0.0799999237,
>>>              'values': [0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4]},
>>>             {'id': 'B',
>>>              'score': 0.0800000429,
>>>              'values': [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]}],
>>>  'namespace': ''}

在 Pinecone 中删除索引

当索引不再需要时,您可以使用 delete_index 操作将其删除。

pinecone.delete_index("myfirstindex")

总结

本教程带您初步认识了向量数据库与 Pinecone。向量数据库为高效处理高维数据提供了专业化的解决方案,而这在机器学习、数据科学和 AI 驱动应用领域日益重要。

作为托管式向量数据库平台,Pinecone 以强大的能力脱颖而出,为数据工程师与科学家提供可扩展性、低延迟搜索以及实时数据摄取。凭借其无缝集成与友好的 API,Pinecone 简化了大规模机器学习应用的构建与部署流程。

教程还介绍了非结构化数据的概念,以及向量嵌入在将此类数据转化为紧凑数值表示以便分析方面所发挥的关键作用。

如果您对向量数据库的理念感兴趣并认为自己有相关应用场景,欢迎查看我们的实操课程:Vector Databases for Embeddings with Pinecone。您也可以尝试 Weaviate——一款用 Python 编写的开源向量数据库。若想进一步了解,请观看 Datacamp 的Vector Databases for Data Science with Weaviate in Python 网络研讨会。

Moez Ali

作者

Moez Ali

数据科学家,PyCaret 的创始人兼作者

主题