介绍

【关系数据库】的一个主要优点是它们可以保证数据的一致性和完整性。然而,关系数据库在处理大规模、高维度的数据时可能会遇到困难。例如,如果我们想要在一个包含数百万条记录的数据库中找到与给定记录最相似的其他记录,我们可能需要进行大量的计算。

【非关系数据库】的一个主要优点是它们可以很好地处理大规模的数据,并且可以很容易地进行水平扩展。然而,非关系数据库在处理复杂的查询和高维度的数据时可能会遇到困难。

【向量数据库】在处理高维度的数据和复杂的查询时更为高效。由于向量数据库可以直接在 多维空间/向量空间 中进行搜索,它们可以快速地找到与给定向量最相似的其他向量。此外,向量数据库还可以处理非结构化的数据,如图像和文本,这是关系数据库无法做到的。

【向量数据库】是以数学形式存储的数据集合。根据相似性指标而不是精确匹配来识别数据,从而使计算机模型能够理解数据的上下文。

向量 & 向量数据库,在 AI 发展之前就已经存在并被使用,但更多用于科研、研究领域。在 AI 时期爆发。

什么是向量?如何生成向量?

向量是一个数值数组,用于表示浮点在几个维度上的位置。

向量数据库中存储 aaaaaaa、aaaaaab、ccccccc 三个字符串,待匹配查询字符串为 acaaaab。

  1. 确定特征维度(暂定 8 维)
    1. 字符 a/b/c 的数量(3维)、是否包含 a/b/c 字符(3维)、字符串长度(1维)、不同字符数量(1维)
  2. 生成向量
    1. aaaaaaa=[7,0,0,7,1,1,0,0]
    2. aaaaaab=[6,1,0,7,2,1,1,0]
    3. ccccccc=[0,0,7,7,1,0,0,1]
  3. 归一化 - 方便海量计算(0 ≤ value ≤ 1)
    1. aaaaaaa = [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0]
    2. aaaaaab = [0.86, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0]
    3. ccccccc = [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
  4. 相似查询
    1. acaaaab = [0.71, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0]
    2. 余弦相似度
      1. acaaaab 与 aaaaaaa 的相似度:约 0.85
      2. acaaaab 与 aaaaaab 的相似度:约 0.98
      3. acaaaab 与 ccccccc 的相似度:约 0.26
其他维度及向量值:
维度:字符串长度 、字符 a/b/c 出现次数 、字符串中的 “a” 和 “b” 比率 、字符串的字母多样性 、字符串的字母顺序 、字符 “a” 和 “c” 的交替出现
aaaaaaa = [1, 1, 0, 0, 1, 0.143, 1, 0]
aaaaaab = [1, 0.857, 0.143, 0, 0.857, 0.286, 0.857, 0]
ccccccc = [1, 0, 0, 1, 0, 0.143, 1, 0]
acaaaab = [1, 0.714, 0.143, 0.143, 0.714, 0.429, 0.857, 0.286]
使用 欧氏距离 计算 acaaaab 于其他三者的距离:
acaaaab 与 aaaaaaa 的欧氏距离 ≈ 0.62
acaaaab 与 aaaaaab 的欧氏距离 ≈ 0.43
acaaaab 与 ccccccc 的欧氏距离 ≈ 1.40

算法

【欧氏距离】和【余弦相似度】,是向量相似度度量方法。

  1. 余弦相似度衡量的是两个向量的方向相似度,即它们之间的夹角。关注的是两个向量的方向是否相似,而不关心它们的大小(长度)。
    1. 文本/文档检索、推荐系统、图像检索