语义搜索的实现:使用 Elasticsearch 构建食谱搜索

在电子商务网站中实施语义搜索。

刚接触 Elasticsearch 吗?欢迎参加我们的 Elasticsearch 入门网络研讨会。您也可以开始免费云服务试用,或立即在您的计算机上试用 Elastic。

引言

许多电子商务网站都希望提升食谱搜索体验。语义搜索如果应用得当,可以让客户根据更自然的查询快速找到所需的配料,例如"情人节的配料" 或"感恩节大餐。"

本文将演示如何使用 Elasticsearch 实现支持此类查询的语义搜索。我们将配置一个索引来存储超市的配料和产品的目录,并演示如何使用该索引来改进食谱搜索。在本文中,我们将介绍如何创建这种数据结构,并应用自然语言处理技术提供符合客户意图的相关结果。

本文中介绍的所有代码都是用 Python 开发的,可在GitHub 上获取。您可以访问资源库,查看源代码,根据需要进行调整,并直接在您的开发环境中实施解决方案。

要开始实施语义搜索,我们首先需要定义自然语言模型。Elastic 提供了自己的模型ELSER,但也支持整合来自不同供应商的 NLP 模型,如 Hugging Face。这种灵活性使您可以选择最适合您需求的方案。

在本文中,我们将使用ELSER,它可以降低部署和管理 NLP 模型的复杂性。此外,Elastic 还提供语义文本功能,大大简化了流程。有了semantic_text,整个嵌入生成过程就变得简单而自动化。您只需定义一个推理点,并在索引映射中指定接收嵌入的字段。在编制文档索引时,将生成嵌入并自动与指定字段关联。

设置步骤

以下是创建支持语义搜索的索引的步骤。按照这些说明,您就可以配置好索引,并为语义搜索做好准备:

  1. 创建 推理点
  2. 创建索引,将描述字段设置为 semantic_text,以便接收嵌入信息。
  3. 将数据索引到杂货目录索引中,该索引将存储产品目录。该目录是从此处提供的数据集中获取的。

语义搜索在超市中的应用

现在,我们已经用杂货店产品数据填充了索引,我们正在测试和验证查询,以便使用语义搜索改进搜索结果。我们的目标是提供更智能的搜索体验,了解上下文和用户意图,提供更相关、更准确的搜索结果。

基于产品目录,让我们来探讨一下语义搜索如何通过解决词汇和上下文问题来改变杂货店的搜索体验,而传统的词汇搜索往往难以解决这些问题。

1.解读烹饪意图

问题 01:客户可能会搜索"烧烤海鲜" ,但词法搜索系统可能无法完全理解查询背后的意图。它可能无法识别所有适合烧烤的海鲜产品,只返回产品标题中包含"seafood" 或"grill" 的确切术语的产品。

首先,我们将进行词性搜索并分析结果。然后,我们将进行同样的语义搜索,比较同一搜索词的搜索结果。

查询词法搜索

结果

搜索类型名称得分
词法西北鱼阿拉斯加贝尔迪雪蟹10.453125
词法吉田先生,酱汁原味美食7.2289705
词法优质海鲜品种包 - 20 件7.1924105
词法美国红鲷鱼 - 整只、头朝上、洗净6.998647
词法龙虾爪& 胳膊,可持续野生捕捞6.438654

词条搜索返回了一些适合烧烤的海鲜产品,如美国红鲷鱼和西北鱼阿拉斯加 Bairdi 雪蟹。然而,词法搜索返回的相关性较低的产品排在了列表的前列,例如吉田先生酱,它不是一种海鲜产品,而是一种肉酱,这表明词法算法很难完全理解"用于烧烤的语境。"

语义搜索解决方案

我们使用的查询方式是将"seafood" 与"grilling" 等烹饪上下文结合起来,返回一个全面的选项列表,如鱼片、虾和扇贝,这些都是烧烤的理想选择--即使"grill" 或"seafood" 这些词没有直接出现在产品名称中。这可确保搜索结果更贴近客户的意图。

查询语义搜索:

搜索类型名称得分
语义学去头洗净的整条鲈鱼16.175909
语义学阿拉斯加黑鳕鱼(黑貂鱼)15.855331
语义学美国红鲷鱼 - 整只,头朝下15.454779
语义学西北鱼阿拉斯加贝尔迪雪蟹15.855331
语义学美国红鲷鱼 - 整只,头朝下15.3892355

语义搜索不仅返回了与"seafood," 这一术语直接相关的产品,而且还理解了"grilling," 这一上下文,并带来了适合烧烤的整鱼和鱼片。关键在于结果的精确性,其中包括烤制常用的全鱼,如白鲷鱼和阿拉斯加黑鳕鱼。

问题 02 :许多客户在工作一天后会搜索快速简便的晚餐解决方案,使用的术语包括"Easy Weeknight meals。"传统的词法搜索可能无法完全捕捉到快餐的概念,通常只关注名称中包含"easy" 一词的产品。

