搜索功能在各大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(详细请看上一篇《做推荐业务,这4种机器效果测评方法你应该知道》) 搜索商业化 目前市面上常见的搜索商业化有: 搜索框引导暗文 搜索框皮肤 搜索热门榜单 热门搜索挂件 搜索结果页优先推荐 搜索彩蛋 (左中:京东,右:淘宝) 这些位置多以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,这种用户行为数据能否用在搜索的优化上? 一个喜欢吃苹果和一个喜欢使用苹果手机的用户,他们某些关键词的搜索结果会一模一样吗?