【译】矢量数据库 101 - 非结构化数据简介

原文地址:Vector Database 101 - Introduction to Unstructured Data

1. 简介

欢迎阅读 Milvus 教程。这是第一篇教程,主要以文字形式介绍非结构化数据。我知道,这听起来并不是一个非常性感的话题,但在你按下浏览器选项卡上的小 x 按钮之前,请听我们把话说完。

新数据每天都在产生,无疑是全球一体化和全球经济的关键驱动力。从佩戴在手腕上的心率监测器到车队的 GPS 定位,再到上传到社交媒体上的视频,数据的生成速度正呈指数级增长。这些日益增长的数据量的重要性不容低估;数据可以帮助更好地服务现有客户、识别供应链的薄弱环节、找出劳动力效率低下的问题,并帮助公司识别和打入新市场,所有这些因素都能帮助公司(和您)创造更多收入。

还不相信吗?国际数据公司(又称 IDC)预测,到 2028 年,全球数据球(Datasphere)将增长到 400 ZB。届时,超过 30% 的数据将是实时生成的,而所有生成的数据中有 80% 将是非结构化的。

2. 结构化/半结构化数据

那么,究竟什么是非结构化数据呢?顾名思义,非结构化数据指的是无法以预定义格式存储或无法融入现有数据模型的数据。人为生成的数据"图像、视频、音频、文本等"都是非结构化数据的典型例子。但是,也有很多不那么平凡的非结构化数据例子。蛋白质结构、可执行文件哈希值,甚至人类可读代码,都是非结构化数据中近乎无限的三个例子。

另一方面,结构化数据指的是能以表格格式存储的数据,而半结构化数据指的是能以单层或多层数组/键值存储的数据。如果你还不明白这些,不要着急。请耐心等待,我们会提供一些示例来帮助你加深对数据的理解。

3. 一些具体实例

让我们先简要介绍一下结构化/半结构化数据。最简单地说,传统的结构化数据可以通过关系模型来存储。以图书数据库为例:

在上面的例子中,数据库中的每一行都代表一本特定的图书(以 ISBN 编号为索引),而列则表示相应的信息类别。建立在关系模型之上的数据库允许使用多个表,每个表都有自己独特的列集。这些表正式称为关系表,但为了避免将数据库与朋友和家庭成员混淆,我们只称它们为表。关系数据库中最流行、最著名的两个例子是 MySQL(1995 年发布)和 PostgreSQL(1996 年发布)。

半结构化数据是结构化数据的子集,不符合传统的基于表格的模型。相反,半结构化数据通常带有键或标记,可用于描述和索引数据。回到图书数据库的例子,我们可以将其扩展为半结构化的 JSON 格式:

json 复制代码
{
  ISBN: 0767908171
  Month: February
  Year: 2003
  Name: A Short History of Nearly Everything
  Author: Bill Bryson
  Tags: geology, biology, physics
},
{
  ISBN: 039516611X
  Name: Silent Spring
  Author: Rachel Carson
},
{
  ISBN: 0374332657
  Year: 1998
  Name: Holes
  Author: Louis Sachar
},
...

请注意,我们新 JSON 数据库中的第一个元素现在包含了月和标签这两个额外信息,而不会影响后面的两个元素。有了半结构化数据,就可以做到这一点,而无需为所有元素增加两列额外开销,从而实现更大的灵活性。

半结构化数据通常存储在 NoSQL 数据库(宽列存储、对象/文档数据库、键值存储等)中,因为半结构化数据的非表格性无法直接在关系数据库中使用。Cassandra(2008 年发布)、MongoDB(2009 年发布)和 Redis(2009 年发布)是当今最流行的三种半结构化数据数据库。请注意,这些流行的半结构化数据数据库是在流行的结构化数据数据库发布十多年后才发布的------请记住这一点,因为我们稍后会讲到这一点。

4. 模式转变

