用户案例|向量引擎在携程酒店搜索中的应用场景和探索

news2024/9/23 15:26:57

Zilliz AI 初创计划是面向 AI 初创企业推出的一项扶持计划,预计提供总计 1000 万元的 Zilliz Cloud 抵扣金,致力于帮助 AI 开发者构建高效的非结构化数据管理系统,助力打造高质量 AI 服务与运用,加速产业落地。访问https://zilliz.com.cn/了解更多。


携程集团(Trip.com Group) 是全球领先的一站式旅行平台,旗下的平台可面向全球用户提供一套完整的旅行产品、 服务及差异化的旅行内容,能够提供超过 120 万种全球住宿服务。

而随着携程用户需求和搜索行为日趋复杂多样化,基于文本匹配的检索方法已经不能够很好地满足用户在个性化精准搜索方面的需要。其中比较常见的问题有多义词问题。基于文本的检索方法主要依赖于关键词匹配进行搜索和排序,所以会忽视搜索意图背后更深层次的语义信息,导致对搜索结果的准确性和召回率的性能上有较大的影响。例如,查询“苹果”可以指代水果,也可以指代科技公司。同时,传统的搜索引擎在处理长尾查询上也往往出现召回效果不佳的情况。

此外,酒店搜索还会涉及到丰富的信息维度,如酒店的位置、房间类型、标签、评价等。传统的文本匹配方法难以有效整合和利用这些多维信息,对于多条件的精确搜索和筛选也有一些乏力。搭建向量引擎可以有效地解决上述问题,本文将详细介绍向量引擎在携程酒店搜索中的应用场景和相关经验。

01.当前局限性剖析

局限性之一:用户和商户表述差异

搜索引擎的索引数据是基于携程酒店搜索引擎团队采集的酒店信息、设施信息、地理信息等基础数据建立的。然而,不同用户的搜索习惯因人而异,商户和用户的描述也存在差异,不同商户在维护信息时也会千差万别。因此,搜索引擎需要具备一定的语义理解能力,使其能够顺利的在用户搜索输入和商户维护词汇之间进行匹配,以便准确地召回用户最想要的结果。

举个例子,如果商户维护了一个名为"带宠物"的设施服务标签,如果有一部分用户的输入是"能够带宠物",相关的设施服务和酒店就无法被搜索到。以往的常规解决方案是给"带宠物"标签添加别名"能够带宠物",这样可以通过关联别名来解决用户和商户之间的表述差异,使得不同的搜索输入能够召回同一类型的结果。然而,这种方法存在一定的局限性。别名的选择依赖于现有搜索词的点击情况,如果搜索引擎中没有某个词,那么该词就不会被展示出来,从而无法产生点击行为,那么该别名就无法被发掘到。

alt

局限性之二:不同语种的表述差异

举个例子,在携程海外搜索场景中,如果在多语言标签库中没有维护"無料Wi-Fi",搜索"無料Wi-Fi"时,搜索结果中就没有相关的酒店设施标签。在这种情况下,"無料"一词在日语中意味着免费,"無料Wi-Fi"实际上想要表达的是可以免费使用的无线网络连接。然而,如果没有维护多语言的标签名称,搜索引擎将无法正确识别用户的意图,导致搜索结果不准确。

为了解决这个问题,团队的解决方案是补充维护更多不同语言的标签信息,例如将设施标签的日文表达"無料Wi-Fi"添加到搜索引擎中。但这种方法依赖于翻译库的准确度和丰富度。由于词库庞大,很多词无法进行人工翻译,可能只能依靠机翻,这就存在准确度的问题,翻译的准确性对于能否搜索到所需内容有很大影响。

alt

局限性之三:不同背景下的音译表述差异

由于音译表述的差异,用户可能使用不同的拼写或注音来搜索同一个词或短语。如果搜索引擎无法正确理解用户的音译表述,用户换一种音译翻译词搜索就无法找到相应的结果,可能会导致搜索结果的相关性和准确性下降。举个例子,当用户搜索"荷里活"时,搜索结果可能全是中国的地标,而当搜索"好莱坞"时,则会正常召回美国好莱坞的相关结果。

