向量数据库的介绍与用途!

词向量

一个字、一个词、一句话、一篇文本、甚至一张图片可以用这样一个 多维坐标数据。

亦或者说 向量 记录对应的特征,而将文本转换为记录特征的向量就可以被称为词向量

向量数据库概念与用途

向量数据库就是一种专门用于存储和处理向量数据的数据库系统,传统的关系型数据库通常不擅长处理向量数据。

因为它们需要将数据映射为结构化的表格形式,而向量数据的维度较高、结构复杂,导致传统数据库存储和查询效率低下。

所以向量数据库应运而生。

在 RAG 中,我们将对应的知识文档按照特定的规则拆分成合适的大小,再转换成向量存储到向量数据库中。

当人类提问时,将人类提问 query 转换成向量并进行搜索,找到在特征上更接近的文本块。

这些文本块就可以看成和 query 具有强关联或者说有因果关系。

这样就可以将这些 文本块 作为这次提问的额外补充知识,让 LLM 基于补充知识+提问生成对应的内容,从而实现知识库问答。

向量数据库存储

向量数据库将数据以列形式存储,即每个列都有一个独立的存储空间,这使得向量数据库可以更加灵活地处理复杂的数据结构。

向量数据库还可以进行列压缩(稀疏矩阵),以减少存储空间和提高数据的访问速度。

并且在向量数据库中,将数据表示为高维向量,其中每个向量对应于数据点。

  • 这些向量之间的距离表示它们之间的相似性。

这种方式使得非结构化或半结构化数据的存储和检索变得更加高效。

以电影数据库为例,我们可以将每部电影表示为一个特征向量。

假设我们使用四个特征来描述每部电影:动作、冒险、爱情、科幻。

每个特征都可以在0到1的范围内进行标准化,表示该电影在该特征上的强度。

例如,电影阿凡达的向量表示可以是 [0.9, 0.8, 0.2, 0.9],其中数字分别表示动作、冒险、爱情、科幻的特征强度。

其他电影也可以用类似的方式表示。

如果我们想要查找与电影阿凡达相似的电影,我们可以计算向量之间的距离,找到最接近的向量,从而实现相似性匹配。

而无需复杂的SQL查询,这就像使用地图找到两个地点之间的最短路径一样简单。

相似性搜索算法

在向量数据库中,支持通过多种方式来计算两个向量的相似度。

例如:余弦相似度、欧式距离、曼哈顿距离、闵可夫斯基距离、汉明距离、Jaccard相似度等多种。

其中最常见的就是 余弦相似度欧式距离

余弦相似度

主要用于衡量向量在方向上的相似性,特别适用于文本、图像和高维空间中的向量。

它不受向量长度的影响,只考虑方向的相似程度。

欧式距离

衡量向量之间的直线距离,得到的值可能很大,最小为 0,通常用于低维空间或需要考虑向量各个维度之间差异的情况。

欧氏距离较小的向量被认为更相似。