向量的含义

1 向量(Vector) 就是文本的 '数字身份证'

它把一段文字的语义信息 转换成一串固定长度的数字列表,让计算机能看懂 ,文字的含义并做相似度计算。

  • 向量的计算 (文本嵌入过程),可借助文本嵌入模型实现,如text-embedding-v1

  • 向量的匹配通过算法实现,如余弦相似度

  • 向量的维度表示一段文本在多个抽象语义特征方面的强度

    - 维度数代表模型用多少个抽象语义特征方面的强度
    - 维度越多,做语义匹配越精准
    - 但性能压力也大
    

2 余弦相似度

向量的数字序列,共同决定了向量的高纬空间中的方向和长度,而余弦相似度主要就是撇除长度的影响,得到方向的夹角。夹角越越相似,即方向相同。

  • 夹角 = 0° → 余弦值 = 1 → 完全同向,最相似

  • 夹角 = 90° → 余弦值 = 0 → 完全无关

  • 夹角 = 180° → 余弦值 = -1 → 完全反向

        余弦相似度 = 方向相似度 = 夹角余弦值
         余弦相似度-> 俩个向量的点积 ÷俩个向量模长的乘积 
    

3 python 代码原理


"""  向量的点积   俩个向量同维度数字乘积之和"""
def get_dot( vec_a, vec_b):
     if len(vec_a)!=len(vec_b):
        raise ValueError('俩个向量必须维度数量相同') 
     dot_sum=0

     for a, b in zip(vec_a,vec_b):
        dot_sum+=a*b
         
     return dot_sum
  

"""  向量的模长的 对单个向量的每个数字求平方在求和 在开根号  """
#pip install numpy 
import numpy as np
def get_norm(vec):
    sum_square=0
    for v in vec:
        sum_square+=v*v
    return np.sqrt(sum_square)
 
"""  余弦相似度  俩个向量的点积 ÷俩个向量模长的乘积  """
def cosine_similarity(vec_a,vec_b):
  result=get_dot(vec_a,vec_b) / ( get_norm(vec_a)* get_norm(vec_b) )
  return result


if __name__ == "__main__":

   vec_a=[0.5,0.5]
   vec_b=[0.7,0.7]
   vec_c=[0.7,0.5]
   vec_d=[-0.6,-0.5]
   print('ab=',cosine_similarity(vec_a,vec_b))
   print('ac=',cosine_similarity(vec_a,vec_c))
   print('ad=',cosine_similarity(vec_a,vec_d))   
   
  • 余弦相似度:看方向,不看大小
    → 适合文本、推荐、AI 特征

4 一般生成环境用 pip install scikit-learn

# 导入引用
from sklearn.metrics.pairwise import cosine_similarity

if __name__ == "__main__":
 # 假设这是大模型生成的向量
     query_vec = [0.1, 0.3, 0.5]
     doc_vec = [0.12, 0.29, 0.48]

     score = cosine_similarity([query_vec], [doc_vec])[0][0]
     print("相似度得分:", score)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容