Search Posts

标签: 机器学习

大模型概念中的向量、向量数据库、向量检索、embeddings、实际应用示例

什么是向量数据库

再搞清楚这个问题之前,先需要知道什么是向量(vector)。

什么是向量

在AI领域中,向量是一个具有大小和方向的数学对象。它可以用来表示现实世界中的各种事物,例如图像、语音、文本等。

在机器学习和深度学习中,向量通常被用作表示数据的形式,其中每个向量的维度代表了不同的特征或属性。例如,在图像分类任务中,一个图像可以被表示为像素值组成的向量;在自然语言处理任务中,一句话可以被表示为单词嵌入(word embeddings)组成的向量。通过对这些向量进行计算和比较,机器可以从数据中提取出有用的信息,如相似性、聚类等。

拿比如人脸识别技术来说,计算机从照片或视频中提取出人脸的图像,然后将人脸图像转换为128维或者更高维度的向量。说到向量,就离不开embeddings。下面说下embeddings是什么。

什么是embeddings

embeddings是一个相对低维度的空间,可以将高维向量转换为低维度。embeddings使得在大型输入上搞机器学习更加容易,例如表示单词的稀疏向量。最理想的情况是,embeddings能够通过将语义上相似的输入放置在embeddings空间中彼此靠近来捕获输入的某些语义。可以在不同的模型中学习和重复使用嵌入。

这里有一个之前学习过的Google出品的机器学习的课程可以参考:课程网址

什么是向量检索

向量搜索是一种使用机器学习模型在索引中检测对象间语义关系的方法,以找到具有相似特征的相关对象。

向量搜索和推荐的解决方案变得越来越常见。如果你想在你的网站上添加自然语言文本搜索、创建图像搜索或构建强大的推荐系统,那么你就需要考虑使用向量技术。

为什么需要向量数据库

上面的一些概念解释了之后,其实在 AI 领域中,向量数据库是为了更高效地存储和检索大规模高维度的向量数据而设计的。由于传统的数据库系统并不擅长处理向量数据,因此需要专门的向量数据库来支持各种应用场景,例如语义搜索、图像检索、推荐系统等。

向量数据库被看做是Ai基础设施中最关键的一环,这种专门用于存储,索引和查询向量的数据库系统,可以让大模型更高效的存储和读取知识库,并且以更低成本的进行模型微调。Rust作为新基建的首选语言,也会在Ai基础设施中被大量采用。

与传统数据库不同,向量数据库可以使用特殊的索引结构和相似度度量方法,在高维度向量空间中快速查找相似的向量。例如,一些流行的向量数据库如 Faiss 和 Annoy 使用基于倒排索引和近似最近邻搜索(Approximate Nearest Neighbor Search)的技术,极大地加快了向量数据的查询速度。

向量数据库还提供了方便的 API 接口和工具库,使得用户可以轻松地将其集成到自己的应用程序中,并进行快速的向量搜索。因此,在许多需要处理大规模向量数据的 AI 应用中,向量数据库成为了不可或缺的组件。

向量数据库的实际应用:

我们以流行的向量数据库qdrant 为例,演示如何在实际业务中发挥向量数据库作用:

启动qdrant服务端

在Python中直接使用一个基于内存的qdrant的例子(类似sqlite本地数据库)

先安装python的依赖包,qdrant客户端:

pip install qdrant-client

python客户端提供了一种方便的方式在本地启动qrant 服务:

from qdrant_client import QdrantClient
qdrant = QdrantClient(":memory:") # 创建一个内存Qdrant实例,可以用来测试CICD
# 或者
# client = QdrantClient(path="path/to/db")  #使用持久化到磁盘的向量数据库文件

如果在生产中,则推荐使用命令直接运行docker容器作为qdrant服务端:

docker run -p 6333:6333 qdrant/qdrant

启动qdrant客户端

可以使用任何客户端库连接到服务端:

