向量数据库是专为高维向量数据设计的存储与检索系统,其核心能力在于:
相似性搜索:在毫秒级时间内从十亿级数据中找到最相似项
多模态支持:统一管理文本、图像、音视频的向量表示
动态扩展:支持实时插入与增量更新
工业级案例:某电商平台使用向量数据库实现商品推荐,点击率提升23%,退货率降低15%
降维技术:
t-SNE:适合局部结构可视化
UMAP:保留全局结构更优
PCA:计算效率最高
可视化工具:
import matplotlib.pyplot as plt from sklearn.manifold import TSNE vectors = [...] # 高维向量列表 tsne = TSNE(n_components=2) vis_data = tsne.fit_transform(vectors) plt.scatter(vis_data[:,0], vis_data[:,1]) plt.show()
是否需要云托管? → 是 → Pinecone → 否 → 数据规模 > 1亿条? → 是 → Milvus → 否 → 需要快速开发? → 是 → ChromaDB → 否 → Qdrant
Collection:类似数据库的表,包含向量+元数据
Embedding Function:指定向量生成模型
Query:支持混合搜索(向量+元数据过滤)
import chromadb # 1. 初始化客户端 client = chromadb.PersistentClient(path="/data/chroma") # 2. 创建集合 collection = client.create_collection( name="products", metadata={"hnsw:space": "cosine"} # 相似度计算方式 ) # 3. 插入数据 collection.add( documents=["智能手机", "笔记本电脑"], metadatas=[{"category": "电子"}, {"category": "电脑"}], ids=["id1", "id2"] ) # 4. 相似性查询 results = collection.query( query_texts=["平板电脑"], n_results=2 ) print(results["documents"][0]) # 输出:['笔记本电脑', '智能手机']
混合查询:
results = collection.query( query_embeddings=[...], where={"category": {"$eq": "电子"}}, # 元数据过滤 n_results=10 )
性能调优:
# 调整HNSW参数 collection.modify( hnsw:ef_construction=200, # 控制索引精度 hnsw:M=16 # 控制内存占用 )
import pandas as pd from sentence_transformers import SentenceTransformer model = SentenceTransformer('BAAI/bge-base-zh') movies = pd.read_csv("movies.csv") # 生成向量 embeddings = model.encode(movies["description"].tolist())
collection.add( documents=movies["description"].tolist(), metadatas=movies[["genre", "year"]].to_dict('records'), ids=movies["id"].astype(str).tolist(), embeddings=embeddings.tolist() )
5.3 推荐查询
def recommend_movie(user_query): query_embed = model.encode([user_query]) results = collection.query( query_embeddings=query_embed.tolist(), n_results=5, where={"year": {"$gte": 2010}} # 过滤2010年后电影 ) return results["metadatas"][0] print(recommend_movie("浪漫的爱情故事")) # 输出:[{'title': '泰坦尼克号', 'genre': '爱情'}, ...]
索引算法:HNSW在精度与速度的最佳平衡
混合查询:结合向量相似度与元数据过滤
动态更新:支持实时增删改操作