既然我们已经对结构化数据/半结构化数据有了扎实的了解,下面我们就来谈谈非结构化数据。与结构化/半结构化数据不同,非结构化数据可以采取任何形式,在磁盘上的大小可以任意增减,转换和索引所需的运行时间也大不相同。让我们以图像为例:同一只德国牧羊犬的三张正面连续图像在语义上是相同的。

语义相同?这到底是什么意思?让我们深入探讨一下语义相似性的概念。虽然这三张照片的像素值、分辨率、文件大小等都大相径庭,但三张照片都是同一只德国牧羊犬在同一环境中的照片。想想看,这三张照片的内容完全相同或接近相同,但原始像素值却相差甚远。这给使用数据的行业和公司带来了新的挑战^1^:我们如何才能以类似于结构化/半结构化数据的方式转换、存储和搜索非结构化数据?

说到这里,你可能会想:如果非结构化数据没有固定的大小或格式,我们该如何搜索和分析这些数据呢?答案是:机器学习(或更具体地说,深度学习)。在过去十年中,大数据与深度神经网络的结合从根本上改变了我们处理数据驱动型应用的方式;从垃圾邮件检测到逼真的文本到视频合成等任务都取得了令人难以置信的进步,某些任务的准确度指标达到或超过人类的水平。这听起来可能很可怕,但我们距离埃隆·马斯克(Elon Musk)提出的人工智能接管世界的愿景还有几十年的时间。

5. Embeddings 速成班

让我们回到正题。绝大多数神经网络模型都能将单个非结构化数据转化为浮点数值列表,也就是通常所说的embeddings 或嵌入向量(embedding vector)。事实证明,经过适当训练的神经网络可以输出代表图像语义内容的 embeddings^2^。在今后的教程中,我们将介绍使用预定算法生成 embeddings 的向量数据库用例。

一只东方黄雀。照片由 Patrice Bouchard 拍摄。

上面的照片提供了一个将非结构化数据转换成向量的例子。通过 ResNet-50 卷积神经网络,这张图片可以表示为长度为 2048 的向量,以下是前三个和后三个元素: [0.1392, 0.3572, 0.1988, ..., 0.2888, 0.6611, 0.2909]。由训练有素的神经网络生成的 embeddings 具有数学特性,这使它们易于搜索和分析。我们在此不做过多赘述,但要知道,一般来说,语义相似对象的嵌入向量(embedding vector)在距离上彼此接近。因此,搜索和理解非结构化数据可以归结为向量运算。

Embeddings 运算

如导言所述,到 2028 年,非结构化数据将占所有新创建数据的 80%。随着各行各业对非结构化数据处理方法的成熟和实施,这一比例还将继续增加,超过 80%。这将影响到每个人------你、我、我们工作的公司、我们志愿服务的组织等等。从 2010 年开始,面向用户的新应用需要数据库来存储半结构化数据(而不是传统的表格数据)。

解决方案是什么?人工智能时代的数据库------矢量数据库。欢迎来到我们的世界;欢迎来到 Milvus 的世界。

6. 非结构化数据处理

在我们一头扎进矢量数据库和 Milvus 之前,让我们花点时间谈谈如何处理和分析非结构化数据。对于结构化和半结构化数据,在数据库中搜索或过滤项目是非常简单的。举个简单的例子,用下面的代码片段(使用 pymongo)就可以查询 MongoDB 中某个作者的第一本书:

shell 复制代码
>>> document = collection.find_one({'Author': 'Bill Bryson'})

这种查询方法与传统关系数据库的查询方法并无二致,后者依靠 SQL 语句来过滤和获取数据。概念是一样的:结构化/半结构化数据数据库使用数学运算符(如<=、字符串距离)或逻辑运算符(如EQUALS、NOT)对数值和/或字符串进行过滤和查询。对于传统的关系数据库来说,这就是关系代数;对于不熟悉关系代数的人来说,相信我,这比线性代数要糟糕得多。你可能已经看到过通过关系代数构建极其复杂的过滤器的例子,但核心概念仍然是一样的------传统数据库是确定性系统,对于一组给定的过滤器,总是返回完全匹配的结果。