常规的解决方案是添加同义词"好莱坞"和"荷里活"之间的关联,例如将"荷里活"作为"好莱坞"的别名,并在商区实体维护中进行相应的标注。这样可以确保搜索引擎既能召回相关结果,又能保证结果的排序准确性。但是由于音译词组合的多样性,有可能导致指数级别的爆炸问题,搜索引擎会承受的巨大索引压力,且收益不佳。

alt

02.向量引擎的前期调研

通过上面的问题分析,可以看到,携程酒店搜索面临着泛化召回和模糊召回的场景需求。为了能够满足需求,团队考虑了使用向量查询来帮助实现更准确的搜索。向量查询是一种基于向量空间模型的信息检索方法,其基本思想是将查询和文档表示为向量,通过计算它们之间的相似度来确定匹配程度,以此来召回与查询最相关的文档。

为了初步验证向量化能否解决问题,团队做了一个简单的初步验证:通过调用 OpenAI 的 text-embedding-ada-002 模型来获取查询词(query)和酒店名(item)的向量表示,并利用这些计算向量之间的余弦相似度。一般在语义上越是相似的词,其向量之间的相似度越高。可以根据计算向量的相似度,评估文本之间所包含的语义相似度。

alt

从验证结果来看,通过对比不同词语的向量相似度,可以区分出具有相同含义的词语和语义有差异的词语。那么向量相似度可以作为携程酒店搜索提供更准确的语义相似度衡量方式,引入向量引擎来改进携程酒店搜索结果的质量是一种可行方案。

03.向量引擎的架构设计

alt

04.技术选型

向量化模型选型

向量化模型是我们实现向量引擎的第一块基石。团队对比了一些常见的语言向量化模型,就准确率而言, multilingual-e5 和 Luotuo 都表现出相对较高的准确率。

dmultilingual-e5 在多语言处理方面具有更好的表现,相比之下,Luotuo 在小语种处理方面表现不佳。就性能而言,大模型(超过 1B 参数)的在线推理速度较慢,不适合实时调用。所以综合考虑准确率和性能两方面原因,团队最终选择了 multilingual-e5 模型作为语言模型。

alt

向量数据库选型

向量数据库则是支撑向量引擎进行向量检索的的另一大基石。根据市场上的选择,向量引擎可分为三类:向量索引组件+自建服务、专用向量数据库和传统引擎+向量索引组件。

alt

在进行技术选型时,携程酒店团队对向量引擎的几种实现方式进行了分类和对比,以便于根据具体需求和考虑因素来选择最适合的向量引擎,以此满足开发和业务的需求。

alt

对于向量索引组件+自建服务的方式上来说:为适应具体的应用场景和数据特点,可能需要更多时间的学习组件及额外编写代码处理索引的构建更新等,这可能增加了使用和维护的难度。传统引擎+向量索引组件这个方向上,公司的基础服务部门如果有这方面的支持,对于使用方来说,也是一种比较省力的办法。还有一个方向是使用专用向量数据库,所谓专业的工具做专业的事,可以实现事半功倍的效果。

经过上面的对比,团队选择将 Milvus 作为向量引擎,原因如下图所示:

alt

在服务能力上,为了确保能够满足接口服务的响应时间要求,团队对 Milvus 进行了相关性能测试。从测试环境下的测试结果可以看到,两种索引均能保证在 30ms 左右召回。IVF-SQ8 索引占用内存相对较少,优点是可实现单机部署,但该索引方式在召回性能上会略差于 HNSW,可根据实际需求平衡选择哪种索引结构做向量数据存储。

alt

05.向量引擎搭建实现

向量化服务

向量化服务主要包含三个方面的工作,即在线向量服务、实体数据离线向量化和向量化召回服务。

在线向量服务:通过文本在线向量化服务,用户可以将文本数据转换为数值向量表示,从而方便进行文本相似度计算等任务。使用的是 multilingual-e5 预训练的文本向量模型,可以直接使用这些模型进行文本向量化,无需自行训练。

实体数据离线向量化:该服务将实体数据转化为向量形式并做持久化,以便后续的向量检索和召回使用。

alt

