[撒花]
本文是对:https://guangzhengli.com/blog/zh/vector-database/# 的总结。
有时间的可以去精读一下原文!
目录结构
引言
也许你最近可能听过这样的新闻,某向量数据库的初创公司刚写好 PPT,就获得了几千万的投资,某公司的开源的向量数据库因其代码的简陋而登上了 Hackernews 等等。在过去几个月时间中, AI 应用的发展如火如荼,带动了 AI 应用技术栈上下游的火爆,而向量数据库就是其中最热门的之一。
一、GPT 的缺陷
核心要点:GPT存在哪些主要缺陷限制了其应用?
GPT 存在以下缺陷:
- token 长度限制:输入文本长度不可超过特定 token 数目,例如 GPT-3 为 4096 tokens
- 无记忆能力:GPT 作为大型语言模型(LLM)没有记忆能力
- 使用成本高:GPT API 是按 token 计费,输入文本越长费用越高
二、向量数据库的崛起
核心问题:向量数据库的应用前景有哪些?
- 基于向量空间模型,可以存储非结构化数据
- 通过相似性搜索而非精确匹配检索信息
- 可降低 GPT 使用成本,应用于问答系统等场景
三、Vector Embeddings
要点:Vector Embedding的作用是什么?
- 使用 AI 模型生成包含语义信息的高维向量表示
- 将非结构化数据转换为语义向量,存储在向量数据库中
- 文本用 text-embedding-ada-002 生成,图像用 clip-vit-base-patch32 生成
四、特征和向量
问题:特征和向量的关系是什么?
- 提取数据的多种特征,在高维空间中表示为坐标
- 计算不同向量间欧几里得距离判断相似度
- 维度越多可以更准确判别相似性
五、相似性搜索 (Similarity Search)
要点:相似性搜索的常用算法有哪些?
5. 1 K-Means 和 Faiss
- 使用聚类算法将向量分组,限制搜索范围
- Faiss 使用多探针搜索调整搜索范围
- 缺点:聚类效果依赖参数选择,可能漏失边界样本
5.2 Product Quantization (PQ)
- 将高维向量分解为多个子向量,独立量化编码
- 大幅降低存储开销
- 查询时组合子向量得到原向量
- 缺点:量化带来信息损失,降低搜索质量
5.3 Hierarchical Navigable Small Worlds (HNSW)
- 构建多层图,从第一层搜索逐层逼近目标
- 保证搜索速度和结果质量
- 缺点:构建复杂,存储开销较大
5.4 Locality Sensitive Hashing (LSH)
- 使用高碰撞概率的哈希函数
- 将相似向量映射到同一存储桶
- 桶内向量数少,可快速搜索
- 缺点:hash结果依赖参数和数据分布
5.5 Annoy
- 基于森林的向量搜索实现算法
- 支持余弦相似度、欧式距离等测量
- 缺点:只支持余弦相似度等较简单测量
六、相似性测量 (Similarity Measurement)
问题:常见的相似性量化方法有哪些?
6.1 Euclidean Distance
- 反映向量间直线距离
- 考虑向量长度
- 应用场景:用户历史行为数量推荐
6.2 Cosine Similarity
- 反映向量间角度
- 不考虑长度
- 应用场景:语义搜索、文档分类
6.3 Dot product Similarity
- 简单快速
- 考虑向量长度和方向
- 应用场景:图像识别、语义搜索、文档分类
七、过滤 (Filtering)
要点:过滤对向量搜索有何作用?
- 先后过滤元数据实现精确匹配
- 优化过滤流程提高性能
八、向量数据库选型
问题:选择向量数据库需考虑的因素有哪些?
8.1 分布式
- 需要高可用性、容错性
- 使用分片和复制提高稳定性
8.2 访问控制和备份
- 支持细粒度权限控制、日志审计、数据备份
8.3 API & SDK
- 简单、完善的 API 设计提高开发效率
8.4 选型
- 综合考虑算法、性能、成本等因素
8.5 传统数据库扩展
要点:传统数据库也可以实现向量搜索
- 使用扩展实现向量搜索功能
- 如 PostgreSQL 的 pgvector, Redis 的 RediSearch
九、总结
要点:向量数据库和传统数据库应用展望
- 两种数据库各有优势,可以同时使用实现互补
#头条创作挑战赛#