语义搜索正在通过提供更准确和相关的搜索结果来改变搜索技术。但是,由于有许多嵌入模型可供选择,因此选择合适的模型可能具有挑战性。本指南将帮助您了解在选择用于构建语义搜索的模型时需要考虑的关键因素。
概述
在本指南中,我们将使用开源搜索引擎 Meilisearch 来执行语义搜索。为了进行测试,我们使用了 Meilisearch Cloud 的入门级版本(即 Build 计划)。
本指南将涵盖以下模型
模型/服务 | 维度 | 上下文长度 |
---|---|---|
Cohere embed-english-v3.0 | 1024 | 512 |
Cohere embed-english-light-v3.0 | 384 | 512 |
Cohere embed-multilingual-v3.0 | 1024 | 512 |
Cohere embed-multilingual-light-v3.0 | 384 | 512 |
OpenAI text-embedding-3-small | 1536 | 8192 |
OpenAI text-embedding-3-large | 3072 | 8192 |
Mistral | 1024 | 8192 |
VoyageAI voyage-2 | 1024 | 4000 |
VoyageAI voyage-large-2 | 1536 | 16000 |
VoyageAI voyage-multilingual-2 | 1024 | 32000 |
Jina Colbert v2 | 128、96 或 64 | 8192 |
OSS all-MiniLM-L6-v2 | 384 | 512 |
OSS bge-small-en-v1.5 | 1024 | 512 |
OSS bge-large-en-v1.5 | 1536 | 512 |
需要考虑的因素
1. 结果相关性
相关性对于有效搜索至关重要,因为它可以确保用户快速找到最相关的结果。在语义搜索领域,在相关性和速度之间取得平衡对于提供无缝的用户体验至关重要。重要的是要考虑 向量搜索与全文搜索 的权衡。
在选择模型时,请考虑您的特定用例,例如对多语言支持、处理多模态数据或解决特定领域要求的需求。如果您有高度专业化的用例或需要支持特定语言,那么探索可以根据您的数据进行训练的模型或选择多语言模型可能会有所帮助。
非常小的模型和大型模型之间的性能差异并不总是很大。较小的模型通常更便宜且速度更快,这使得它们在许多情况下成为一种实用的选择。因此,通常值得考虑较小的模型,以了解它们的成本效益和速度。
此外,您应该始终考虑提供给模型的上下文。在 Meilisearch 中,这以 文档模板 的形式出现。模板越准确地描述数据,搜索结果就越好,从而导致更令人满意的用户体验。
2. 搜索性能
您现在随处可见。时间就是金钱。网络也不例外。如今,即时搜索 是面向客户应用程序的基准。为用户节省时间可以极大地提高他们的满意度,并让他们继续使用您的平台。
为了实现闪电般的搜索性能,请考虑使用本地模型,通过消除对嵌入服务的往返请求的需要来最大程度地减少延迟。如果您需要使用远程模型,那么将您的搜索服务(例如您的 Meilisearch 数据库)托管在靠近嵌入服务的附近可以显着减少延迟。
下表展示了各种本地嵌入模型和嵌入 API 的延迟基准。所有请求均来自托管在 AWS(伦敦数据中心)上的 Meilisearch 实例。
模型/服务 | 延迟 |
---|---|
Cloudflare bge-small-en-v1.5 | ±800 毫秒 |
Cloudflare bge-large-en-v1.5 | ±500 毫秒 |
Cohere embed-english-v3.0 | ±170 毫秒 |
Cohere embed-english-light-v3.0 | ±160 毫秒 |
本地 gte-small | ±20 毫秒 |
本地 all-MiniLM-L6-v2 | ±10 毫秒 |
本地 bge-small-en-v1.5 | ±20 毫秒 |
本地 bge-large-en-v1.5 | ±60 毫秒 |
Mistral | ±200 毫秒 |
Jina colbert | ±400 毫秒 |
OpenAI text-embedding-3-small | ±460 毫秒 |
OpenAI text-embedding-3-large | ±750 毫秒 |
VoyageAI voyage-2 | ±350 毫秒 |
VoyageAI voyage-large-2 | ±400 毫秒 |
在这里您可以看到,在延迟方面有一些明显的赢家。不幸的是,延迟与吞吐量不同,因此我们还需要仔细查看索引时间。
3. 索引性能
索引性能是 比较搜索解决方案 时另一个关键方面。嵌入模型性能将直接影响搜索解决方案的索引速度。数据索引的速度将直接影响搜索解决方案的整体效率和可扩展性。
本地没有 GPU 的模型可能由于处理能力有限而导致索引速度较慢。相比之下,第三方服务根据其基础设施和服务协议提供不同的速度和限制。评估这些因素以确保您选择的模型和服务能够有效地满足您的要求至关重要。
优化索引时,有几个因素会起作用。同样,延迟起着重要作用:减少数据在您的应用程序和模型之间传输所需的时间将始终改善您的体验。此外,API 接受的最大 API 调用大小、提供商的速率限制以及模型支持的维度数量都可能影响索引过程的效率和可扩展性。
以下基准比较了 10k 个电子商务文档的索引(使用 自动嵌入生成)。
模型/服务 | 索引时间 |
---|---|
Cohere embed-english-v3.0 | 43 秒 |
Cohere embed-english-light-v3.0 | 16 秒 |
OpenAI text-embedding-3-small | 95 秒 |
OpenAI text-embedding-3-large | 151 秒 |
Cloudflare bge-small-en-v1.5 | 152 秒 |
Cloudflare bge-large-en-v1.5 | 159 秒 |
Jina Colbert V2 | 375 秒 |
VoyageAI voyage-large-2 | 409 秒 |
Mistral | 409 秒 |
本地 all-MiniLM-L6-v2 | 880 秒 |
本地 bge-small-en-v1.5 | 3379 秒 |
本地 bge-large-en-v1.5 | 9132 秒 |
4. 定价
虽然本地嵌入器是免费的,但大多数服务按百万个令牌收费。以下是每个平台定价的细分
- Cohere:
- 每百万个令牌 0.10 美元
- OpenAI:
- text-embedding-3-large 每百万个令牌 0.13 美元
- text-embedding-3-small 每百万个令牌 0.02 美元
- Cloudflare:
- 每 1,000 个神经元 0.011 美元
- Jina:
- 每百万个令牌 0.18 美元
- Mistral:
- 每百万个令牌 0.10 美元
- VoyageAI:
- voyage-2 每百万个令牌 0.10 美元
- voyage-large-2 每百万个令牌 0.12 美元
- voyage-multilingual-2 每百万个令牌 0.12 美元
- 本地模型:免费
随着搜索需求的增长和扩展,投资您自己的 GPU 机器可能会变得更加划算。通过拥有自己的硬件,您可以更好地控制搜索解决方案的性能和可扩展性,并有可能从长远来看降低成本。
通常最好从提供的列表中开始使用一个众所周知的模型。它们通常易于设置,并且您可以轻松找到社区资源来帮助您。随着需求的出现,您可以考虑将模型迁移到像 AWS 这样的云提供商。许多服务提供此选项,使您能够利用其基础设施来提高性能和可扩展性。
或者,您可以选择一个等效的开源模型来自行托管,从长远来看,这将为您提供更大的灵活性并更好地控制搜索解决方案。请注意,优化本地模型以实现性能或高容量可能需要相应地扩展您的基础设施。
准备好提升您的搜索体验了吗?
更进一步
虽然本文提供了全面的概述,但我们并没有深入研究优化技术。还有许多其他优化方法可以探索,以进一步提高语义搜索的性能。
以下是在选择搜索体验模型时需要调查的其他领域
- 尝试为提供此选项的模型使用不同的预设(查询与文档),以潜在地提高相关性
- 评估特定应用程序的专用模型,以评估它们的性能和对您用例的适用性
- 探索提供重新排序功能的模型,以进一步完善搜索结果
- 测试每个平台上的更高层级帐户,以检查性能提升和速率限制降低
- 调查从 API 直接接收量化数据的参数,以优化数据传输和处理
结论
模型/服务 | 维度 | 上下文长度 | 延迟 | 索引时间 | 定价(每百万个令牌) |
---|---|---|---|---|---|
Cohere embed-english-v3.0 | 1024 | 512 | ±170 毫秒 | 43 秒 | $0.10 |
Cohere embed-english-light-v3.0 | 384 | 512 | ±160 毫秒 | 16 秒 | $0.10 |
OpenAI text-embedding-3-small | 1536 | 8192 | ±460 毫秒 | 95 秒 | $0.02 |
OpenAI text-embedding-3-large | 3072 | 8192 | ±750 毫秒 | 151 秒 | $0.13 |
Mistral | 1024 | 8192 | ±200 毫秒 | 409 秒 | $0.10 |
VoyageAI voyage-2 | 1024 | 4000 | ±350 毫秒 | 330 秒 | $0.10 |
VoyageAI voyage-large-2 | 1536 | 16000 | ±400 毫秒 | 409 秒 | $0.12 |
Jina Colbert v2 | 128、96 或 64 | 8192 | ±400 毫秒 | 375 秒 | $0.18 |
OSS all-MiniLM-L6-v2 | 384 | 512 | ±10 毫秒 | 880 秒 | 免费 |
OSS bge-small-en-v1.5 | 1024 | 512 | ±20 毫秒 | 3379 秒 | 免费 |
OSS bge-large-en-v1.5 | 1536 | 512 | ±60 毫秒 | 9132 秒 | 免费 |
为语义搜索选择合适的模型和服务需要仔细权衡几个关键因素:相关性、搜索性能、索引性能和成本。
每个选项都存在自己的权衡
- 像 Cohere 和 OpenAI 这样的云服务提供了出色的相关性和合理的延迟,其中 Cohere 的 embed-english-light-v3.0 在速度和性能之间取得了平衡。
- 本地模型提供了最快的搜索延迟,但在有限的硬件上可能难以进行索引速度。
- 像 Mistral 和 VoyageAI 这样的新兴服务以具有竞争力的价格和性能表现出希望。
- 开源模型为愿意管理自己的基础设施的人提供了经济高效的解决方案。
最终,最佳选择取决于您的特定用例、预算和性能要求。对于许多应用程序而言,从像 Cohere 或 OpenAI 这样的云服务开始,可以平衡易用性、性能和成本。随着需求的增长,请考虑探索本地或专用模型,或联系 Meilisearch 的销售团队以获取定制解决方案。
Meilisearch 是一款开源搜索引擎,使开发人员能够在享受简单直观的 DX 的同时构建最先进的体验。
有关 Meilisearch 的更多信息,您可以加入 Discord 上的社区或订阅 新闻稿。您可以通过查看其 路线图 并参与 产品讨论 来详细了解该产品。