向量化召回服务:向量化召回服务会对召回的向量会进行相关的依赖检查,确保召回的实体满足业务需求。最终,该服务会返回 TOPK 个最相似的满足依赖检查的实体。

alt

06.向量数据库部署搭建

Milvus 部署的前置依赖

alt

Milvus 向量数据库的部署的前置依赖是对象存储、消息队列和分布式键值存储。

  • 分布式键值存储:团队使用的是 ETCD 负责存储和管理各个节点的配置信息,用于配置和服务发现。

  • 消息队列:团队使用的是公司提供的 Kafka 基础服务,用于实时数据处理和消息传递。

  • 对象存储:团队使用的是公司提供的对象云存储平台,用于存储向量数据和相关的元数据。

Milvus 部署情况

  • 部署方式

团队使用的是 GitHub 上的源码构建自定义镜像的方式进行 Milvus 向量数据库的部署。版本为:v2.3.1。基于携程 k8s 基础服务平台,采用了集群部署方式。

  • 部署节点

针对于 Milvus 数据库的部署模块,集群部署方式需要部署以下 8 个组件,分别是访问代理层(proxy)、协调节点(Root coordinator,Query coordinator ,Data coordinator,Index coordinator)和执行节点(Query node,Data node,Index node)。

alt
  • 索引选择

索引选择的 HNSW 索引。HNSW 是基于图的索引,该索引具有高效的近似最近邻搜索,在处理高维度向量数据时表现出色,适用于追求高查询效率的场景。

  • 资源大小

在 Milvus 的部署中,参考 Milvus 官方提供的工具和根据实际的数据量和维度来配置资源。实际生产环境中,数据量达到了 3100 万+,每个向量数据的维度为 1024 维。下图展示了各个节点的资源配置情况:

alt

07.向量引擎的使用场景

场景一:携程酒店搜索场景

未引入向量引擎前,在直搜和联想场景下,例如搜索"美丽夜景",可能只能召回两家酒店。但如果搜索"不错夜景",则可以召回更多酒店。"美丽夜景"和"不错夜景"实际上都是酒店的一种标签类型,可以视为同义词。从查询语义的一致性上来说,使用"美丽夜景"应该具有召回"不错夜景"酒店的能力。因此,该场景下,可以引入向量引擎来实现同义词的召回,得到更准确的结果召回,以满足用户的需求。

alt

携程酒店搜索引入向量引擎召回的过程总览如下:

  • 查询理解:根据用户的输入词进行查询理解,生成查询理解语句。

  • 召回阶段:召回阶段包含文本召回和语义召回。

     a. 文本召回:对查询理解语句进行切词,使用文本匹配的方式进行召回。
    
     b. 语义召回:语义召回包含意图召回和向量召回。意图召回是根据用户的查询输入,进行意图识别,并根据成功识别的用户意图进行酒店召回;向量召回是在无法准确识别用户意图的情况下,通过向量引擎进行向量召回。
    
  • 合并和精排:根据召回的结果进行合并和精排的操作,最终输出展示给用户。

alt

场景二:SEO 落地页生成

alt

SEO 落地页生成整个过程如下:

  • 关键词挖掘:通过国际化团队的挖掘结果获取相关的关键词。

  • 实体召回:根据挖掘的关键词召回相关的实体。

  • 意图识别:对用户搜索词做意图分析识别。

  • 向量引擎泛化召回:当意图识别失败时,使用向量引擎进行泛化召回,以扩大召回范围。

  • 相关依赖检查:对召回的实体进行相关依赖检查,确保召回的实体与用户需求相关。

  • 酒店相关召回:根据识别和泛化召回的实体,进行与酒店相关的召回。

  • 筛选排序:对召回的酒店进行筛选和排序,按照产品规则进行处理。

  • 精排:根据精细排名规则对召回的酒店进行精细排名,以优化搜索结果的质量。

  • 生成 SEO 落地页:根据最终召回和排名结果生成相应的 SEO 落地页。

alt
alt

08.总结

