-
什么是矢量数据库
-
为什么向量数据库对AI
很重要
-
向量数据库的核心概念
-
选择矢量数据库时要考虑的因素
-
供您考虑的流行矢量数据库
-
实现矢量数据库的逐步指南
-
步骤1:安装风筝 p> li>
-
步骤2:创建Milvus客户端
-
步骤3:创建一个集合
-
步骤4:将数据插入集合
-
步骤5:创建索引
-
步骤6:搜索类似向量的样本
-
奖金:如何为矢量数据库准备数据
-
结论
什么是矢量数据库
向量数据库与所有数据库一样用于数据存储和检索,但这些数据库旨在处理高维矢量数据。 是特征或属性的数学表示
向量数据库相似性搜索:在给定搜索查询的数据库中找到相似的向量。
与SQL
(如SQL )相比为什么向量数据库在AI中很重要
-
向量数据库在AI中非常重要。这是因为他们处理大型多媒体数据,自然语言处理和神经网络
-
矢量数据库启用资源效率和时间效率的存储以及检索高维矢量数据。
-
高维矢量数据包括特征向量和嵌入,这些数据捕获复杂模式和数据关系
-
在AI中,需要搜索最近的邻居搜索,聚类和分类。这些类型的搜索是资源密集型的,因此需要相同的专用数据库
-
向量数据库提供快速准确的相似性搜索,从而提高了AI应用程序的性能和可伸缩性
向量数据库的核心概念
我们已经看到,向量数据库处理高维矢量数据
-
索引:向量数据库使用K-d树,球树和其他此类技术来执行高维矢量搜索,例如最近的邻居或聚类搜索
-
可伸缩性:这些数据库旨在处理大量数据,并且可以通过并行运行的多台机器来缩放数据库。
-
距离指标:vector数据库计算向量之间的相似性,例如余弦相似性,欧几里得距离和曼哈顿距离,以了解相似的向量与彼此之间的相似性,然后将它们群集成在一起
-
性能优化:查询延迟和内存使用优化对于AI应用程序至关重要,因此是向量数据库设计的
选择矢量数据库时需要考虑的因素
在考虑矢量数据库时,首先考虑项目的要求是什么。
当今市场上有许多矢量数据库。从轻巧到高性能和可扩展数据库
也有付费版本。有些是自我托管的,有些您可以作为SaaS产品购买
在选择项目
的正确矢量数据库时,您需要考虑的四个因素-
可伸缩性
-
绩效
-
社区支持
-
兼容性
让我们看这些单独
可伸缩性
您要处理的型号是什么,您也可以选择一个轻量级数据库,如果您的数据大小很小
如果您有一个大数据集,请确定数据库是否可以在多台计算机上缩放
如果项目是大规模的
,请考虑是否可以在多个数据中心上缩放数据库表现
- 可以通过以下指标来考虑性能
-
查询延迟
-
内存用法
-
索引时间
硬件加速度也非常重要,如今,大多数向量数据库都可以在GPU上运行,而不是CPU可以提高性能
在许多情况下,在考虑数据库时,您可以选择适合您的目的,适合每美元给定的绩效,您可以选择针对速度与准确性优化的数据库
兼容性
不同的数据库与不同的编程语言很好地运行,在使用矢量数据库
时尤其如此。检查您正在考虑使用项目中使用的编程语言的数据库
您在项目中使用的距离指标和索引技术是什么?数据库与该数据库兼容
数据库提供与您的项目集成的API,库和连接器
社区支持
围绕特定数据库的社区支持水平是多少?这很重要,因为获得社区支持,开发人员提供了很多支持,例如堆栈溢出的支持,有关如何实现某些东西或为特定目的设置数据库等文章等。
获得社区支持还意味着访问有关如何实施事物的教程,详细的文档和文章
具有大型社区的数据库也得到了很好的维护,并以错误修复,新功能和安全更新的形式获得定期支持
流行的矢量数据库供您考虑
这是当今市场上最受欢迎的4个矢量数据库
faiss :由大规模矢量数据库模型Facebook开发。它以其运行AI应用程序的性能和灵活性而受欢迎。它还支持GPU加速度,这是一个很棒的附加组件。它主要与python
兼容Milvus :广告宣传为企业用户最受欢迎的矢量数据库。 Milvus可以用于计算机视觉,机器学习和自然语言处理等应用中,并且也是开源的。它与AI中的大多数程序兼容,并支持多种索引技术,还提供GPU硬件加速和分布式部署
烦恼:这是Spotify开发的C ++库,它是开源和轻量级的。它搜索靠近给定点的空间中的点。
weaviate :编织是一个开源数据库,它提供了可提供层次可导航的小世界的HNSW,这是一种基于图的技术,经常在矢量数据库中使用。它在准确性和速度之间提供平衡,您可以指定哪些更可取。该技术可能需要比其他技术更多的RAM
实施矢量数据库的逐步指南
对于本指南,我们将使用Milvus
的最受欢迎的矢量数据库之一步骤1:安装米尔维斯
您也可以在Docker容器中安装Milvus。安装Milvus的硬件要求最少,您可以在Milvus网站上查看它们
本文由DeadSimplechat Chat API带给您您的网站和App
安装下载Milvus yaml文件
$ wget https://github.com/milvus-io/milvus/releases/download/v2.2.13/milvus-standalone-docker-compose.yml -O docker-compose.yml
下载yaml文件后,使用以下命令
启动米尔维斯
sudo docker-compose up -d
Creating milvus-etcd ... done
Creating milvus-minio ... done
Creating milvus-standalone ... done
然后您可以检查米尔维斯是否启动并通过
运行
$ sudo docker-compose ps
您会得到类似
的东西
Name Command State Ports
--------------------------------------------------------------------------------------------------------------------
milvus-etcd etcd -advertise-client-url ... Up 2379/tcp, 2380/tcp
milvus-minio /usr/bin/docker-entrypoint ... Up (healthy) 9000/tcp
milvus-standalone /tini -- milvus run standalone Up 0.0.0.0:19530->19530/tcp, 0.0.0.0:9091->9091/tcp
连接到米尔弗斯
检查Milvus正在运行的本地端口,然后用自定义名称替换容器名称
docker port milvus-standalone 19530/tcp
此命令将返回本地IP地址和端口号,您可以连接到它
停止风筝
您可以使用以下命令停止MILVU
sudo docker-compose down
创建nodejs项目
让我们在其中创建一个新的目录和CD
mkdir milvus-nodej
cd milvus-nodejs
接下来让我们像这样初始化项目
npm init -y
然后我们将安装米尔维斯和其他依赖关系
npm install milvus-2.2.12 --save
npm install
步骤2创建Milvus客户端
a。创建一个名为index.js
的新文件,并像
一样导入Milvus SDK
const {MilvusClient} = require("milvus-2.2.12");
步骤3:创建一个集合
现在,让我们定义一个集合模式,并包括数据字段和数据类型
const collectionSchema = {
collection_name: "test_collection",
fields: [
{
field_name: "vector",
data_type: "FloatVector",
type_params: {
dim: 128,
},
},
{
field_name: "id",
data_type: "Int64",
auto_id: true,
},
],
};
现在,让我们使用Milvus客户端创建一个集合
async function createCollection() {
const response = await milvusClient.createCollection(collectionSchema);
console.log("Collection has been created:", response);
}
createCollection();
步骤4:将数据插入集合中
a。准备要插入的数据
const vectors = [
{
id: 1,
vector: Array.from({ length: 128 }, () => Math.random()),
},
{
id: 2,
vector: Array.from({ length: 128 }, () => Math.random()),
},
];
b。将数据插入集合
async function insertData() {
const response = await milvusClient.insert({
collection_name: "test_collection",
fields_data: vectors,
});
console.log("Data has been added to the collection:", response);
}
insertData();
步骤5:创建索引
让我们定义参数,例如索引和度量类型
const indexParams = {
collection_name: "test_collection",
field_name: "vector",
index_type: "IVF_FLAT",
metric_type: "L2",
type_params: {
nlist: 1024,
},
};
现在,使用Milvus客户端,我们将创建一个索引
async function createIndex() {
const response = await milvusClient.createIndex(indexParams);
console.log("A new index has been created:", response);
}
createIndex();
步骤6搜索类似向量的样本
const searchParams = {
collection_name: "test_collection",
field_name: "vector",
top_k: 5,
search_params: {
anns_field: "vector",
metric_type: "L2",
query_records: Array.from({ length: 128 }, () => Math.random()),
round_decimal: 4,
},
};
现在让我们在数据库中进行示例搜索查询。为此,我们需要定义一些搜索参数,例如top-k结果和搜索半径
async function search() {
const response = await milvusClient.search(searchParams);
console.log("Results:", response);
}
search();
因此,我们在节点JS项目中实现了Milvus客户端。
奖励1:如何为矢量数据库准备数据
数据预处理和矢量数据库中的特征提取
在矢量数据库中,我们有3种用于数据预处理的方法,这些方法是
-
归一化
-
维度降低
-
功能选择
让我们详细考虑所有这些
正常化
归一化包括调整数据集值,使它们处于共同的比例。我们之所
涉及步骤
需要归一化的特征是具有不同尺度和测量单位的数值特征
有许多用于此
的方法最小最大缩放。在[0-1]的范围内缩放所有值。
z得分标准化:在这种方法中,我们使用统计信息扩展值。所有值均基于平均值(平均),标准偏差:这些值与平均值
有多远应用您喜欢的任何方法,但始终使用相同的缩放参数进行训练和测试集以避免数据泄漏
减少维度
这涉及减少数据集中的功能数量,但保留重要功能。
随着尺寸降低,模型运行迅速,计算复杂性降低并简化了数据。这是一些步骤
涉及步骤
搁置了尺寸的数量和我们在减少数据集中想要的差异的数量,然后相应地选择减少技术
主成分分析:此技术最大化方差,并使用线性方法将数据投影到较低的维空间
t分布的随机邻居嵌入:它保留了数据中的局部结构,是一种降低数据集维度的非线性方法
功能选择
在功能选择中,我们选择了最相关的功能,并丢弃与我们的用例无关的功能。这有助于降低噪音,使模型更容易解释并减少训练时间
涉及步骤
滤波器方法:这涉及根据所涉及的标准对特征进行排名。例如共同关联,共同信息和选择顶部K-Features
包装器方法:使用特定的机器学习模型评估功能并迭代地删除与我们的用例无关的功能
嵌入式方法:诸如Lasso和Ridge回归之类的方法应用正则化,从而降低了并不重要的特征的影响。此方法涉及特征选择以及模型培训。
将您最深入的任何方法应用到数据集中,然后选择顶部K功能并丢弃其他功能
需要Chat API的网站或应用
DeadSimpleChat是聊天API提供商
-
在几分钟内将可扩展的聊天添加到您的应用程序
-
1000万在线并发用户
-
99.999%正常运行时间
-
适度功能
-
1-1聊天
-
组聊天
-
完全自定义
-
聊天API和SDK
-
预制聊天
结论
在本文中,我们讨论了矢量数据库以及如何实现矢量数据库
我希望您喜欢这篇文章。感谢您阅读