OpenAI Ada-003 嵌入是自然语言处理 (NLP) 的一种强大工具。然而,嵌入的大小是一个挑战,特别是在实时搜索和检索时。在本文中,我们探讨如何使用 Qdrant 的二进制量化来增强 OpenAI 嵌入的性能和效率。
在这篇文章中,我们讨论:
- OpenAI 嵌入的意义及现实世界的挑战。
- Qdrant的二进制量化,以及它如何提高OpenAI嵌入的性能
- 实验结果凸显了搜索效率和准确性的提升
- 这些发现对现实世界应用的影响
- 利用二进制量化来增强 OpenAI 嵌入的最佳实践
如果您是二进制量化的新手,可以考虑阅读我们的文章,其中介绍了这个概念以及 如何与 Qdrant 一起使用
您还可以尝试这些技术,如二进制量化 OpenAI中所述,其中包括Jupyter笔记本。
新的OpenAI嵌入:性能与变化
随着嵌入模型技术的进步,需求也随之增加。用户越来越需要强大而高效的文本嵌入模型。OpenAI 的 Ada-003 嵌入在广泛的自然语言处理任务中提供了先进的性能,包括在 MTEB 和 MIRACL 中提到的那些任务。
这些模型支持超过100种语言的多语言功能。从text-embedding-ada-002过渡到text-embedding-3-large导致性能分数显著提升(从31.4%提升至54.9%在MIRACL上)。
套娃表示学习
新的OpenAI模型采用了一种新颖的方法,称为“套娃表示学习”。开发者可以设置不同大小(维度数量)的嵌入。在这篇文章中,我们使用小型和大型变体。开发者可以选择在准确性和大小之间取得平衡的嵌入。
在这里,我们展示了在不同维度下,二进制量化的准确性对于这两种模型都是相当不错的。
通过二进制量化提升性能和效率
通过减少存储需求,您可以以更低的成本扩展应用程序。这解决了原始嵌入大小带来的一个关键挑战。二进制量化也加快了搜索过程。它将向量之间复杂的距离计算简化为更可管理的按位操作,从而支持在庞大数据集中的潜在实时搜索。
附图展示了在不同模型大小下,通过二进制量化所实现的有前景的准确性水平,表明其在不严重影响性能的情况下的实用性。这种存储减少和加速搜索能力的双重优势突显了二进制量化在更有效地部署OpenAI嵌入于各种现实世界应用中的变革潜力。

二元量化带来的效率提升如下:
- 减少存储占用:它有助于处理大规模数据集。它还节省内存,并在相同成本下扩展至30倍。
- 提高数据检索速度:较小的数据大小通常会导致更快的搜索。
- 加速搜索过程:它基于向量之间简化的距离计算以及位操作。这使得即使在大型数据库中也能够实时查询。
实验设置:以OpenAI嵌入为焦点
为了识别二进制量化对搜索效率和准确性的影响,我们在OpenAI文本嵌入模型上设计了实验。这些模型捕捉细微的语言特征和语义关系,是我们分析的基础。随后,我们深入探讨了Qdrant的二进制量化功能所提供的潜在增强。
这一方法不仅利用了高质量的OpenAI嵌入,还提供了一个广泛的基础来评估受到审查的搜索机制。
数据集
该研究使用了来自OpenAI 1M 1M数据集的100K随机样本,重点关注100个随机选择的记录。这些记录作为实验中的查询,旨在评估二进制量化如何影响数据集中的搜索效率和精度。然后,我们使用查询的嵌入在数据集中搜索最近邻。
参数:过采样、重评分和搜索限制
对于每条记录,我们对过采样、重新评分和搜索限制的数量进行了参数调整。我们可以理解这些参数对搜索准确性和效率的影响。我们的实验旨在评估二进量化在不同条件下的影响,基于以下参数:
过采样: 通过过采样,我们可以限制量化固有的信息损失。 这也有助于保留您 OpenAI 嵌入的语义丰富性。我们试验了不同的过采样因子,并确定了它们对搜索的准确性和效率的影响。剧透:较高的过采样因子往往会提高搜索的准确性。然而,它们通常需要更多的计算资源。
重新评分: 重新评分细化了初始二进制搜索的第一个结果。这个过程利用了原始的高维向量来精细化搜索结果,始终提高准确性。我们在启用和禁用重新评分的情况下测量了其有效性,并与二进制量化结合使用。我们还测量了对搜索性能的影响。
搜索限制: 我们指定搜索过程中的结果数量。我们尝试了各种搜索限制,以衡量它们对准确性和效率的影响。我们探讨了搜索深度与性能之间的权衡。结果为具有不同精度和速度要求的应用提供了见解。
通过这个详细的设置,我们的实验旨在揭示二进制量化与OpenAI模型所产生的高质量嵌入之间的微妙相互作用。通过仔细调整和观察不同条件下的结果,我们旨在揭示可行的见解,以帮助用户充分利用Qdrant与OpenAI嵌入的结合,无论他们的具体应用需求是什么。
结果:二进制量化对OpenAI嵌入的影响
为了分析重新评分的影响(True 或 False),我们比较了不同模型配置和搜索限制下的结果。重新评分基于初始查询的结果设置了更精确的搜索。
重新评分