本文主要介绍了向量引擎在携程酒店搜索中的应用场景和相关经验,分别从以下几个方面进行了介绍:

  • 携程酒店为什么需要向量引擎。携程酒店搜索亟需提升泛化搜索能力,以此更好的解决传统文本检索的同义词问题和长尾问题等。

  • 探讨了实现向量引擎如何做技术选型。在选择向量数据库时,根据携程酒店的需求和实际情况,选择了 Milvus 向量数据库作为解决方案。

  • 介绍了如何设计搭建向量引擎,包括向量化服务搭建和向量数据库部署等方面。

  • 介绍了向量引擎在携程酒店搜索中的使用场景,利用向量引擎的泛化召回能力,在酒店搜索场景和 SEO 优化上提高搜索结果的质量和准确性。

通过以上介绍,可以看出向量引擎在携程酒店搜索中的重要性和应用价值,对向量引擎进行合适的选型和设计,能够实现更精准高效的酒店搜索服务,提升用户的搜索体验。

本文作者

  • 赵明辰 携程酒店搜索引擎高级研发经理;
  • 刘阳 携程酒店搜索引擎资深研发

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1518272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

部署prometheus+Grafana可视化仪表盘监控服务

一、部署prometheus及监控仪表盘 简介 Prometheus是开源监控报警系统和时序列数据库(TSDB)。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控,输出被监控组件信息的HTTP接口被叫做expo…

微信公众号测试号里面显示若依前端页面

内网穿透 注册购买内网穿透隧道 https://natapp.cn/ 启动成功 这样就绑定你的本地启动项目 微信公众测试号配置 注册微信公众号测试号 获取access_token,AppID与appsecret 调用微信官方接口生成access_token(AppID和AppSecret可在“微信公众平台-设置…

IAB视频广告标准《数字视频和有线电视广告格式指南》之 简介、目录及视频配套广告 - 我为什么要翻译介绍美国人工智能科技公司IAB系列(2)

写在前面 谈及到中国企业走入国际市场,拓展海外营销渠道的时候,如果单纯依靠一个小公司去国外做广告,拉渠道,找代理公司,从售前到售后,都是非常不现实的。我们可以回想一下40年前,30年前&#x…

蓝桥杯--冶炼金属

目录 一、题目 二、解决代码 (1)版本一(报错:超时) 代码分析 (2)版本二(不会超时) 代码分析 (3)版本三(最终精简版)…

Github 2024-03-11 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-03-11统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4TypeScript项目3Jupyter Notebook项目3C#项目1HTML项目1CSS项目1Dart项目1Lua项目1Shell项目1Rust…

Vue3--数据和方法

data 组件的 data 选项是一个函数。Vue 在创建新组件实例的过程中会自动调用此函数。   data选项通常返回一个对象&#xff0c;然后 Vue 会通过响应性系统将其包裹起来&#xff0c;并以 $data 的形式存储在组件实例中。 <!DOCTYPE html> <html lang"en"&g…

Unload-labs

