>

简单了解向量搜索

前言 最近看了篇文章,了解到了Vector Search。什么是Vector Search?来看看GPT的解释: 向量搜索是一种利用向量表示数据,并基于向量之间的相似性进行搜索的技术。它不同于传统的基于关键词的搜索,能够捕捉数据之间更深层次的语义关系,从而提高搜索的准确性和效率。 相较于基于关键词的搜索,将文本、图片等非数值型数据转换为向量形式,更能发现数据的特征,并发现数据之间的相似性。 至于如何将非数值型数据转换为向量,来开下面这个例子: 用“1”表示“是”,用“0”表示“否” 交通工具 轮子数量 有引擎吗 陆地上运动吗 最大承载人数 汽车 44 11 11 44 自行车 22 00 11 11 三轮车 33 00 11 11 摩托车 22 11 11 11 帆船 00 00 00 2020 轮船 00 00 00 10001000 把非数值型数据转换为向量,实际上就是把这些数据的特征用数值表示。比如对于汽车来说,它在这个例子中对应的向量就是(4,1,1,4)(4,1,1,4)。 基础理论 向量之间的相似性 观察向量a\vec{a}b\vec{b}p\vec{p},哪个向量与p\vec{p}更“相似”?向量a\vec{a}p\vec{p}有着相同的方向,但模长更小;而b\vec{b}p\vec{p}有着相同的模长,但方向只是相近。如果相似指的是方向上的相似,那么a\vec{a}p\vec{p}更相似。而如果相似指的是模长,那么b\vec{b}p\vec{p}更相似。 在矢量搜索中,很少单独根据模长来判断两个向量是否相似。相似性通常取决于方向,或者方向和模长。 相似性的评估方法 评估两个向量是否相似,通常有四种数学方法: 欧式距离:直接计算两个向量“箭头”的直线距离。 d(a,p)=i=1n(aipi)2d(\vec{a}, \vec{p}) = \sqrt{\sum_{i=1}^{n} (a_i - p_i)^2} aia_i表示a\vec{a}的第ii个分量 曼哈顿距离:计算两个点之间沿着坐标轴行走的距离。 d1(a,p)=i=1naipid_1(\vec{a}, \vec{p}) = \sum_{i=1}^{n} |a_i - p_i| aia_i表示a\vec{a}的第ii个分量 点积:将相同维度的分量相乘再相加。 ap=i=1n(aibi)\vec{a} \cdot \vec{p} = \sum_{i=1}^{n}(a_i b_i) 余弦值:两个向量夹角的、余弦值。 cos(θ)=abab\cos(\theta) = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}| |\vec{b}|} 这四种方法中,欧氏距离是最常用的,而曼哈顿距离与欧氏距离相似,应用这两种方法得到的结果通常也相似。而当需要评估相似性的向量模长一致时,使用余弦值是更好的方法,因为它只与夹角相关。点积与余弦值类似,但在需要大量计算的情况下,点积通常有着更好的性能。 简单的例子 由于在屏幕上呈现二维向量较为方便,因此选取前言中的“轮子数量”与“有引擎吗”作为特征。得到4个向量,分别是(4,1),(2,0),(3,0),(2,1)(4,1),(2,0),(3,0),(2,1),它们在图上呈现为: 随后分别计算摩托车与自行车、三轮车、汽车的相似性:...

September 8, 2024 · 2 min