与结构化/半结构化数据的数据库不同,矢量数据库查询是通过指定输入查询矢量而不是 SQL 语句或数据过滤器(如 {'Author': 'Bill Bryson'})来完成的。该向量是非结构化数据的 embeddings 表示。举个简单的例子,在 Milvus 中可以通过以下代码段(使用 pymilvus)来实现:

python 复制代码
>>> results = collection.search(embedding, 'embedding', params, limit=10)

在内部,对大型非结构化数据集合的查询是通过一套统称为近似近邻搜索(简称 ANN 搜索)的算法来完成的。简而言之,ANN 搜索是一种优化形式,它试图找到与给定查询向量"最接近"的点或点集。注意 ANN 中的"近似"。通过利用巧妙的索引方法,矢量数据库可以在准确性/性能方面做出明显的权衡:增加搜索运行时间将使数据库更加一致,其性能更接近于确定性系统,总是能返回给定查询值的绝对近邻。相反,缩短查询时间会提高吞吐量,但可能会导致获取的查询值中真正最近的值更少。从这个意义上说,非结构化数据处理是一个概率过程^3^。

近似近邻搜索,可视化。

ANN搜索是矢量数据库的核心组成部分,本身也是一个庞大的研究领域;因此,我们将在今后的文章中深入探讨Milvus中的各种ANN搜索方法。

7. 结束

感谢您阅读到这里!以下是本教程的主要收获:

  • 结构化/半结构化数据仅限于数字、字符串或时间数据类型。借助现代机器学习的力量,非结构化数据可以表示为数值的高维向量。
  • 这些向量通常被称为 embedding,非常适合用来表示非结构化数据的语义内容。另一方面,结构化/半结构化数据在语义上是原样的,即内容本身等同于语义。
  • 非结构化数据的搜索和分析是通过 ANN 搜索完成的,这一过程本身具有概率性。而对结构化/半结构化数据的查询则是确定性的。
  • 非结构化数据处理与半结构化数据处理截然不同,需要彻底转变模式。这自然需要一种新型数据库------矢量数据库。

矢量数据库入门系列第一部分到此结束。欢迎来到 Milvus!在下一篇教程中,我们将更详细地介绍矢量数据库:

  • 首先,我们将鸟瞰 Milvus 矢量数据库。
  • 然后,我们将介绍 Milvus 与矢量搜索库(FAISS、ScaNN、DiskANN等)的不同之处。
  • 我们还将讨论矢量数据库与矢量搜索插件(传统数据库和搜索系统)的区别。
  • 最后,我们将讨论与现代矢量数据库相关的技术挑战。

下期教程再见。


  1. 从本质上讲,这涉及所有行业、所有公司和所有个人。包括你! ↩︎

  2. 在大多数教程中,我们将重点介绍神经网络生成的 embeddings 数据;但请注意,embeddings 数据也可以通过手工算法生成。 ↩︎

  3. Vector 数据库可以通过选择特定索引来实现确定性。 ↩︎

相关推荐
PGCCC7 分钟前
【PGCCC】postgresql 缓存池并发设计
数据库·缓存·postgresql
小爬虫程序猿13 分钟前
如何利用Python解析API返回的数据结构?
数据结构·数据库·python
wowocpp1 小时前
查看 磁盘文件系统格式 linux ubuntu blkid ext4
linux·数据库·ubuntu
Ai 编码助手7 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
多吃轻食7 小时前
大模型微调技术 --> 脉络
人工智能·深度学习·神经网络·自然语言处理·embedding
陈燚_重生之又为程序员7 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle7 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻7 小时前
MySQL排序查询
数据库·mysql
萧鼎7 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^7 小时前
数据库连接池的创建
java·开发语言·数据库