与上一个问题一样,我们将首先进行词法搜索。之后,我们将采用语义搜索来解决问题。

查询词法搜索

结果

搜索类型名称得分
词法艾利易撕地址标签,4200 个装8.017723
词法自热应急/便携餐 326.592727
词法海岸海鲜黄鳍金枪鱼块 Poke5.836883
词法Hefty 超重 12 盎司泡沫塑料5.8116536
词法Vanity Fair Everyday餐巾纸,2层,110片装5.752989

词法搜索返回的相关结果要少得多,包括与餐饮完全无关的物品,如 Avery Easy Peel Address Labels 和 Vanity Fair Everyday Napkins。这些产品无法满足用户对快餐的需求。虽然词法搜索确实返回了一个有用的产品(Omeals Self Heating Emergency Meals),但其他结果,如餐巾纸和标签,仅与描述中的"easy" 或"weeknight" 匹配,没有真正满足用户对快速用餐解决方案的需求。

语义搜索解决方案

我们实施了一项查询,了解快速简便餐饮背后的意图。它将可快速烹制的产品,如预煮肉类、冷冻意大利面或套餐联系起来,即使这些产品的名称中没有明确包含"easy" 这个词。这种方法可确保顾客找到最合适的选择,在周末快速享用晚餐,满足对便利性的需求。

查询语义搜索

结果

搜索类型名称得分
语义学自热应急/便携餐 3214.610006
语义学Nissin,杯面,虾,2.5 盎司13.751424
语义学Namaste 无谷蛋白华夫饼& 煎饼预拌粉13.73376
语义学爱达荷土豆、黄金烤土豆饼12.549422
语义学Nissin 杯面,鸡肉,24 支装12.034527

语义搜索返回的产品明显与方便快捷的膳食有关,如方便面(杯面)、预煮土豆和煎饼粉,这些都是简单的周末晚餐的典型选择。这表明,语义搜索可以抓住"简易隔夜饭这一短语背后的概念," ,从而捕捉到用户寻找快捷方便饭菜的意图。有趣的是,其他类别的产品,如"苏打水、" ,在相关情况下(如佐餐饮料)也可能包括在内。

2.地区术语和词汇变化

问题:一位客户可能会搜索"soda," ,而另一位客户可能会使用"pop" 来搜索相同的产品。传统的词库检索无法识别这两个词指的是同一个项目。

查询词法搜索

结果

搜索类型名称得分
词法Prime Hydration+ Sticks 电解质混合饮料14.492869
词法Capri Sun,100% 果汁,多种包装12.340851
词法Joyburst 能量饮料, Frose Rose, 12瓶装11.839179
词法Kellogg's Pop-Tarts, Frosted Brown Sugar Cinnamon9.97788
词法Kind 迷你巧克力棒, 多样包装, 0.79.336912

词法搜索侧重于精确的词语匹配。虽然它返回了 Prime Hydration 和 Capri Sun 等产品,但与"pop" 一词直接匹配也导致了不相关的结果,如 Kellogg's Pop-Tarts,它是一种零食而不是饮料。这凸显了当一个术语有多种含义或可能含糊不清时,词汇搜索的效果会如何降低。

语义搜索解决方案

在语义查询中,我们可以克服词汇搜索无法解决的词汇变化问题。通过扩展搜索条件,我们能够根据上下文的含义获得结果,提供更相关、更全面的回复。

查询:

结果

搜索类型名称得分
语义学奥利葆 12 盎司益生元苏打水品种14.776867
语义学佰草集抗氧化可可粉,多种包装,18 磅14.663253
语义学怪物能量饮料,零度超能,24 磅14.486348
语义学Joyburst 能量饮料,12 盎司14.007214
语义学Joyburst 能量饮料, Frose Rose, 12瓶装13.641038

语义搜索会返回与"pop" 这一概念直接匹配的产品,作为"soda" 的同义词(如 Olipop Prebiotics Soda),即使产品名称中可能没有"pop" 这一确切术语。搜索理解了用户的意图--清爽的低糖饮料--并能够返回相关产品,包括益生元苏打水(Olipop)和无糖能量饮料(Monster Energy Drink)等选项。

结论

事实证明,在食品杂货店中实施语义搜索对于理解复杂的查询非常有效,如"烧烤海鲜" 和"简易周末餐。"这种方法使我们能够更准确地解读用户意图,返回高度相关的产品。

通过使用 Elasticsearch 和 ELSER 简化流程,我们能够快速高效地应用语义搜索,显著改善搜索结果,提供更灵活、更有针对性的购物体验。这不仅优化了搜索过程,还提高了为客户提供的搜索结果的相关性。

参考资料

ELSER 型:

https://www.elastic.co/guide/en/elasticsearch/reference/current/put-inference-api.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/infer-service-elser.html

语义文本:

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-text.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search.html

数据集:

https://www.kaggle.com/datasets/bhavikjikadara/grocery-store-dataset?select=GroceryDataset.csv

语义搜索:

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search-semantic-text.html

相关内容

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用