duckdb
DuckDB 0.10.0引入了新的数据类型Array
Array 不同于Postgres的数组类型(Postgres的是可变长度的),DuckDB的 Array 列存储固定大小的数组
目前相似度计算支持 单精度浮点数(4 字节)
DuckDB的 FLOAT4 = numpy.float3
目前vss功能还有待丰富--持续关注
Vector
向量(Vector)是连接知识库和LLMs的关键媒介,未来的一切都是向量化的,
通过向量嵌入(Vector Embedding)来实现一切对象的向量化表示,而向量嵌入、向量计算与大模型一起构建智能应用的技术
向量(Vector)的存储和搜索是向量数据库的基本功能,也是构建智能应用的关键技术
插件
VSS(Vector Similarity Search (VSS) Extension)扩展插件,支持vss 搜
SELECT extension_name, installed, description FROM duckdb_extensions();
安装和加载VSS插件
duckdb为支持向量搜索,引入VSS (Vector Similarity Search (VSS) Extension) 插件扩展,
VSS插件扩展引入一个新的索引类型:
HNSW(Hierarchical Navigable Small Worlds),这是一种基于图的索引结构,特别适用于高维向量相似性搜索
duckdb数据类型
DuckDB's new fixed-size ARRAY type
duckdb 支持ARRAY 数据类型,Array列存储固定大小的数组。
列中的所有字段必须具有相同的长度和相同的基础类型。
数组通常用于存储数字数组,但可以包含任何统一的数据类型,包括ARRAY、LIST和STRUCT类型。
Array 数据类型可用于存储诸如词嵌入(word embeddings )或图像嵌入(image embeddings)之类的向量(vectors )
HNSW索引创建语句中传递一个度量参数来决定使用何种距离度量。支持的度量有l2sq、cosine和inner_product,
分别对应三种内置的距离函数
:array_distance、array_cosine_similarity和array_inner_product。默认值是l2sq,它使用欧氏距离(array_distance)
命令
array_value(index):创建一个包含参数值的数组
array_cosine_similarity(array1, array2):计算大小相同的两个数组之间的余弦相似度
loading the vss extension and then ATTACHing the database file,
which ensures that the HNSW index functionality is available during WAL-playback
hnsw_enable_experimental_persistence
PostgreSQL
PostgreSQL中使用开源pg_vector扩展来查询向量数据
生成向量嵌入是一个计算密集型过程
存储方面:PostgreSQL的TOAST系统允许大型列值跨多个页面存储,而不是内联存
索引方面:HNSW 索引是基于图的 Hierarchical Navigable Small Worlds
PostgreSQL中的快速最近邻连接(Fast Nearest Neighbor Search)是一种用于在数据库中高效地查找最近邻数据点的技术。
它可以帮助我们在大规模数据集中快速找到与给定数据点最接近的数据点。
快速最近邻连接的分类:
基于索引的方法:通过构建索引结构来加速最近邻搜索,常见的索引结构包括KD-Tree、R-Tree等。
基于图的方法:将数据点之间的关系表示为图结构,利用图算法来进行最近邻搜索,常见的图算法包括最短路径算法、最小生成树算法等
pgvector 支持两种主要类型的搜索:精确最近邻搜索(ENN)和近似最近邻搜索(ANN)
索引技术:不同的 ANN 算法(如 HNSW 和 IVF)提供了不同的性能和准确性权衡。
K-means本质上是无监督学习,而KNN是监督学习;
K-means是聚类算法,KNN是分类(或回归)算法
The k-nearest neighbors (KNN)
最近邻算法是「基于实例的」,这就意味着其需要保留每一个训练样本观察值。最近邻算法通过搜寻最相似的训练样本来预测新观察样本的值
KNN是有监督学习的分类算法,有对应的类别输出-
由于KNN是一种基于实例的学习方法,它不需要显式的训练阶段,只需在检测时计算距离
依次计算每个样本点与它最近的K个样本的平均距离,再利用计算的距离与阈值进行比较,如果大于阈值,则认为是异常点
K 均值聚类
k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法
参考
https://duckdb.org/docs/extensions/vss
https://github.com/duckdb/duckdb_vss
使用SNB 探索DuckDB的向量相似性搜索(Vector Similarity Search):发挥GenAI潜能 https://zhuanlan.zhihu.com/p/698477442
DuckDB也要加入向量数据库的战局? https://www.modb.pro/db/1760486338210123776
国内用户如何使用 DuckDB 访问 Hugging Face 上超15万 数据集? https://www.modb.pro/db/1811574404587020288