《周伦光_pgvector构建私域知识库之存储和查询向量嵌入.pdf》由会员分享,可在线阅读,更多相关《周伦光_pgvector构建私域知识库之存储和查询向量嵌入.pdf(22页珍藏版)》请在三个皮匠报告上搜索。
1、Postgresql plug-in pgvector builds storage and query vector embedding of private domain knowledge base分享人:周伦光原理分析原理分析性能测试性能测试应用案例应用案例 应用实践应用实践contents目 录PART 01原理分析向量向量相似性相似性给定两个属性向量,A 和B,和 分别代表向量A和B的各分量,其余弦相似性由点积和向量长度给出相似性范围从-1到1。-1意味着两个向量指向的方向正好截然相反,1表示它们的指向是完全相同的,0通常表示它们之间是独立的,而在这之间的值则表示中间的相似性或相异
2、性对于文本匹配,属性向量A 和B 通常是文档中的词频向量。余弦相似性,可以被看作是在比较过程中把文件长度正规化的方法相似性相似性如果我们将短语画在2维图表上,维度:X 轴和 Y 轴短语 1 和 2 将彼此靠近绘制,因为它们的语义相似短语 3远离1和2,因为它们的语义相似过低关键是在构图过程中通过贪婪搜索算法记录下搜索最优路径,是一个类似于“交通枢纽”的无向图,这会导致某些顶点的出度激增NSWNSW对NSW的升级,基于图的方案,使用跳表结构代替NSW的链表结构通过空间换时间的方法将向量检索的复杂度从多重对数复杂度降至对数复杂度。HNSWHNSWIVF可以将向量分解为若干个子空间,并且在每个子空间
3、上使用倒排索引来加速搜索。PQ是一种有效的向量量化方法,可以将高维向量压缩为低维码本地,从而减少存储和计算成本IVF_PQIVF_PQ向量检索技术向量检索技术4 42 23 31 1向量索引向量索引是一种数据结构,可以将向量数据按照一定的规则进行划分和组织,以便快速地进行查询和检索查询优化查询优化为了提高查询效率,采用了一些查询优化技术,例如基于向量索引的查询优化、基于近似相似度计算的查询优化数据存储数据存储将数据存储为向量形式,每个向量代表一个数据对象。向量的维度数取决于数据对象的特征数相似度计算相似度计算查询操作主要是基于相似度计算计算该向量与数据库中所有向量的相似度,并返回相似度最高的几
4、个向量作为查询结果向量数据库原理向量数据库原理PART 02应用实践可以在现有的postgsql数据库中以插件的形式使用高度集成高度集成内置了对多种距离度量的支持,包括L2距离、余弦距离和内积。这种多功能性允许高度可定制的基于相似性的搜索和分析,以满足特定的应用需求支持多种距离度量支持多种距离度量提供了高效的索引选项,例如 k-最近邻(k-NN)搜索。因此,用户可以在保持高搜索准确性的同时实现快速查询执行索引支持索引支持利用熟悉的 SQL 查询语法进行向量操作。这种方法简化了具有 SQL 知识和经验的用户采用矢量数据库的过程,并避免他们必须学习新的语言或系统SQLSQLpgvector 继承了
5、postgresql的稳健性和安全性功能,与pg保持良好的版本和功能兼容稳定性稳定性优势优势向量函数向量函数03使用参考使用参考向量类型向量类型每个向量占用4*dimensions+8字节存储空间。每个元素都是一 个 单 精 度 浮 点 数(类 似 于Postgres 中real不精确浮点类型),并且所有元素都必须是有限的(没有NaN,Infinity或-Infinity)。矢量最多可以有 16,000 个维度。010204操作符描述+逐元素加法-逐元素减法欧氏距离负内积余玄距离功能描述cosine_distance(vector,vector)双精度余弦距离inner_product(vec
6、tor,vector)双精度内积l2_distance(vector,vector)双精度欧氏距离vector_dims(向量)整数维数vector_norm(vector)双精度欧氏范数功能描述avg(vector)vector平均值存储向量存储向量创建向量表:CREATE TABLE items(id bigserial PRIMARY KEY,embedding vector(3);更新向量:UPDATE items SET embedding=1,2,3 WHERE id=1;DELETE FROM items WHERE id=1;插入向量:INSERT INTO items(emb
7、edding)VALUES(1,2,3),(4,5,6);INSERT INTO items(id,embedding)VALUES(1,1,2,3),(2,4,5,6)ON CONFLICT(id)DO UPDATE SET embedding=EXCLUDED.embedding;查询向量查询向量获取向量的最近邻居:SELECT*FROM items ORDER BY embedding 3,1,2 LIMIT 5;获取距离:SELECT embedding 3,1,2 AS distance FROM items;让最近的邻居排成一排:SELECT*FROM items WHERE id
8、!=1 ORDER BY embedding (SELECT embedding FROM items WHERE id=1)LIMIT 5;vector_l2_opsvector_l2_opsvectorvector_ip_opsip_opsvector_cosine_vector_cosine_opsops有一个确定的数据后再建立索引,实现最佳聚类,否有一个确定的数据后再建立索引,实现最佳聚类,否则性不能佳则性不能佳IVFFLATIVFFLAT在聚类时,向量被直接添加到各个分桶中,不做任何在聚类时,向量被直接添加到各个分桶中,不做任何压缩。这种基于聚类,多簇搜索的方式搜索速度和准压缩。这种
9、基于聚类,多簇搜索的方式搜索速度和准确性都不错。确性都不错。索引向量索引向量建议列表大小等于建议列表大小等于 rows/1000.rows/1000.索引具有最佳列表大小索引具有最佳列表大小设置合适的设置合适的maintenance_work_memaintenance_work_mem m参数参数足够的内存用于索引足够的内存用于索引性能最优性能最优查询有对应的索引查询有对应的索引向量索引是向量索引是“近似最近近似最近邻邻”索引,索引,SQL SQL 必须以必须以正确的方式在正确的方式在“ORDER“ORDER BY”BY”子句中使用子句中使用“最近最近邻运算符邻运算符”PART 03性能测试
10、性能压测性能压测pgvectormilvusPART 04应用案例私域知识库私域知识库对pdf,csv,txt,md等文档进行unstructured lodder,对文本内容进行切割,保证不超过 Embeddings 模型的 tokens 限制,拆分成多个 chunk逐一对 chunk 调用 Embeddings 模型后获取对应的 vector 向量后,存储到pgvector,关键的数据主要是 vector 值即 chunk 内容根据用户问题调用 Embeddings 模型后获取该问题的 vector,在本地向量数据库进行查询,可以获取相似度 TopN 的 chunks数据整合数据整合把 TopN 的 chucks 作为 chat 接口的 context,再加上用户问题作为 Prompt,通过 GPT 模型获取相应的结果案例实践案例实践