如何从0到1搭建电商搜索系统(一)
时间:2023-03-16 14:10:01 | 来源:电子商务
时间:2023-03-16 14:10:01 来源:电子商务
本文为原创文章,如需转载需要注明作者:戴大宝。暂不支持转载到任何微信公众号~
梦寐以求的在家办公居然在这种情况下实现了?!假期越来越长,眼睛一睁一闭假期又多几天…闲来无事趁着周末把产品如何入门搜索给大家写写。
本文会先简单介绍一下搜索系统的结构是怎么样,帮助产品小白如何快速的入门搜索,做一个能基本满足中小型电商平台使用的搜索系统。希望可以帮到1到2个小伙伴。欢迎更多有兴趣的小伙伴一起学习讨论,共同进步。
概览篇
随着电商商品SPU越来越多,对于电商平台的搜索商品能力要求越来越高,各家电商平台都开始自己做搜索系统,这样会有一个好处就是可以根据自身实际情况调整商品排序,也比较适合商品价格竞争力保密性比较高的电商平台。
一般电商的搜索的核心指标是
搜索精度和搜索广度,精度就是搜索的精确性,广度就是搜索结果的范围。
搜索足够准确就行了,为什么还有一个搜索广度指标?
电商的搜索的关键结果(
Key Result)肯定是
“为用户准确搜索到想要的商品”。这主要是由于各式各样的电商平台商品虽然越来越多也不会面面俱到,所以过于追求搜索的精确度就会导致用户搜索的结果比较少或者搜索不到的情况多发,这样的后果往往就会显得平台商品比较单薄,用户搜索不到商品势必会产生流失,一方面要督促采销同学增加商品竞争里,另外一方面在搜索这个产品里面可以做的就是需要给用户暴露一些相关的商品。
所以搜索做的好不好,其实是在搜索精度和搜索广度二者之间做一个比较好的平衡点。
搜索主要包括
分词、数据查询、数据排序。
搜索架构这是我找到一个图,重新画了一下比较直观的搜索架构。可以看到用户搜索商品的时候输入搜索关键词,通过查分搜索的关键词,将拆分的关键词在和商品数据、库存数据、营销活动、订单信息等数据相匹配,得到查询结果,根据相关性、销量、优惠程度、用户以往下单的历史记录等因素对搜索的结果做合理排序。
分词篇
很多小伙伴不明白为什么搜索需要分词?
分词可以将用户搜索的关键词拆解,分析主要关键词来快速找到一堆商品,再根据用户的形容词来筛选这部分商品,得到正确的结果。
举个栗子,搜索“进口红鸟鞋油”,如果没有分词的过程,按照逐个字来匹配,“进
口红…”搜索引擎就认为是口红,搜索出来的结果就会有口红,而用户搜索目标商品其实是鞋油,这显然就不对了。加上分词,“进口红鸟鞋油”被正确识别品类为属于鞋油,“进口”为普通属性词只有0.1的权重,“红鸟”其实是一个品牌词,权重0.8仅次于鞋油。
//“进口红鸟鞋油”的分词结果{ "data": [{ "synonym": "", "tag": "普通词", "weight": "0.1", //权重 "word": "进口" }, { "synonym": "", "tag": "品牌", "weight": "0.8", //权重 "word": "红鸟" }, { "synonym": "皮鞋油", "tag": "品类", "weight": "1.0", //权重 "word": "鞋油" }]}
分词主要包括建立词库、词义分析,以及搜索纠错。
用户搜索关键词后,通过搜索监控会对这些搜索的关键词做一个数据整理,数据经过清洗,去掉一些无意义的乱码,有一个词库会把这些清洗后的关键词词条记录下来,词条通过语义分析(词义分析)和分词服务被拆分成最小颗粒度。根据拆分后的关键词,进行权重分析就能得出该关键词的主次程度;光是有主次关键词还不够,会对关键词从平面的一句话拆分成几个维度来看,从多维度多属性立体查询商品。
一般垂直的电商平台会自建词库,用户搜索的关键词会根据词库里面的词条来匹配,将关键词依照匹配结果拆分。
举个栗子:关键词如果是“猪肉脯”,如果词条里面只有“猪肉”,那么“猪肉脯”的分词结果就是“猪肉”和“脯”;可以看出形形色色的关键词很多,建立词库需要大量的用户数据积累,一开始就自建词库往往会出现搜索搜不准的情况,这就不奇怪是什么原因了~
所以自建的词库都不仅成本高,见效慢,而且还有经常出现搜索不准的情况。但是为什么垂直电商还是会自建词库?
这样做的好处主要是可以更加贴合本平台商品,提升搜索精度。再举个栗子:一个卖二手手机的平台,就可以增加一些手机参数和型号等数字作为词条,比如搜索“A1865”,这个词如果在词库里面有,就会被作为整词搜索,用户通过搜索引擎能比较好的搜索到iPhoneX 国行和港版;
词义分析主要是将用户输入的关键词通过NLP(Natural Language Processing 自然语言处理)理解词义,找到输入关键词的中心词,关键词按照不同的类型进行拆分并计算得分。根据
某大厂的一个通用实体命名接口,我们先将“阿玛尼臻致丝绒哑光唇釉”作为搜索的关键词模拟一下分词情况;可以看的分词的结果主要包括
品类词、品牌词、属性词(修饰词)这三部分,权重也是依次递减。
从搜索分词的结果来看,自建词库在选择网上开源的词条的,同时也可以根据自家电商平台商品的属性来扩充词库。一般包括品牌词,品类词以及其他的商品属性词。
“阿玛尼臻致丝绒哑光唇釉”分词结果上图分词结果图中,可以看到
"synonym": "amani;阿妈尼;armani jeans;阿码尼;emporio armani;armani"
“amani”、“阿妈尼”、“阿码尼”这个就是“搜索纠错”的一个过程。主要是为了避免用户因为输入法、口碑传播信息差异等情况,导致搜索不到用户期望的结果。
试一下淘宝、京东、苏宁的搜索纠错,比较之下京东的搜索纠错就做的稍显逊色~
搜索纠错分为同义词、近义词、错别字、屏蔽词。同义词: 一般包括品牌的中英文、别名等。armani和阿玛尼是同义词,以及上图返回结果里面的【synonym】里面第一个“amani”其实是全拼,可以算在同义词里面;或者“杨树林”也是ysl的同义词。
近义词:商品的近义词边界其实不太好定义,因为每个人对词的理解都不一样;近义词的应用场景其实是为了增加搜索的广度,可能商城里面猕猴桃比较少或者买完了,搜索结果展示一下奇异果也不足为奇。所以为了搜索广度,那么我们比较将相近的两个词也加上关联关系,来减少搜索结果较少、搜索不到带来的不好的体验。
错别字:这是为了避免输入法在输入的时候,难免输入一些错别字,没有搜索自动纠错就会把“阿码尼”在分词环节,拆分成“阿”、“码”、“尼”,而不会被认为是一个品牌词“阿玛尼”。
屏蔽词:在搜索关键词的时候,用户可能会因为加标点符合等加了一些乱码等,避免这些乱码或者标点符号影响搜索结果,扰乱搜索结果的权重,所以在遇到乱码和标点符号的时候就先屏蔽掉。
由于搜索作为较为庞大的系统,再三思索,本文将根据搜索系统的
分词、数据查询、数据排序会拆成多篇介绍。
欲知后事如何,请听下回分解~
另外,感谢腾腾和锦锦一直以来的技术支持~