一、数据库和向量数据库
1. 数据库的定义和分类
数据库是指长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。从架构上看,数据库作为计算机三大基础软件(操作系统、数据库、中间件)之一,向下可充分发挥硬件算力,向上支撑上层的应用需求,是信息系统高效运行的关键基础。
按照组织架构来看,可以把数据库分为关系型和非关系型数据库。
关系型数据库:指使用表格形式来存储数据,并通过主键和外键的关系将表格连接在一起。特点是数据的结构是固定的,每个字段必须有特定的数据类型,体现了数据库与ACID的大一统(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)。关系型数据库适用于处理复杂的关系数据。
比较典型的关系型数据库包括:MySQL, PostgreSQL, SQL Server 等。
非关系型数据库:指不使用表格的形式来存储数据,而是使用键值对、文档或图形等不同的数据结构。特点是数据结构可以动态地更改,字段可以没有特定的数据类型。非关系型数据库适用于处理高速读写、大量数据和弹性扩展等需求。
比较典型的包括:MongoDB, Cassandra, CouchDB 等。
2. 向量数据库
向量数据库专门用于处理和管理向量数据,数据内容一般是多个数值组成的数据,用来表示某种特征或者属性,可以处理更多的非结构化数据。数据库储存的大部分是高维向量,高维向量是特征或属性的数学表示。每个向量都有一定数量的维度,范围从几十到几千不等,具体取决于数据的复杂性和粒度。向量通常是通过对原始数据(例如文本、图像、音频、视频等)应用某种变换或嵌入函数来生成的。
传统数据库中,我们通常是查询数据库中的行,其中的值与我们查询的内容完全匹配。在向量数据库中则不然,向量数据库主要是通过ANN算法(近邻最相似),凭借相似度量来查找与我们所查询内容最相似的量。例如查询“小猫”,向量临近的输出包括“猫”、“狗”、“狼”等动物(距离更近),而“香蕉”“苹果”则非我们要找的答案(距离更远)。
3. 向量索引的三个方法——PQ、LSH、HNSW
索引(Indexing)可以理解为给数据制作目录的过程,在后续的数据整理和查询中能够加快运行效率。因为向量数据库储存数据为向量,因此需要采用较为特殊的索引方式。
(1)PQ(Product Quantization,乘积量化)
PQ是一种针对高维度的有损压缩技术,将原始向量分解成为更小的部分,然后重新组合在一起,查询的时候会针对子块进行查询,因此不会丢失数据的重要信息(但仍然会有部分信息遗漏)。
主要步骤包括:
①分割:把完成向量切片,形成更小的子块,并给每一个子块进行量化
②代码分配:给每个子块创建一个“代码本”,“代码本”根据K均值聚类算法形成,主要显示了该子块所包含的数据特征(离散化值)
③编码:用算法给每个子块分配特定代码(一般来说,在第②步我们会找出代码本中最能体现该子块的一串代码作为子块的PQ码)
④查询:查询的时候,算法会自动把查询向量分解为子向量并对其量化,之后使用索引来查找距离最近的数值(通过对子向量之间距离的累积或加权求和)。
(2)LSH(Locality-sensitive hashing,局部敏感哈希算法)
LSH是一种在近似最近邻搜索上下文中建立索引的技术。它针对速度进行了优化,同时仍提供近似的、非详尽的结果。LSH 使用一组哈希函数将相似的向量映射到“桶”中,通过将查询项与同一桶中的项进行比较,可以快速识别出潜在的近似最近邻。如下所示:
在LSH中,哈希函数具有一种特殊的性质,即对于相似的项,它们被分配到相同的桶的概率较高,而对于不相似的项,它们被分配到相同的桶的概率较低。这种性质使得LSH能够通过仅比较具有相同哈希桶的项来减少搜索的规模。当然,近似的质量最终取决于哈希桶的数量,哈希桶越多,质量越好,但相应的计算成本也会上升,因此LSH对于大型数据适用性不强。
(3)HNSW(Hierarchical Navigable Small World,分层可导航小世界)
HNSW 方法是把高维向量分层的组织成一个图,每个节点是一个向量,每条边是一个距离或者相似度。每一层都是一个可导航小世界(Navigable Small World, NSW)图,即一个具有短路径和局部连通性的图。每一层的节点数目随机地减少,从而形成一个金字塔状的结构。这样做可以利用不同层次的边来加速搜索过程,并且可以用贪心算法来遍历图。这就像是在超市里,你有一个详细的地图,这个地图上标记了每个商品的位置,你可以通过这个地图来找到你想要的商品,而不需要在所有的区域之间穿梭。这也大大提高了效率。
(4)横向对比
4. 向量化关键步骤——Embedding
Embedding的输入端是高维度的数据,例如文字、图片、音频;输出端主要是向量形式,整个过程可以简单的阐述为数据降维(降维的方法是前文提到的索引技术,一般是通过PQ、HNSW和LSH)。
5. 向量数据库的优缺点
向量数据库主要功能是相似度搜索,因此更适合于大规模数据,且支持复杂查询。另一方面,在Embedding过程中,高维度数据可以被分拆成向量,因此在处理音频、视频、图像等数据的场景中,向量数据库的兼容性更强。
当然,向量数据库目前也存在产品成熟度较低、缺乏下游需求等短板。
二、向量数据库和AI
1. 提升训练速度
大模型发展愈发成熟,模型性能提升速度有目共睹,但性能提高往往带来更高的训练数据需求,大量的训练语料又代表着更长的训练时间和更高的训练成本。当前大模型训练过程中,主要面临几个问题:训练语料缺乏良好的时效性、重复或无效语料堆积、学习速度提升困难,这导致大模型对最新发生的事件缺乏认知。向量数据库的加入可以有效的改善这一问题,主要通过赋能数据导入、特征提取、模型构建等环节。在数据导入阶段,向量数据库主要对非结构型数据进行数据清理和筛选,完成数据的预处理;在特征提取阶段,向量数据库可以给数据加上向量特征,便于后续搜索和引用;在模型构建环节,向量数据库可以在微调等环节降低训练数据量,提升训练速度并控制成本。
向量数据库如何完成数据的预处理,并提升后续的数据抽取效率?目前AI模型训练数据包含的种类非常繁杂,很难用一个简单的低维数据库进行统一和查找。例如消费者购买记录中,包含有性别、年龄、居住地区、日常登录时间、搜索记录、购买价格段等文本型数据,也有用户喜爱偏好(款式、颜色等)等图像型数据,用传统的数据管理方法很难找到其中的关联性,从而在投喂大模型的过程中缺乏连贯的逻辑。向量数据库主要是基于向量相似度查询,用类似“模糊正确”的方式将有关联的数据进行归类,同时也可以将复杂的特征量进行向量化,从而转变成为格式统一的数据类型,以便给后续的模型训练提供相应的语料。
2. 解决LLM目前短板
目前大模型的记忆能力一般存在以下缺陷:
①时间局限性,目前模型的预训练数据都是旧数据,对于新发生的内容、私域数据等缺乏认知。
②文字长度局限性,目前大部分LLM都有一定的文本长度限制,超出后就会遗忘上下文,甚至在长度过半后就会出现较为明显的“遗忘”现象,会导致包括分析能力下降、无法进行大型文件分析、每次对话需要重启等问题。
③低准确率和幻觉等,主要出现在长对话后的部分内容遗忘以及模型“说胡话”。
针对上述问题,向量数据库可以有效改善大模型性能,具体可以表述为:
①更少的预训练或者更快速的学习过程,通过对数据进行分类、去重和清洗,实现数倍甚至十数倍的效率提升,模型的训练和开发成本将大幅下降。
②让大模型拥有长久记忆,扩宽的应用场景,这在包括员工培训、客服等方面可以明显提升用户体验。
③为大模型提供外挂知识库,提升模型的时效性和准确性。企业数据库可以通过向量数据库,对接企业模型,进行数据更新。
④向量数据库可以更好的处理高维数据,以适配多模态模型的需求。
![](https://oss-emcsprod-public.modb.pro/image/auto/modb_20240119_7883ae28-b66d-11ee-b4c0-38f9d3cd240d.png)
![](https://oss-emcsprod-public.modb.pro/image/auto/modb_20240119_78a88fa4-b66d-11ee-b4c0-38f9d3cd240d.png)
![](https://oss-emcsprod-public.modb.pro/image/auto/modb_20240119_78ca5152-b66d-11ee-b4c0-38f9d3cd240d.png)
![](https://oss-emcsprod-public.modb.pro/image/auto/modb_20240119_78f0ddd6-b66d-11ee-b4c0-38f9d3cd240d.png)
![](https://oss-emcsprod-public.modb.pro/image/auto/modb_20240119_790f98f2-b66d-11ee-b4c0-38f9d3cd240d.png)