Vector向量就把一段文字的语义信息,转换成一串固定长度的数字列表,让计算机能“看懂”文字的含义并做相似度计算。简单说就是让计算机连接不同的文本是否表达同一个意思。
文本嵌入模型通过深度学习等技术,从文本提取语义特征并映射为固定长度的数字序列。向量嵌入的过程,我们一般选择合适的文本嵌入模型来完成。
text-embedding-v1模型可以生成1536维的向量。生成向量维度越多,就更好的记录文本的语义特征,做语义匹配会更加精准。更多的向量会在计算、存储和匹配过程中,带来更大压力:tradeoff of precise and performance.
向量的匹配通过算法实现,如余弦相似度。向量的数字序列,共同决定了向量在高纬度空间中的方向和长度,而余弦相似度主要就是撇去长度的影响,得到方向的夹角。夹角越小越相似,即方向相同。
余弦相似度:两个向量的点积 / 两个向量模长的乘积
import numpy as np
def get_dot(vec1, vec2):
"""
计算两个向量的点积
:param vec1: 向量1
:param vec2: 向量2
:return: 点积结果
"""
if len(vec1) != len(vec2):
raise ValueError("两个向量的长度必须相同")
dot_product = np.dot(vec1, vec2)
return dot_product
def get_norm(vec):
"""
计算向量的范数
:param vec: 向量
:return: 范数结果
"""
norm = np.linalg.norm(vec)
return norm
def cosine_similarity(vec1, vec2):
"""
计算两个向量的余弦相似度
:param vec1: 向量1
:param vec2: 向量2
:return: 余弦相似度
"""
ans = get_dot(vec1, vec2) / (get_norm(vec1) * get_norm(vec2))
print(ans)
return ans
if __name__ == "__main__":
vec1 = [1, 2, 3]
vec2 = [4, 5, 6]
cosine_similarity(vec1, vec2)