function checkFile() {var file document.getElementsByName(upload_file)[0].value;if (file null || file "") {alert("请选择要上传的文件!");return false;}//定义允许上传的文件类型var allow_ext ".jpg|.png|.gif";//提取上传文件的类…

【学习记录】调试千寻服务+DTU+导远RTK过程的记录

最近调试车载定位的时候&#xff0c;遇到了一些问题&#xff0c;千寻服务已经正确配置到RTK里面了&#xff0c;但是导远的定位设备一直显示RTK浮动解&#xff0c;通过千寻服务后台查看状态&#xff0c;长时间显示不合法的GGA值。 首先&#xff0c;通过四处查资料&#xff0c;千…

一文解析AI社交网络 CharacterX,确定性空投不可错过

从 OpenAI 发布 ChatGPT 以来&#xff0c;AI 迅速成为全球热门话题&#xff0c;围绕 AI 的衍生应用层出不穷。随着前一段 Sora 的亮相&#xff0c;AI 的优异表现再次震惊世界。人们不得不承认&#xff0c;未来的互联网将不可避免的以 AI 为主线进行推动和演化。 在加密领域&…

new ArrayList 不当导致 CPU 飙升

问题是这样的&#xff0c;周五正在写文档&#xff0c;突然收到了线上报警&#xff0c;发现cpu占用达到了90多&#xff0c;上平台监控系统查看容器&#xff0c;在jvm监控中发现有一个pod在两个小时内产生了61次youngGc一次fullGc&#xff0c;这个问题特别严重且少见&#xff0c;…

【小黑嵌入式系统第十九课】结课总结(三)——操作系统部分(RTOSμC/OS-Ⅲ程序设计基础(任务函数时间临界区通信))

上一课&#xff1a; 【小黑嵌入式系统第十八课】结课总结&#xff08;二&#xff09;——软件部分&#xff08;系统架构&调试&测试&运行&系统软件设计&#xff09; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0…

独立开发的轻量级简洁开源论坛BBS PHP源码 – 2023新版发布

最新的轻量级开源论坛php源码发布啦&#xff01;这是一款独立开发的论坛系统&#xff0c;可以帮助你快速地开发出你想要的网站。 如果你是PHP初学者&#xff0c;这款论坛系统非常适合你入门学习。不过&#xff0c;需要注意的是&#xff0c;由于它并没有进行商业化改造&#xf…

C++面试100问!(三)

前言 本次专题旨在回顾C的一些基础&#xff0c;方便实时总结。 C源文件从文本到可执行文件经历的过程&#xff1f; 预处理阶段&#xff1a;对源代码文件中文件包含关系&#xff08;头文件&#xff09;、预编译语句&#xff08;宏定义&#xff09;进行分析和替换&#xff0c;生…

intra-band contiguous carrier aggregation是如何判断的?

翻看38.101-1&#xff0c;在5.4A.1 Channel spacing for CA的描述中有发现具体规定。 首先 两个CC的channel spacing要为channel raster和SCS的最小公倍数的任意倍数&#xff0c;其次是否来连续要根据两个CC的channel spacing 与nominal channel spacing 做比较&#xff0c;…

睿尔曼超轻量仿人机械臂之六轴机器人运动认知与实操

机械臂运动分为关节空间运动和笛卡尔空间运动2种方式&#xff0c;2种运动方式分别对应机械臂运动学算法的正解和逆解&#xff0c;在不同的应用场景下可以使用不同的运动方式。 两种运动方式之间的不同可总结为以下几点&#xff1a; ①表示方式不同。关节空间运动发给机械臂的是…

代码学习记录16

随想录日记part16 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.11 主要内容&#xff1a;今天的主要内容是二叉树的第五部分&#xff0c;主要涉及最大二叉树&#xff1b;合并二叉树&#xff1b;二叉搜索树的搜索&#xff1b;验证二叉搜索树。 654.最大二叉…

《Python深度学习》阅读笔记

以下是《Python深度学习》一书中学习过程中记录的一些重要的专属名词和概念&#xff1a; 一、概念 深度学习&#xff08;Deep Learning&#xff09;&#xff1a;指使用多层神经网络进行机器学习的技术。神经网络&#xff08;Neural Network&#xff09;&#xff1a;一种模仿生…

常用SQL语句大全

目录 目录 一.SQL概念 二.数据库操作 2.0.连接数据库 2.1创建数据库 2.2使用数据库 2.3切换数据库 2.4删除数据库(慎用&#xff01;&#xff01;) 2.5查询数据库 三.表操作 3.0了解数据类型和数据约束 3.1创建表 3.2查询表 3.3修改表 3.4删除表 四.数据操作 4…

【PTA】L1-032 L1-033(c)第六天

L1-032 Left-pad 分数 20 作者 陈越 单位 浙江大学 根据新浪微博上的消息&#xff0c;有一位开发者不满NPM&#xff08;Node Package Manager&#xff09;的做法&#xff0c;收回了自己的开源代码&#xff0c;其中包括一个叫left-pad的模块&#xff0c;就是这个模块把javas…

【开源-土拨鼠充电系统】鸿蒙 HarmonyOS 4.0+微信小程序+云平台

本人自己开发的开源项目&#xff1a;土拨鼠充电系统 ✍GitHub开源项目地址&#x1f449;&#xff1a;https://github.com/cheinlu/groundhog-charging-system ✍Gitee开源项目地址&#x1f449;&#xff1a;https://gitee.com/cheinlu/groundhog-charging-system ✨踩坑不易&am…