qdrant_client = QdrantClient("http://localhost:6333")
# 可参考官方具体应用例子https://qdrant.tech/documentation/examples/
# 如:
# 1. 语义搜索和推荐系统介绍。
# 2. 搜索和推荐报纸的文章。
# 3. 皮肤状况图像比对系统。
# 4. LlamaIndex问答系统。
# 5. 抽取式问答系统。

qdrant社区提供了 Python 等多种语言的客户端sdk。
qdrant的官方文档查看余下内容

支持向量机(SVM)的分类算法Linear SVC

Linear SVC(Linear Support Vector Classification)是一种基于支持向量机(SVM)的分类算法。与传统的SVM分类器不同,Linear SVC在处理线性可分的数据时采用了更快的线性核函数,因此比传统的SVM分类器更适用于大规模数据集。

Linear SVC算法的原理

将训练集的每个样本映射到高维空间中,以便在该空间中找到一个超平面来区分不同类别的样本。Linear SVC使用的是线性核函数,即将特征向量直接映射到高维空间中,而不需要进行复杂的非线性变换。这使得Linear SVC能够更快地训练模型,并且在处理大规模数据集时具有更好的性能。

在训练过程中,Linear SVC使用了一种称为“hinge loss”的损失函数来最小化误分类的样本数量。该损失函数使得模型对边界附近的样本更加敏感,从而提高了模型的泛化能力。

算法优点

与其他分类算法相比,Linear SVC具有许多优点,如:

  1. 在处理大规模数据集时具有更好的性能。

  2. 可以处理高维数据。

  3. 可以应对多类别分类问题。

  4. 具有良好的泛化能力和鲁棒性。

  5. 易于调整模型参数,可以通过调整正则化参数和损失函数等来控制模型的复杂度和性能。

在什么情况下建议选用Linear SVC算法?

可参照 机器学习算法速查表按流程选择来确定是否应该选择Linear SVC作为模型的算法。

总之,Linear SVC是一种高效、简单且具有良好性能的分类算法,适用于处理大规模数据集和高维数据。… 查看余下内容

机器学习模型算法速查表scikit-learn algorithm cheat-sheet的原理,如何用它选择模型算法?

Scikit-learn algorithm cheat-sheet 是一个流程图(算法速查表),旨在帮助用户选择适合其数据集的机器学习算法。该图根据数据集的属性(例如数据类型、数据量、标签类型等)和任务类型(例如分类、回归、聚类等)提供了一系列适合的算法建议。

假设我们有一批样本(样本数量少于50个),则根据算法速查表,会进入“get more data”流程,也就是样本数量不足,不建议基于这批样本进行机器学习。

再假设我们有一批样本(样本数量11万,样本CSV数据中有一列作为某个方面的数据的LABEL,即带有结果的数据),我们希望基于样本学习后,对以后新的数据进行类别预测。 那么根据流程,predicting a category(是预测类别的问题吗) ->YES(是)-> do you have labeled data(样本是否有标签)-> YES(是)。 流程至此,就到了图中的 “Linear SVC”算法位置

使用该工具选择模型算法的步骤如下:

  1. 确定数据集的属性和任务类型。

  2. 根据数据集的属性和任务类型在流程图中找到相应的部分。

  3. 根据流程图中的建议选择适合的算法。

  4. 根据所选算法的文档和示例学习如何使用该算法。

需要注意的是,该流程图只是一个参考工具,不是绝对的规则。选择模型算法时需要综合考虑数据集的实际情况以及算法的优劣势,并进行实际测试和评估。

此外,Scikit-learn algorithm cheat-sheet 的原理是基于机器学习算法的特性、优劣势以及适用场景等因素,将常见的机器学习算法分成了几个大类,并在流程图中以可视化的方式展示了它们之间的关系和特点。这为选择合适的机器学习算法提供了一个初步的参考,帮助用户在众多的机器学习算法中快速找到适合自己数据集的算法。… 查看余下内容

加好友请备注:chinaoss
您可以在微信公众号联系我们
我们将24小时内回复。
取消