|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 糖逗 于 2026-3-7 11:56 编辑
1.什么是向量?
向量(Vector)就是文本的"数学身份证",它把一段文字的语义信息,转换成一串固定长度的数字列表,让计算机能"看懂"文字的含义并做相似度计算。
2.向量在RAG流程中的作用?
3.如何获得向量?
使用文本嵌入模型(如text-embedding-v1)通过深度学习等技术,从文本提取语义特征并映射为固定长度的数字序列。
ps:text-embedding-v1模型,可以生成1536维的向量(一段文本固定得到1536个数字序列),比较实用
4.如何确定2个向量文本的语意是否相似?
使用向量匹配技术,目前常用的是通过余弦相似度来计算
向量的数字序列,共同决定了向量在高维空间中的方向和长度。而余弦相似度主要就是撇除长度的影响,得到方向的夹角。夹角越小越相似,即方向相同。
5.手搓余弦相似度代码
- import numpy as np
- """
- 计算两个向量的余弦相似度(衡量方向相似性,剔除长度影响)
- 参数:
- vec_a (np.array): 向量A
- vec_b (np.array): 向量B
- 返回:
- float: 余弦相似度结果(范围[-1,1],越接近1方向越一致)
- 公式:
- cos_sim = (vec_a · vec_b) / (||vec_a|| × ||vec_b||)
- 拆解:
- 1. 点积:vec_a · vec_b = vec_a[0]×vec_b[0] + vec_a[1]×vec_b[1] + ... + vec_a[n]×vec_b[n]
- 2. 模长:||vec_a|| = √(vec_a[0]2 + vec_a[1]2 + ... + vec_a[n]2)
- 3. 模长:||vec_b|| = √(vec_b[0]2 + vec_b[1]2 + ... + vec_b[n]2)
- A: [0.5, 0.5]
- B: [0.7, 0.7]
- C: [0.7, 0.5]
- D: [-0.6, -0.5]
- """
- def get_dot(vec_a, vec_b):
- """计算2个向量的点积,2个向量同维度数字乘积之和"""
- if len(vec_a) != len(vec_b):
- raise ValueError("2个向量必须维度数量相同")
- dot_sum = 0
- for a, b in zip(vec_a, vec_b):
- dot_sum += a * b
- return dot_sum
- def get_norm(vec):
- """计算单个向量的模长:对向量的每个数字求平方在求和在开根号"""
- sum_square = 0
- for v in vec:
- sum_square += v * v
- # numpy sqrt函数完成开根号
- return np.sqrt(sum_square)
- def cosine_similarity(vec_a, vec_b):
- """余弦相似度:2个向量的点积 除以 2个向量模长的乘积"""
- 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))
复制代码
学习视频: https://www.bilibili.com/video/BV1yjz5BLEoY/?p=21&share_source=copy_web&vd_source=792a2cb63a1882bff4ed856eadc41a71
|
|