zoukankan      html  css  js  c++  java
  • 个性化搜索的几个阶段

    在电商领域里,搜索是一种最直接的用户消费的场景。每个用户进入一个app,都有自己的一些意图,比如想买鞋子、想买衣服,而且对一些品牌以及颜色风格都有一定的要求。因此搜索对于商品的触达是非常重要的。

    我这里就针对自己的理解,对个性化的搜索做一个粗略的总结。一般来说app内的搜索都会经历下面几个阶段:

    • 应用的初期:基于关键字的搜索
    • 应用的发展期:基于主副标题的全文检索
    • 应用的成熟期:针对搜索进行排名优化
    • 应用的进化期:个性化的搜索

    下面就针对各个阶段描述下大概的过程。

    关键字搜索

    在应用最开始的阶段,应用内的内容不多,用户量也比较小,比如刚刚建立起来的电商网站和应用商店等。主要可以借助关键字进行搜索的匹配的,比如电商网站存储下面的表:

    关键字 商品
    耐克 001
    Nike 001
    阿迪达斯 002
    三叶草 002
    adidas 002

    这样在搜索的时候可以直接基于关键字定位到商品。这种方式针对于最基本的数据库就可以实现。

    全文检索

    随着应用的完善,直接基于关键字的匹配难以维护。因为商品逐渐增多,用户搜索的关键字变化也越开越大,单靠业务规则来定义关键字和商品的关系就太麻烦了,因此就引入了全文检索的系统。

    关于全文检索的技术,说的通俗一点,就是维护了关键字跟相关“文档”的关系。举个典型的例子——词典,我们想要在词典中快速查一个英文汉字最简单的方式,就是通过目录进行定位,然后懂啊指定的页码去查找对应的字;而不是一页一页的遍历寻找。

    比如,在商品的列表中,商品的主标题有下面的内容:

    • 001doc的内容是:“2017年耐克最新款”
    • 002doc的内容是:“小明同款 黑色耐克”
    • ...

    然后针对上面的文档进行分词建立倒排索引,就形成了:

    关键字 文档位置
    耐克 001doc,2,3 002doc,4,5
    阿迪达斯 003doc,6,7 004doc,1,3

    这样搜索耐克的时候,就可以直接基于后面的文档位置定位到目标的内容。

    从另一方面来说,商品主要的搜索内容来源就是主标题和副标题。大家有兴趣的可以参考淘宝京东,看一下它们的商品标题的定义规则。当然商品的标题也是需要经过统一的设置培训的,不能卖一个牙膏,结果起的名字是一个身穿阿玛尼手握iphone x,带着阿玛尼开着玛莎拉蒂的b血型双子座青春美少男早晨专用的牙膏——这不是扯淡么!

    试想一下,搜索阿玛尼的时候,搜出来这个牙膏,得有多崩溃。因此,app的管理员一定要做好商品维护的培训,尽可能的让商品的标题突出商品的核心竞争力、当下热门的话题、主要的属性用途等等,尽量不要放一些不相关的内容。

    主副标题定义好,就可以直接基于一些全文检索系统实现检索查询了。比如Elasticsearch, es也支持各种分词的插件,也可以让用户自定义分词插件。这样主副标题会根搜索的关键词以同样的方式进行分词,分词后才能通过关键字进行搜索。

    另外,要注意的是搜索要符合用户的操作习惯。比如在淘宝中,搜索关键词运动鞋就会出来匹配的商品;搜索运动鞋 男 白色,就会出现白色的男款运动鞋,而不是白色的衣服、性的洗面奶、女性的运动鞋。当然,如果没有同时满足几个条件的商品,可以提示没有xxx相关的商品,我们为您推荐下面的商品,然后就可以使用or的关系进行搜索了。

    搜索排名优化

    基本的全文检索已经做完了,默认来说,elasticsearch按照关键词的匹配做的分值的排序。各种app可以根据自己的业务需求,来进行排序规则的设置。比如一半的电商平台,都会又很多的卖家入驻,因此卖家之间会形成竞争的关系。比如a店铺卖阿迪的鞋子,b店铺也卖,那么搜索阿迪的时候,到底优先显示哪一家的呢?

    这就涉及到排名的优化了,不同的商家信誉、客服的态度是不一样的,商品的质、销量也是不一样的。因此就可以根据商品相关的属性以及商家相关的属性进行排序。

    商品的属性,有销售额、下单量、退货率、转化率、折扣、价格、上线的日期、适合的季节、pv、浏览的停留时间、库存等等

    商家的属性,有pv、uv、关注数、图片的质量和数量、销量、销售额、转化率、专柜动态、退货率、客单价、复购率、im在线时间、im响应时间、发货的速度等等

    根据这些属性,就可以针对搜索匹配的商品进行排序了。

    个性化搜索

    当应用趋于稳定、用户增长到一定层度时,就开始注重用户的体验了。比如一个男性用户搜索鞋子和女性搜索鞋子,我们期望看到的效果是不一样的,这其实就是个性化搜索。

    具体大厂们的做法我们时不得而知的,知道也不敢乱说,因此只能通过网上公开的一些信息,来揣测琢磨一下,如果我们自己想要做,该怎么实现。

    那么我这里有两种思路:

    基于用户模型添加关键字

    在用户积累到一定程度时,可以通过用户的交互行为以及购物历史,构建用户画像——刻画出这个人喜欢的品牌、分类、购买力、喜欢的风格、性别等等。那么当用户搜索鞋子的时候,一方面我们可以在搜索框下面实时的进行关键字的推荐,比如淘宝的这个场景:

    这样用户在看到推荐出来的热词时,就可以直接点击下方的搜索搭配词,进行精细化的搜索,

    另方面,也可以默认在后台加上这个用户的一些属性,优先进行推荐搜索。这种方式实现起来也不难,比如借助elasticsearch, 如果搜索的是鞋子,那么关键字传输到后台时,可以直接查找一下用户模型,添加性别 —— 鞋子 女进行搜索。如果用户搜索的男鞋子,经过分词后,一样可以转换成鞋子 男,此时就不需要再去查询用户模型获得性别属性了。类似的,我们还可以增加喜欢的风格、购买力等属性。

    不过这种方式是在商品搜索结果很多的时候推荐使用。

    基于用户画像和物品画像进行商品匹配

    另一种方式没有具体想好,大概的思路就是构建用户画像和物品画像。需要注意下面的问题:

    • 选取构建的特征是,需要注意用户特征和物品特征的对应关系。比如用户这边选取的是性别、年龄、喜欢的风格;物品这边就需要选取适合的性别、适合的年龄段、风格。
    • 注意特征的构建要统一到相同的维度

    大致的流程是,获取用户特征、获取搜索匹配的200个商品以及它们的特征;然后就可以基于用户特征和物品特征做相似度计算,比如夹角余弦。这样做完相似度计算后,取前50个作为搜索的结果展现即可。

    如果又一些深度学习的经验,也可以尝试基于深度学习做用户和物品的word embedding,然后直接计算它们的相似度。这种想法暂时还只是设想,具体如何实现还需要根据世纪的场景来做。

    未来搜索的思考

    现在知识图谱很火,如果能建立商品相关的知识图谱,那么搜索又可以更智能一些了。比如搜索angleababy穿过的阿迪鞋子,就会搜索出来angleababy在录制奔跑吧兄弟时,穿过的阿迪达斯的运动鞋。是不是感觉很有意思! 哈哈哈哈哈哈哈

    参考

  • 相关阅读:
    haproxy 2.5 发布
    cube.js sql 支持简单说明
    基于graalvm 开发一个cube.js jdbc driver 的思路
    apache kyuubi Frontend 支持mysql 协议
    oceanbase 资源池删除说明
    基于obd 的oceanbase 扩容说明
    jfilter一个方便的spring rest 响应过滤扩展
    cube.js schema 定义多datasource 说明
    typescript 编写自定义定义文件
    meow 辅助开发cli 应用的工具
  • 原文地址:https://www.cnblogs.com/xing901022/p/7545568.html
Copyright © 2011-2022 走看看