paint-brush
了解主要科技公司矢量搜索的 5 个用例经过@rocksetcloud
634 讀數
634 讀數

了解主要科技公司矢量搜索的 5 个用例

经过 Rockset12m2024/05/03
Read on Terminal Reader

太長; 讀書

深入了解矢量搜索的 5 个早期采用者——Pinterest、Spotify、eBay、Airbnb 和 Doordash——他们已将 AI 集成到他们的应用程序中。
featured image - 了解主要科技公司矢量搜索的 5 个用例
Rockset HackerNoon profile picture


我们采访过的许多组织都处于探索阶段,他们正在使用矢量搜索实现人工智能个性化、推荐、语义搜索和异常检测。最近,大型语言模型 (LLM)(包括 BERT 和 OpenAI)的准确性和可访问性有了显著的提高,这让公司重新思考如何构建相关的搜索和分析体验。


在这篇博客中,我们收集了 5 家早期采用向量搜索的公司(Pinterest、Spotify、eBay、Airbnb 和 Doordash)的工程故事,这些公司已将 AI 集成到他们的应用程序中。我们希望这些故事能够帮助那些正在思考向量搜索从生成嵌入到生产部署的整个生命周期的工程团队。

什么是向量搜索?

向量搜索是一种基于高维空间中数据的表示,从大型数据集中高效查找和检索相似项的方法。在这种情况下,项可以是任何内容,例如文档、图像或声音,并以向量嵌入表示。项之间的相似度是使用距离度量(例如余弦相似度欧几里得距离)计算的,这些距离度量量化了两个向量嵌入的接近度。


向量搜索过程通常涉及:


  • 生成嵌入:从原始数据中提取相关特征,使用word2vecBERTUniversal Sentence Encoder等模型创建向量表示
  • 索引:向量嵌入被组织成一个数据结构,可以使用FAISSHNSW等算法进行高效搜索
  • 向量搜索:根据所选的距离度量(如余弦相似度或欧几里得距离)检索与给定查询向量最相似的项目


为了更好地形象化向量搜索,我们可以想象一个 3D 空间,其中每个轴对应一个特征。时间和空间中点的位置由这些特征的值决定。在这个空间中,相似的项目位置更近,不相似的项目位置更远。


GITHUB朱莉·米尔斯

 ^ | x Item 1 | / | / | /x Item 2 | / | / | /x Item 3 | / | / | / +------------------->


给定一个查询,我们可以在数据集中找到最相似的项目。查询表示为与项目嵌入位于同一空间中的向量嵌入,并计算查询嵌入与每个项目嵌入之间的距离。与查询嵌入距离最短的项目嵌入被视为最相似。


 Query item: x | ^ | | x Item 1| | / | | / | | /x Item 2 | | / | | / | | /x Item 3 | | / | | / | | / | +------------------->


这显然是一种简化的可视化,因为向量搜索在高维空间中进行。


在接下来的部分中,我们将总结 5 篇有关矢量搜索的工程博客,并重点介绍关键的实施注意事项。完整的工程博客可在下面找到:



Pinterest:兴趣搜索和发现

Pinterest 使用矢量搜索在其平台的多个区域进行图像搜索和发现,包括主页上的推荐内容、相关图钉和使用多任务学习模型的搜索。


Pinterest 上使用不同的用户交互和数据点来形成矢量嵌入。


多任务模型经过训练可同时执行多项任务,通常共享底层表示或特征,这可以提高相关任务的泛化能力和效率。在 Pinterest 的案例中,团队训练并使用了相同的模型来推动主页、相关图钉和搜索上的推荐内容。


Pinterest 通过将用户的搜索查询 (q) 与他们点击的内容或保存的 Pin (p) 配对来训练模型。以下是 Pinterest 为每个任务创建 (q,p) 对的方式:


  • 相关 Pin :词嵌入源自选定的主题 (q) 和用户点击或保存的 Pin (p)。

  • 搜索:根据搜索查询文本(q)和用户点击或保存的图钉(p)创建词嵌入。

  • Homefeed :根据用户的兴趣(q)和用户点击或保存的图钉(p)生成词嵌入。


为了获得整体实体嵌入,Pinterest 对相关图钉、搜索和主页动态的相关词嵌入进行平均。


Pinterest 创建并评估了其自己的监督式 Pintext-MTL(多任务学习),并与包括 GloVe、word2vec 在内的无监督学习模型以及单任务学习模型 PinText-SR 进行了精度比较。PinText-MTL 的精度高于其他嵌入模型,这意味着它在所有正预测中具有更高的真实正预测比例。

Pinterest 评估的不同嵌入模型的精度。此结果表取自博客 PinText:Pinterest 中的多任务文本嵌入系统。



Pinterest 还发现,多任务学习模型具有更高的召回率,或者说模型正确识别的相关实例比例更高,这使得它们更适合搜索和发现。


