北京建站的,上海网站制作与推广,贺州网站建,河南建达工程建设监理公司网站向量数据库的核心原理 向量数据库的核心原理可以概括为:将非结构化数据转换为高维向量,通过高效的索引结构和相似度计算算法,实现快速的近似最近邻搜索(ANN)。 1. 基本工作流程 原始数据 → 向量化 → 索引构建 → 相似度搜索 → 结果返回↓ ↓ ↓ …向量数据库的核心原理向量数据库的核心原理可以概括为:将非结构化数据转换为高维向量,通过高效的索引结构和相似度计算算法,实现快速的近似最近邻搜索(ANN)。1. 基本工作流程原始数据 → 向量化 → 索引构建 → 相似度搜索 → 结果返回 ↓ ↓ ↓ ↓ ↓ 文本/图像 嵌入模型 索引结构 距离计算 Top-K结果2. 核心组件详解2.1 向量化(Embedding)# 向量化过程示例fromsentence_transformersimportSentenceTransformer# 加载预训练模型model=SentenceTransformer('all-MiniLM-L6-v2')# 文本转向量text="人工智能改变世界"vector=model.encode(text)print(f"向量维度:{len(vector)}")# 输出: 384print(f"向量示例:{vector[:10]}")# 输出前10个维度# [ 0.0234, -0.0456, 0.0789, -0.0123, 0.0345, ...]原理:使用深度学习模型(如 BERT、GPT)将文本/图像映射到高维空间语义相似的数据在向量空间中距离更近向量的每个维度代表数据的某种特征2.2 距离度量(Similarity Metrics)importnumpyasnpdefcosine_similarity(vec1,vec2):"""余弦相似度:范围[-1, 1],越接近1越相似"""dot_product=np.dot(vec1,vec2)norm1=np.linalg.norm(vec1)norm2=np.linalg.norm(vec2)returndot_product/(norm1*norm2)defeuclidean_distance(vec1,vec2):"""欧几里得距离:范围[0, ∞),越接近0越相似"""returnnp.linalg.norm(vec1-vec2)defdot_product(vec1,vec2):"""点积:范围[-∞, ∞],越大越相似"""returnnp.dot(vec1,vec2)# 示例vec_a=np.array([1,2,3])vec_b=np.array([1,2,3.1])print(f"余弦相似度:{cosine_similarity(vec_a,vec_b):.4f}")print(f"欧氏距离:{euclidean_distance(vec_a,vec_b):.4f}")print(f"点积:{dot_product(vec_a,vec_b):.4f}")常用距离度量对比:度量方式公式特点适用场景余弦相似度cos(θ) = A·B/|A||B|关注方向,忽略长度文本相似度欧氏距离d = √Σ(ai-bi)²考虑绝对距离图像相似度点积A·B = Σai·bi计算简单,未归一化推荐系统曼哈顿距离d = Σ|ai-bi|对异常值不敏感高维稀疏数据2.3 索引结构(Indexing)这是向量数据库的核心,决定了查询性能。A. 树形索引# KD-Tree 原理示意classKDTreeNode:def__init__(self,point,left=None,right=None,axis=0):self.point=point# 分割点self.left=left# 左子树self.right=right# 右子树self.axis=axis# 分割维度defbuild_kdtree(points,depth=0):"""构建 KD-Tree"""ifnotpoints:returnNone# 选择分割维度(轮换使用)k=len(points[0])# 向量维度axis=depth%k# 按当前维度排序,选择中位数作为分割点points.sort(key=lambdax:x[axis])median=len(points)//2returnKDTreeNode(point=points[median],left=build_kdtree(points[:median],depth+1),right=build_kdtree(points[median+1:],depth+1),axis=axis)特点:适用于低维数据( 20维)高维数据时性能下降(维度灾难)精确搜索,但速度较慢B. 图形索引(HNSW - Hierarchical Navigable Small World)# HNSW 原理示意importrandomclassHNSWNode: