Python中的ChromaDB

2025年3月7日 | 阅读6分钟

ChromaDB 是最先进的开源向量数据库,针对嵌入式的 I/O 和管理进行了优化。嵌入式是将机器学习技术提取出的数值实体,有助于编码数据(如文本、图像或任何形式的数据)的上下文。随着嵌入式在各种应用(如 自然语言处理应用、推荐系统和 搜索引擎)中的使用日益增长,ChromaDB 为存储和索引这些密集向量提供了解决方案。

ChromaDB 通过实现近似最近邻 (ANN) 搜索算法的支持,使开发人员能够轻松找到接近给定查询的向量,非常适合语义搜索、推荐和异常检测。它旨在与 Python 一起使用,提供简化的 API,允许用户创建集合、插入数据和查询数据,同时还拥有元数据过滤器和持久性等众多功能。

ChromaDB 的关键点

  1. 向量数据库: ChromaDB 是一个开源模式,用于快速存储和查询高维嵌入,这些嵌入通常来自机器学习算法,例如 Transformer。
  2. 高效的嵌入搜索: ChromaDB 最支持快速近似最近邻 (ANN) 搜索,适用于语义搜索、推荐系统和异常检测等。
  3. Python 集成: ChromaDB 拥有一个易于使用的 Python API,可用于创建集合、将向量(嵌入)添加到其中,并执行基于相似性的搜索。
  4. 元数据支持: 与传统向量不同,ChromaDB 允许添加和存储元数据,从而能够基于更多属性搜索向量;为灵活搜索提供更多控制。
  5. 持久化存储: 除了内存处理,ChromaDB 还采用 SQLite 等功能将数据保存到磁盘,从而在当前会话结束后仍可访问。

Python 中 ChromaDB 的基本用法

您可能已经注意到,ChromaDB 的 API 非常简洁,并且不会掩盖处理向量数据(嵌入)的过程。为了简化对 CNTK 库的理解,本文提供了有关其基本用法、CNTK 客户端、插入向量和查询向量的分步指南。

安装

首先,您需要安装 ChromaDB

这将安装 ChromaDB 库以及所有必需的软件程序包。

初始化 ChromaDB 客户端

要与 ChromaDB 交互,您首先需要创建一个客户端。

客户端是与 ChromaDB 系统交互的主要方式,用于创建向量集合。

创建集合

向量是值的列表。在数学中,集合是一组相关的向量。应注意的是,您可以拥有多个集合,每个集合都旨在实现一个或另一个目标。

集合已创建,一旦创建了集合,就可以向其中添加向量。

插入数据(向量)

这意味着要将向量存储在集合中,您需要向其提供向量数据,换句话说,就是嵌入、元数据(如果存在)以及原始文档数据。

这里的 add 函数存储向量(嵌入)、元数据(例如,标识号)以及文档。通过此任务的结果,仍然可以回溯到元数据中的特定过滤器。

查询向量

一旦存储了向量,就可以搜索与任何给定查询向量相似的向量。通常,查询向量是需要搜索的数据的嵌入,或某种类型的嵌入。

输出

 
ChromaDB is designed for embedding search.
The quick brown fox jumps over the lazy dog.
Python is a versatile programming language. 

在此示例中,ChromaDB 将基于查询向量执行相似性搜索,并从集合中显示前 3 个最相似的文档。

元数据过滤

查询结果的编译是基于在向量插入期间放置在元数据上的条件进行的。例如,您可能希望向量包含某些元数据,例如单词数量为五个,或者某个单词的出现频率。

输出

 
ChromaDB is designed for embedding search.   

此查询仅返回元数据满足预定条件的向量。

持久性存储

默认情况下,它在内存中运行,但它被设计为支持将数据存储到 SQLite 等源,因此在应用程序重新加载时不需要重新创建。

每当您处理大量数据和/或需要特定状态(即使程序重新启动也必须保留)的数据时,此功能都非常有用。

ChromaDB 的应用

  1. 语义搜索
    ChromaDB 在语义搜索方面表现出色,这是一种查找含义与查询相似的文档或数据的方法。这为获得更多上下文和因此更准确的结果打开了可能性。
    1. 客户支持: 它可以为智能支持系统提供支持,这些系统根据用户查询提供指向 FAQ 或文档的适当链接;用户执行的查询不一定总是与数据源中使用的术语完全匹配。
    2. 知识管理: 在企业中,它可以帮助员工在最短的时间内找到他们为特定工作所需的内部文档或资源,因为它能够理解员工的搜索意图。
  2. 推荐系统
    在推荐引擎中,ChromaDB 有助于推荐相似项目,其中相似项目是通过比较它们的向量表示来找到的。
    1. 电子商务: 它可以根据客户偏好、访问过的产品或以前购买过的产品,进一步推荐类似类别的产品,这将肯定会重新定义客户体验并提高销售额。
    2. 媒体平台: 例如,在视频或音乐流媒体服务中,ChromaDB 可以根据代表内容特征或用户交互的项目嵌入,推荐用户感兴趣的内容(视频、音乐或文章)。
  3. 异常检测
    使用嵌入式的一个优点是 ChromaDB 能够检测数据中的异常值,因为这些数据的嵌入与其他数据在表中差异很大。
    1. 欺诈检测: 在金融系统中,可以通过将交易嵌入与先前数据进行比较来检测可能的或潜在的诈骗或独特交易。
    2. 网络安全: 在网络监控中,可以识别异常活动(例如,入侵),因为流量模式与通常流量不同。
  4. 个性化
    ChromaDB 通过将用户信息的捕获为嵌入来帮助创建个性化体验,从而更容易创建个性化体验。
    1. 电子商务个性化: 通过识别用户交互(例如,过去的购买或搜索历史),可以向个人展示相关的产品推荐。
    2. 内容个性化: 社交媒体市场的企业可以根据获得的嵌入式配置文件,为其客户提供视频或文章推荐。

结论

ChromaDB 是一个高质量的向量数据库,可以处理大量具有维度、所需模式和功能的。高效、快速和可扩展的近似最近邻 (ANN) 搜索功能使其适用于多种应用,包括语义搜索、推荐系统、异常检测、个性化等。ChromaDB 还可以轻松地与 Python 集成;支持元数据;并且在可选的情况下,支持持久化存储,从而使开发人员能够有效地管理和查询嵌入。因此,对于自然语言处理任务和内容匹配,以及对于使用机器学习方法处理欺诈案件的方法,ChromaDB 提高了效率并为改进开辟了新的前景。