为了将所有这些整合到生产中,Pinterest 拥有一个多任务模型,该模型使用来自主页推送、搜索和相关图钉的流数据进行训练。训练该模型后,将使用 Kubernetes+Docker 或 map-reduce 系统在大型批处理作业中创建向量嵌入。该平台构建向量嵌入的搜索索引并运行 K-最近邻 (KNN) 搜索以找到与用户最相关的内容。结果被缓存以满足 Pinterest 平台的性能要求。


Pinterest 上用于矢量搜索的数据堆栈。



Spotify:播客搜索

Spotify 结合关键字和语义搜索来为用户检索相关的播客剧集结果。例如,该团队强调了关键字搜索查询“电动汽车对气候的影响”的局限性,尽管 Spotify 库中存在相关的播客剧集,但该查询却没有产生任何结果。为了提高召回率,Spotify 团队使用近似最近邻 (ANN) 进行快速、相关的播客搜索。


目前在 Spotify 上搜索“电动汽车对气候的影响”。


该团队使用Universal Sentence Encoder CMLM 模型生成向量嵌入,因为它支持多语言,支持全球播客库,并能生成高质量的向量嵌入。团队还评估了其他模型,包括BERT ,这是一个在大量文本数据上训练的模型,但发现 BERT 更适合词嵌入而不是句子嵌入,并且只用英语进行了预训练。


Spotify 构建向量嵌入,其中查询文本作为输入嵌入,并串联文本元数据字段(包括播客剧集嵌入的标题和描述)。为了确定相似度,Spotify 测量了查询和剧集嵌入之间的余弦距离。


为了训练基础 Universal Sentence Encoder CMLM 模型,Spotify 使用了成功的播客搜索和剧集的正对。他们结合了批量负对,这是一项在包括《开放域问答 (DPR) 的密集段落检索》《Que2Search:用于 Facebook 搜索的快速准确查询和文档理解》等论文中重点介绍的技术,以生成随机负对。还使用合成查询和手动编写的查询进行了测试。


为了将矢量搜索纳入生产中的播客推荐服务中,Spotify 使用了以下步骤和技术:


  • 索引剧集向量:Spotify 使用Vespa (一款原生支持 ANN 的搜索引擎)批量离线索引剧集向量。选择 Vespa 的原因之一是它还可以结合搜索后的元数据过滤功能,例如剧集受欢迎程度。

  • 在线推理:Spotify 使用Google Cloud Vertex AI生成查询向量。之所以选择 Vertex AI,是因为它支持 GPU 推理,在使用大型 Transformer 模型生成嵌入时,这种推理更具成本效益,并且具有查询缓存功能。生成查询向量嵌入后,它将用于从 Vespa 检索前 30 个播客剧集。


语义搜索有助于识别相关的播客剧集,但它无法完全取代关键字搜索。这是因为当用户搜索确切的剧集或播客名称时,语义搜索无法实现精确的术语匹配。Spotify 采用混合搜索方法,将 Vespa 中的语义搜索与Elasticsearch中的关键字搜索相结合,然后进行最终的重新排名阶段,以确定向用户显示的剧集。


Spotify 的矢量搜索工作流程。


eBay:图片搜索

传统上,搜索引擎通过将搜索查询文本与商品或文档的文本描述进行匹配来显示结果。这种方法严重依赖语言来推断偏好,在捕捉风格或美学元素方面效果不佳。eBay 推出了图片搜索功能,帮助用户找到符合他们所需风格的相关、相似的商品。


eBay 使用多模态模型,该模型旨在处理和集成来自多种模态或输入类型(例如文本、图像、音频或视频)的数据,以进行预测或执行任务。eBay 将文本和图像整合到其模型中,利用卷积神经网络 (CNN) 模型(特别是Resnet-50 )生成图像嵌入,并使用基于文本的模型(例如BERT )生成标题嵌入。每个列表都由结合了图像和标题嵌入的矢量嵌入表示。


eBay 使用的多模式嵌入模型的表示。



使用大量图片-标题列表对和最近售出的列表数据集训练多模式模型后,就可以将其投入到站点搜索体验中了。由于 eBay 的列表数量庞大,数据被批量加载到 eBay 的数据仓库 HDFS 中。eBay 使用 Apache Spark 检索和存储进一步处理列表所需的图像和相关字段,包括生成列表嵌入。列表嵌入发布到列式存储(如 HBase),它擅长聚合大规模数据。从 HBase 开始,列表嵌入被索引并在 eBay 创建的搜索引擎 Cassini 中提供。


eBay 上的矢量搜索工作流程。


管道使用 Apache Airflow 进行管理,即使任务数量和复杂性很高,它也能够扩展。它还支持 Spark、Hadoop 和 Python,方便机器学习团队采用和使用。


视觉搜索让用户可以在家具和家居装饰类别中找到类似的风格和偏好,风格和审美是购买决策的关键。未来,eBay 计划将视觉搜索扩展到所有类别,并帮助用户发现相关物品,以便他们在家中建立相同的外观和感觉。

AirBnb:实时个性化房源

搜索和类似房源功能推动了 AirBnb 网站上 99% 的预订。AirBnb 建立了房源嵌入技术,以改进类似房源推荐,并在搜索排名中提供实时个性化。