以下是一些关键观察,分析了重新评分的影响(True或False):
显著提高准确性:
- 在所有模型和维度配置中,启用重评分 (
True) 一致地导致比禁用重评分 (False) 更高的准确性分数。 - 在各种搜索限制下(10, 20, 50, 100),准确性的提升都是如此。
- 在所有模型和维度配置中,启用重评分 (
模型和维度特定观察:
- 对于
text-embedding-3-large模型,3072维,重新评分将准确率从平均约76-77%(没有重新评分)提高到97-99%(有重新评分),具体取决于搜索限制和超采样率。 - 随着超采样增加,重新评分启用时准确率的提高更为显著,表明在优化搜索结果时更好地利用了额外的二进制代码。
- 在512维的
text-embedding-3-small模型下,准确率从没有重新评分时的约53-55%提高到有重新评分时的71-91%,突出显示了重新评分的显著影响,尤其是在较低维度时。
- 对于
相比之下,对于低维度模型(例如具有512维的text-embedding-3-small),随着过采样水平的增加,增量准确率的提升不那么显著,即使启用了重新评分。这表明在低维空间中,随着过采样的增加,准确率的提升呈现出递减的回报。
- 搜索限制的影响:
- 重新评分带来的性能提升在不同的搜索限制下似乎相对稳定,这表明重新评分在考虑的顶级结果数量无论如何都能持续增强准确性。
总之,启用重新评分显著提高了所有测试配置的搜索准确性。这是对精度至关重要的应用程序的关键特性。重新评分提供的一致性能提升突出了它在完善搜索结果中的价值,特别是在处理复杂的高维数据如OpenAI嵌入时。这一增强对要求高准确性的应用至关重要,例如语义搜索、内容发现和推荐系统,其中搜索结果的质量直接影响用户体验和满意度。
数据集组合
对于那些探索文本嵌入模型与Qdrant集成的人,考虑各种模型配置以获得最佳性能至关重要。上面定义的数据集组合展示了与Qdrant测试的不同配置。这些组合主要通过两个属性变化:
模型名称: 表示具体的文本嵌入模型变体,例如“text-embedding-3-large”或“text-embedding-3-small”。这种区分与模型的能力相关,“large”模型提供更详细的嵌入,但需要更多的计算资源。
维度: 这指的是模型产生的向量嵌入的大小。选项范围从 512 到 3072 维。更高的维度可能会导致更精确的嵌入,但也可能增加 Qdrant 中的搜索时间和内存使用。
优化这些参数是在搜索精度和资源效率之间的平衡。通过测试这些组合,用户可以确定最符合他们特定需求的配置,同时考虑计算资源和搜索结果质量之间的权衡。
dataset_combinations = [
{
"model_name": "text-embedding-3-large",
"dimensions": 3072,
},
{
"model_name": "text-embedding-3-large",
"dimensions": 1024,
},
{
"model_name": "text-embedding-3-large",
"dimensions": 1536,
},
{
"model_name": "text-embedding-3-small",
"dimensions": 512,
},
{
"model_name": "text-embedding-3-small",
"dimensions": 1024,
},
{
"model_name": "text-embedding-3-small",
"dimensions": 1536,
},
]
探索数据集组合及其对模型性能的影响
该代码片段迭代预定义的数据集和模型组合。对于每个组合,通过模型名称和其维度进行特征化,相应实验的结果被加载。这些结果以JSON格式存储,包括在不同配置下的性能指标,如在进行和不进行过采样,以及进行和不进行重新评分步骤下的准确性。
在提取这些指标后,代码计算在不同设置下的平均准确率,排除极低限制的极端情况(具体来说,限制为1和5)。该计算根据过采样、评分存在和限制对结果进行分组,然后计算每个子组的平均准确率。
在收集和处理这些数据后,平均准确率被组织成一个透视表。此表通过限制(考虑的顶级结果数量)进行索引,列则是基于过采样和重新评分的组合形成的。
import pandas as pd
for combination in dataset_combinations:
model_name = combination["model_name"]
dimensions = combination["dimensions"]
print(f"Model: {model_name}, dimensions: {dimensions}")
results = pd.read_json(f"../results/results-{model_name}-{dimensions}.json", lines=True)
average_accuracy = results[results["limit"] != 1]
average_accuracy = average_accuracy[average_accuracy["limit"] != 5]
average_accuracy = average_accuracy.groupby(["oversampling", "rescore", "limit"])[
"accuracy"
].mean()
average_accuracy = average_accuracy.reset_index()
acc = average_accuracy.pivot(
index="limit", columns=["oversampling", "rescore"], values="accuracy"
)
print(acc)
这是这些结果的一个选定片段,带有 rescore=True:
| 方法 | 维度 | 测试数据集 | 召回率 | 过采样 |
|---|---|---|---|---|
| OpenAI 文本嵌入 3-large(来自表格的最高 MTEB 得分) | 3072 | DBpedia 1M | 0.9966 | 3x |
| OpenAI 文本嵌入-3-小型 | 1536 | DBpedia 100K | 0.9847 | 3倍 |
| OpenAI 文本嵌入-3-大 | 1536 | DBpedia 1M | 0.9826 | 3倍 |
过采样的影响
您可以在机器学习中使用过采样来抵消数据集中的不平衡。 当一个类显著多于其他类时,它效果很好。 这种不平衡可能扭曲模型的性能,使其更倾向于多数类,而忽视其他类。 通过从少数类创建额外样本,过采样有助于平衡训练数据集中各类的表示,从而实现对真实场景更公平和准确的建模。
截图展示了过采样对模型性能指标的影响。虽然实际的指标未显示,但我们预计在精确度、召回率或F1分数等指标上会看到改善。这些改善说明了过采样在创建更平衡的数据集方面的有效性。它使模型能够学习到所有类别的更好表征,而不仅仅是主导类别。
在没有明确的代码片段或输出的情况下,我们关注过采样在模型公平性和性能中的作用。通过图形表示,您可以进行前后比较。这些比较展示了对机器学习项目的贡献。

利用二进制量化:最佳实践
我们建议以下最佳实践,以利用二进制量化增强OpenAI嵌入:
- 嵌入模型:使用来自MTEB的text-embedding-3-large。这是经过测试中最准确的。
- 维度:使用模型可用的最高维度,以最大化准确性。结果对英语和其他语言都是有效的。
- 过采样: 使用3的过采样因子,以达到准确性和效率之间的最佳平衡。这个因子适用于广泛的应用。
- 重新评分:启用重新评分以提高搜索结果的准确性。
- RAM:将完整的向量和负载存储在磁盘上。限制从内存中加载的内容,仅限于二进制量化索引。这有助于减少内存占用并提高系统的整体效率。与Qdrant中使用的二进制评分所带来的延迟节省相比,从磁盘读取的增量延迟可以忽略不计,Qdrant在可能的情况下使用SIMD指令。
接下来是什么?
如果您需要在高召回期望下处理大量数据,二进制量化是非常出色的。您可以通过在本地启动一个 Qdrant 容器镜像,或者让我们通过您在我们云托管服务中的 免费账户 为您创建一个来尝试此功能。
本文提供了您可以使用的数据集和配置示例,以便开始使用。我们的文档涵盖了将大型数据集添加到Qdrant到您的Qdrant实例,以及更多量化方法。
想讨论这些发现并了解更多关于二进制量化的信息吗? 加入我们的Discord社区。

