刚接触 Elasticsearch 吗?欢迎参加我们的 Elasticsearch 入门网络研讨会。您也可以开始免费云服务试用,或立即在您的计算机上试用 Elastic。
引言
许多电子商务网站都希望提升食谱搜索体验。语义搜索如果应用得当,可以让客户根据更自然的查询快速找到所需的配料,例如"情人节的配料" 或"感恩节大餐。"
本文将演示如何使用 Elasticsearch 实现支持此类查询的语义搜索。我们将配置一个索引来存储超市的配料和产品的目录,并演示如何使用该索引来改进食谱搜索。在本文中,我们将介绍如何创建这种数据结构,并应用自然语言处理技术提供符合客户意图的相关结果。
本文中介绍的所有代码都是用 Python 开发的,可在GitHub 上获取。您可以访问资源库,查看源代码,根据需要进行调整,并直接在您的开发环境中实施解决方案。
开始实施语义搜索
要开始实施语义搜索,我们首先需要定义自然语言模型。Elastic 提供了自己的模型ELSER,但也支持整合来自不同供应商的 NLP 模型,如 Hugging Face。这种灵活性使您可以选择最适合您需求的方案。
在本文中,我们将使用ELSER,它可以降低部署和管理 NLP 模型的复杂性。此外,Elastic 还提供语义文本功能,大大简化了流程。有了semantic_text,整个嵌入生成过程就变得简单而自动化。您只需定义一个推理点,并在索引映射中指定接收嵌入的字段。在编制文档索引时,将生成嵌入并自动与指定字段关联。
设置步骤
以下是创建支持语义搜索的索引的步骤。按照这些说明,您就可以配置好索引,并为语义搜索做好准备:
语义搜索在超市中的应用
现在,我们已经用杂货店产品数据填充了索引,我们正在测试和验证查询,以便使用语义搜索改进搜索结果。我们的目标是提供更智能的搜索体验,了解上下文和用户意图,提供更相关、更准确的搜索结果。
语义搜索解决的挑战
基于产品目录,让我们来探讨一下语义搜索如何通过解决词汇和上下文问题来改变杂货店的搜索体验,而传统的词汇搜索往往难以解决这些问题。
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 |
| 词法 | 自热应急/便携餐 32 | 6.592727 |
| 词法 | 海岸海鲜黄鳍金枪鱼块 Poke | 5.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" 这个词。这种方法可确保顾客找到最合适的选择,在周末快速享用晚餐,满足对便利性的需求。
查询语义搜索
结果
| 搜索类型 | 名称 | 得分 |
|---|---|---|
| 语义学 | 自热应急/便携餐 32 | 14.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 Cinnamon | 9.97788 |
| 词法 | Kind 迷你巧克力棒, 多样包装, 0.7 | 9.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




