搜索功能在各大APP中可以说是司空见惯的标配,相对“社交流量”的信息找人,“搜索流量”是人找信息,它传递的是一种“我想知道”的信息。搜索的算法设计可以很简单也可以很复杂,本文旨在带对搜索感兴趣的你了解“点击搜索框到出现搜索结果”背后的故事。
搜索框设计思路
先从搜索框的设计思路说起。UI元素不多提,主要强调一下宏观上“针对不同用户的不同需求设计搜索模块”的产品思维。
我们看看iOS系统、产品经理APP、淘宝、Google的搜索位置和设计(如下图),从左到右依次是手机系统->阅读类APP->电商类APP->搜索引擎的代表,用户在这些场景里对搜索的需求依次增强,搜索在页面上的表现形式也依次增强:搜索半隐藏->搜索icon->搜索在顶部栏固定->索索是首页主体。
(iOS系统、产品经理、天猫、Google搜索框设计)
产品经理APP,搜索功能以icon的形式放在首页右上角,它的搜索功能非常弱(搜索结果常常不如人意),首页强调的是运营的结果——“你应该知道”的信息,弱化了搜索功能——“你想知道”的信息,也可能是出于开发成本的缘由弱化了搜索。
在抖音和快手APP里,抖音将搜索功能以icon的形式放在首页左上角,快手将搜索功能放在个人页(二级页面)里,体验下来,抖音的搜索功能的体验比快手更好,快手也是避短了。以上从本质上说,都是为了给用户提供更好的产品体验。
(左:抖音,右:快手)
搜索算法
搜索icon背后的逻辑是通向“理想结果”的通道,大致分为四步:
用户输入内容(称“query”)分析用户搜索意图根据用户输入的信息对内容进行筛选召回对召回后的结果进行排序Step1:用户输入内容
用户在搜索框输入的内容,常见的是文本,现在也有图片、语音的方式。
在搜索框内设置“引导暗文”屡见不鲜,它既可以教育新用户可以搜索哪些关键词(如下左图),也可以承担运营推广、商业化的职能(如下右图)。
(左:多抓鱼,右:美团)
用户有时候会重复搜索同一内容,保留搜索历史就显得有必要了。移动APP的搜索历史记录大致有两种展示样式,列表式和按钮式,按搜索时间倒序排列,超过显示条数会被折叠。搜索历史删除功能有单条删除或一键清除两种。
搜索历史记录下常配有热门推荐、特色栏目、话题榜等运营模块。在资讯APP中,以热度榜最为常见,以“标题+热度值或热度角标”的方式出现,让用户能快速了解当前的热点从而点击感兴趣的内容进入“消费场景”。
这些模块涉及各自的排序算法或业务逻辑,其中蕴含商业化和运营价值,如在热议榜中穿插运营活动或广告或搜索挂件,但要注意热度和体验的合理性,避免出现突兀感降低用户的信任感和体验感。
(资讯APP搜索页面截图)
如果内容类型较多,产品会倾向于先让用户限定范围再搜索,使搜索结果更精准,如微信搜索(如下左图),也有的APP是在搜索结果上做分类,如资讯APP(如下右图)。
(左:微信,右:今日头条)
除了历史搜索,有没有其他提高用户输入效率、降低输入错误率的办法?
自动补全是不错的方法。这是基于产品定位或基于用户行为/画像的联想部分,对于前者的理解,如用户在京东APP上搜索水蜜桃,用户是想购买水蜜桃,而不是想搜索水蜜桃的百科;对于后者的理解,如用户先前浏览过阴阳师手办,当他在搜索框输入“阴阳师”的关键词时,“阴阳师手办”会是自动补全的首选。
(自动补全示例)
另外,当用户点击搜索按钮后,若需要等待搜索结果,需要有加载提醒的标识,避免用户认为搜索功能无响应。
Step2:分析用户搜索意图
对用户搜索意图的分析涉及分词和词语处理。
分词也称“文本词条化”,但总的来说用户更倾向于输入“连衣裙 蓝色”代替“我想要买一条蓝色的好看的连衣裙”。分词依赖分词库和词性判断,前者需要维护一个和产品定位相匹配的词库(市面上已有很多开源且丰富的词库), 词库的维护涉及新词发现,从大数据的分析可以将新词发现的流程自动化,人工抽检即可,例如词语“中国有嘻哈”是2017年才有的新词,代表一档Hip-hop音乐选秀节目。而词性判断涉及用词性库和上下文去分析词语的词性。
词语处理包括停用词过滤、同义词/近义词转换、词条归一化、自动纠错等。
停用词过滤指剔除“的”、“了”这类无意义的词或字,主要是通过词或字出现频次判断,市面上也有可用的停用词库。
用户在使用搜索的时候难免会有输错关键词或表意不清的情况,这时候理解用户搜索意图需要“自动纠错”,主要是通过噪声信道模型去纠正用户的错误输入,纠错的类型一般有:
同音纠错;形似字纠错;多字、少字、错别字、顺序错误;模糊音纠错,对英文输入来说,还有大小写归一化、词形时态的纠错等。结果页顶部最好保留疑似错误关键词的搜索结果入口,避免机器误判损伤产品体验。
(百度搜索“自动纠错”示例)
Step3:根据用户输入信息对内容进行筛选召回
在对内容进行召回前,我们需要通过索引去连接内容,就像查字典时用的查字目录。搜索的索引是倒排索引(inverted index),可以简单理解为“需要根据属性的值来查找记录”。
以电商为例,如下图:
(倒排索引示例)
召回内容时一般根据相似度分值择优召回。以资讯APP为例,即计算关键词和文章的相似度,通常是通过tfidf算法计算关键词和文本的相似度(标题、摘要、正文等不同文本有不同权重)或通过embedding(向量化)召回。
Step4:对召回后的结果进行排序
排序可以考虑内容静态分,评论、点赞、收藏等业务数据可以是影响最终score的因素。如果有个性化部分(如电商),机器会基于用户画像,在召回和排序的时候将用户可能最关心的内容优先召回和排序。重排环节加上业务逻辑,如商业化广告、运营活动等,该次搜索的结果展示list就准备好了。
对于时效性要求比较强的产品,如资讯APP,还需要加上一个时间衰减因子,避免将老旧内容先推出。
Step5:搜索结果展示
搜索结果展示页,常规的是根据相似度计算+业务逻辑的“关键词推荐”,另一种是“联想推荐”,适合的场景有:
在没有搜索结果或搜索结果较少的情况下“拓展”推荐,总比一个空白页好;除正常的搜索结果外,补充根据用户画像匹配的内容(用户感兴趣的概率高)或通过大数据计算出来的内容,作为一种兜底策略;承担某些运营功能。另外,在搜索结果页的一个小技巧,对命中关键词的文字进行高亮显示,让搜索结果更加“一目了然”。
(资讯APP搜索“庆余年”,结果展示页)
搜索指标
以资讯APP为例,我们来看看搜索优化的核心目标、观测指标和算法评估指标。
核心指标:搜索成功率=有点击的query次数/总query次数(成功的定义可以是一次搜索后有消费行为,如满足时长指标的点击等)
全链路指标:
搜索算法评估指标:NDCG
搜索商业化
目前市面上常见的搜索商业化有:
搜索框引导暗文搜索框皮肤搜索热门榜单热门搜索挂件搜索结果页优先推荐搜索彩蛋(左中:京东,右:淘宝)
这些位置多以CPM(Cost Per Mille)和CPC(Cost Per Click)的方式进行广告合作,常见的付费方式还有CPD(Cost Per Download)、CPA(Cost Per Action)、CPP(Cost Per Purchase)等等。
对“搜索”后续发展的看法
目前资讯APP的搜索较少个性化(电商搜索有部分个性化),主要是基于NLP去设计开发搜索功能。随着大数据和机器学习的发展,搜索的技术和功能设计也将会在NLP基础上,利用用户行为数据,往理解用户(query understanding),搜索延展(query expansion )、搜索推荐(query suggestion)纵深,如深度学习模型训练、Learning to rank,如根据用户搜索后的点击行为选择训练集等等,从而设计出更“贴心懂你”的搜索。
我们通过几个问题感受下这种趋势:
如果一次搜索无消费行为,二次搜索策略将如何优化?从大数据上看,某个关键词的搜索结果中,大多数用户倾向于点击一个相关性不如前排的内容,是否可以使用这类数据优化相关性的限制?用户在搜索结果页点击内容A后大概率会点击其下的相关内容B,这种用户行为数据能否用在搜索的优化上?一个喜欢吃苹果和一个喜欢使用苹果手机的用户,他们某些关键词的搜索结果会一模一样吗?本文由 @张小喵Miu 原创发布于人人都是产品经理,未经作者许可,禁止转载。
题图来自Unsplash,基于CC0协议。