AirBnb 很早就意识到,他们可以将嵌入的应用扩展到不仅仅是词语表示,还包括点击和预订等用户行为。


为了训练嵌入模型,AirBnb 整合了超过 450 万个活跃房源和 8 亿次搜索会话,以根据用户在会话中点击和跳过的房源来确定相似度。同一用户在会话中点击的房源被推得更近;用户跳过的房源被推得更远。考虑到离线性能和在线服务所需的内存之间的权衡,团队将房源嵌入的维度定为 d=32。


AirBnb 发现,某些房源特征不需要学习,因为它们可以直接从元数据中获取,例如价格。然而,从元数据中获取建筑、风格和氛围等属性则要困难得多。


在投入生产之前,AirBnb 通过测试模型推荐用户实际预订的房源的效果来验证他们的模型。该团队还进行了 A/B 测试,将现有房源算法与基于向量嵌入的算法进行了比较。他们发现,采用向量嵌入的算法使点击率上升了 21%,发现他们预订的房源的用户增加了 4.9%。


该团队还意识到,向量嵌入可以用作搜索实时个性化模型的一部分。对于每个用户,他们使用 Kafka 实时收集并维护过去两周内用户点击和跳过的短期历史记录。对于用户进行的每次搜索,他们都进行了两次相似性搜索:


  • 根据最近搜索过的地理市场,然后

  • 候选房源与用户点击/跳过的房源之间的相似度


嵌入在离线和在线实验中进行了评估,并成为实时个性化功能的一部分。


Doordash:个性化商店信息

Doordash 拥有各种各样的商店可供用户选择订购,并且能够使用个性化偏好显示最相关的商店,从而改善搜索和发现。


Doordash 希望使用向量嵌入 将潜在信息应用于其商店信息流算法。这将使 Doordash 能够发现商店之间尚未充分记录的相似之处,包括商店是否有甜品、是否流行或是否有素食选择。


Doordash 使用了 word2vec(一种用于自然语言处理的嵌入模型)的衍生模型,称为 store2vec,它根据现有数据进行了调整。团队将每个商店视为一个单词,并使用单个用户会话期间查看的商店列表形成句子,每个句子最多包含 5 家商店。为了创建用户向量嵌入,Doordash 将用户在过去 6 个月内下订单的商店的向量相加,最多可加 100 个订单。


例如,Doordash 使用向量搜索根据用户最近在旧金山热门时尚餐厅 4505 Burgers 和 New Nagano Sushi 的消费记录,为用户寻找类似的餐厅。Doordash 生成了一份类似餐厅列表,该列表测量了用户嵌入与该地区商店嵌入之间的余弦距离。您可以看到,余弦距离最近的商店包括 Kezar Pub 和 Wooden Charcoal Korean Village BBQ。


Doordash 的向量搜索示例取自博客《带有向量嵌入的个性化商店信息流》。


Doordash 将 store2vec 距离特征作为其更大的推荐和个性化模型的功能之一。借助向量搜索,Doordash 能够看到点击率提高 5%。该团队还在尝试seq2seq等新模型、模型优化以及整合来自用户的实时现场活动数据。


向量搜索的关键考虑因素

Pinterest、Spotify、eBay、Airbnb 和 Doordash 使用矢量搜索创造了更好的搜索和发现体验。其中许多团队最初使用文本搜索,发现模糊搜索或特定风格或美学的搜索存在局限性。在这些情况下,将矢量搜索添加到体验中可以更轻松地找到相关且通常个性化的播客、枕头、出租、图钉和餐馆。


在实施矢量搜索时,这些公司做出了一些值得注意的决定:


  • 嵌入模型:许多人一开始使用现成的模型,然后用自己的数据对其进行训练。他们还认识到,可以通过将单词及其描述与最近点击的商品和类似商品交换来使用 word2vec 等语言模型。AirBnb 等团队发现,使用语言模型的衍生模型(而不是图像模型)仍然可以很好地捕捉视觉上的相似性和差异性。
  • 培训:许多公司选择利用现有的大规模数据集,根据过去的购买和点击数据来训练他们的模型。
  • 索引:虽然许多公司采用 ANN 搜索,但我们发现 Pinterest 能够将元数据过滤与 KNN 搜索相结合,以实现大规模效率。
  • 混合搜索:向量搜索很少取代文本搜索。很多时候,就像 Spotify 的例子一样,最终排名算法用于确定向量搜索或文本搜索是否产生了最相关的结果。
  • 生产化:我们看到许多团队使用基于批处理的系统来创建向量嵌入,因为这些嵌入很少更新。他们使用不同的系统(通常是 Elasticsearch)来实时计算查询向量嵌入,并在搜索中加入实时元数据。


Rockset 是一个实时搜索和分析数据库,最近增加了对向量搜索的支持。立即开始免费试用,获得 300 美元的积分,试用 Rockset 上的向量搜索,实现实时个性化、推荐、异常检测等。