技术干货

什么是二进制嵌入?

2024-07-26

By Denis Kuria

什么是二进制嵌入?

引言

向量嵌入在现代机器学习和数据科学中已成为不可或缺的工具,它们能够将复杂数据以算法可以理解的数值格式表示。尽管密集嵌入因其能够以最小的信息损失保留语义含义而普遍存在,但随着数据量的增加,它们的计算需求和内存需求也在增加。这种增加促使开发者寻求更高效的数据表示方法。

在众多技术中,二进制嵌入作为一种引人注目的解决方案脱颖而出,它在紧凑性、计算效率和有意义的数据表示之间取得了平衡。在这篇博客文章中,我们将介绍二进制嵌入的概念,阐述它们的定义特征、优势以及与其他嵌入类型的比较优势。此外,我们将深入探讨生成二进制嵌入的方法,并展示如何使用Milvus向量数据库实现二进制嵌入搜索。

什么是向量嵌入?

在介绍二进制嵌入之前,有必要建立对向量嵌入的基础理解。

向量嵌入是离散数据项的数值表示,包括单词、句子、图像或其他元素等实体。每个项目被映射到一个包含高维空间中实数的向量。在这个空间内,相似的项目会靠得更近,而不相似的项目则会分散开来。

向量嵌入的生成和存储

向量嵌入的强大之处主要体现在它们能够封装项目之间的语义关系。例如,在自然语言处理(NLP)中,具有相似含义或上下文相关性的单词通过在向量空间内位置接近的向量来表示,从而促进了细致的分析和解释。

向量嵌入通常存储在专门的向量数据库中,如Milvus和Zilliz Cloud(完全托管的Milvus)。

什么是二进制嵌入?

二进制嵌入是一种向量表示类型,其中每个维度都使用单个二进制数字编码,通常表示为0或1。例如,“cat”的二进制单词嵌入可以表示为[0, 1, 0, 1, 1, 0, 0, 1, ...],其中每个维度都是二进制的。

二进制嵌入提供了存储效率和计算速度。由于它们每个维度只使用一个比特,因此它们比其他类型的嵌入需要更少的内存,使它们适合于内存资源有限或数据集较大的应用程序。此外,涉及二进制值的操作通常比涉及实数值的操作执行得更快。

尽管它们效率高,但与大多数或全部维度包含实值条目的密集嵌入相比,二进制嵌入可能会牺牲一些准确性。这是因为二进制嵌入以简化的二进制格式表示数据,可能无法捕捉原始数据中的所有细微差别或复杂性。

密集 vs. 稀疏 vs. 二进制向量嵌入

向量嵌入根据它们的维度特性表现出不同的特征。让我们剖析一下密集、稀疏和二进制嵌入之间的区别:

密集嵌入由具有实值、非零条目的向量组成,这些条目在大多数或所有维度中,提供了高准确性,但需要比二进制或稀疏嵌入更多的存储和计算。例如,一个密集的图像嵌入可能看起来像[0.2, -0.7, 1.1, 0.4, -0.3, 0.9, -0.1, ...],其中大多数或所有维度都有非零实值。

稀疏嵌入由具有众多零值的向量组成,使它们在内存上高效,但某些操作可能计算成本较高。例如,一个稀疏的句子嵌入可能表现为[0, 0, 2.5, 0, 0, -1.2, 0, 0, 0, 3.7, ...],其中大多数维度都是零。

二进制嵌入中,每个向量维度由单个比特(0或1)表示,提供了存储效率和计算优势。然而,它们可能与密集嵌入相比在准确性上有所妥协。

在这些示例中,二进制(0或1)、稀疏(大部分是0)和密集(实值)嵌入之间的区别是显而易见的。选择合适的嵌入类型取决于特定应用程序所需的准确性、存储和计算之间的权衡。

如何生成二进制嵌入

生成二进制嵌入有几种主要方法:基于哈希的方法、机器学习模型和二进制量化。

基于哈希的方法 基于哈希的方法利用局部敏感哈希(LSH)或随机投影直接将高维输入数据映射到二进制代码。LSH通过将输入空间划分为哈希桶并为每个桶分配二进制代码来生成二进制代码。随机投影使用随机投影矩阵将输入数据映射到低维空间,随后进行量化以获得二进制代码。

机器学习模型 深度学习架构,如深度信念网络(DBN)和受限玻尔兹曼机(RBM),在其输出中生成二进制嵌入。特别是RBM,可以通过应用随机二进制激活在其隐藏层中学习二进制表示。使用二进制激活和权重进行训练和推理的二进制神经网络是生成二进制嵌入的另一种选择。

二进制量化 基于量化的技术将连续值嵌入转换为二进制表示。向量量化方法如k均值聚类可以学习码本,其中每个质心代表一个二进制代码。然后通过将输入数据分配给最近的质心来进行量化,从而获得二进制表示。当内存或计算资源有限时,例如在嵌入式系统或大规模机器学习模型中,二进制量化特别有用。

什么是二进制量化? 二进制量化是一种技术,它通过阈值化每个向量维度为0或1来将密集或稀疏嵌入转换为二进制表示。

二进制量化的工作原理 二进制量化的工作原理是将所有正数标记为1;否则,它们变成0。

这个过程可以通过各种量化方法实现,例如简单的符号阈值化、标量量化或更复杂的技术如向量量化。

Milvus如何进行二进制嵌入搜索? Milvus是一个开源向量数据库,用于高效存储和检索向量嵌入。Milvus通过两个主要索引高效支持二进制嵌入搜索:BIN_FLAT和BIN_IVF_FLAT。

BIN_FLAT:BIN_FLAT索引是一种直接的方法,适用于相对较小的数据集,其中100%的召回率是必需的。它通过将查询向量与数据集中的每个向量进行比较,执行全面搜索,确保精确的搜索结果。

BIN_IVF_FLAT:BIN_IVF_FLAT索引平衡了搜索速度和召回率。它采用基于量化的方法,将向量数据划分为多个聚类单元(nlist)。在搜索期间,它将查询向量与每个聚类的质心进行比较,并选择最相似的聚类(nprobe)进行进一步与这些聚类内的各个向量进行比较。

结论

在本指南中,你已经探索了二进制嵌入的概念,将其与密集和稀疏嵌入进行了对比,并突出了它们在存储效率和计算速度方面的优势。你了解了生成二进制嵌入的不同方法以及如何利用Milvus进行高效的相似性搜索。

通过理解它们的特性和实现方法,你可以有效地利用二进制嵌入的力量来应对现实世界的机器学习和数据科学挑战。

进一步资源

  • 稀疏和密集嵌入 - Zilliz博客
  • 向量索引Milvus v2.1.x文档
  • [1502.05746] 二进制嵌入:基本限制和快速算法
  • 二进制和标量嵌入量化,显著更快、更便宜的检索

24.webp 24.webp

  • Denis Kuria

    Denis Kuria

    Freelance Technical Writer

    准备好开始了吗?

    立刻创建 Zilliz Cloud 集群,存储和检索您的向量。

    免费试用 Zilliz Cloud