搜索功能作为产品设计中的基础且重要的功能,已经伴随着产品的发展历经了数十年。笔者向我们分析了整个搜索的流程,并做了一个简单的概述。
第一部分:搜索功能是什么?
通过用户的输入,从海量的数据中能够找到与之匹配的信息的功能,称之为搜索。
搜索出生的原因是信息过载,只有大量的数据情况下,搜索才能发挥出应有的价值。假设整个世界只有10条新闻,你想知道标题中含有“中国”的新闻,扫一眼就知道结果了,搜索的功能反而鸡肋。
搜索功能是筛选+Ranking,根据用户的输入确定筛选条件,再根据一定的策略进行Ranking。随着信息的爆炸性以及用户人群的细分,随之诞生了搜索千人千面,结果列表的来源不仅仅跟你的输入相关,还会考虑用户画像,比如你最近的行为带来的一些标签。
为什么需要千人千面?
因为搜索所得的数据量实在是太大了,如果不同人群看到的结果都是一样的,是极其没有效率的。想象一下,一个输入条件有10W 条结果,大多数人看到前三页就极其困难了。
这个时候,用户要么选择放弃搜索;要么选择更精准条件的搜索。第二种方法对用户不是很友好,原因在于用户如何确定真实的搜索意图,不知道该输入什么,无法表述等等。倘若机器可以根据用户的历史进行预测推荐,那么用户的体验会有极大的提升。
第二部分:搜索流程
下图是搜索的流程图,虚线框中的主要是偏后台的工作,需要产品经理有适当的技术积累;剩余部分是会和产品、前端有交互的部分,需要产品经理进行产品设计。
接下来我们就一个个地讲:
第一节:功能确认
第一步:需要确认是否需要该功能【做不做?】
请大家回头看下搜索之所以产生的原因——信息过载,在这里其实就已经隐含了哪些产品需要有搜索功能。划重点:信息。
因此,但凡涉及到有信息度的,数据量较大的,则可以有搜索功能。比如看视频,视频有发布者、视频名称、参演人等等;比如商品,有风格、有品牌、有类型等等;再比如新闻网站,信息量更直观些,也是可以有搜索功能的。
那么哪些产品不需要有呢?常见的是工具属性偏强,主操作信息量较少的产品,比如闹钟、拍照类的产品。
第二步:确认重要性【入口确定、资源确定等】
非常重要: 数据量过大,用户目的相对明确,有某一主题或者更具体的要求,搜索可以极大的提高用户体验,比如:搜索引擎、电商网站。
次级重要: 用户随意性较高,并无较强的目的性,比如:新闻资讯类网站,该部分实效性的要求远高于搜索。
总结出这几点:决定,搜索的输入(类型)、形式以及输出(主准确?主召回?)。
在这里,再简单给大家介绍一下准确和召回的含义:
下图中的0,1分别代表否、是:Actual是实际情况中的数据,Predict是机器预测的数据。
准确率=在所有的数据中,机器预测正确的占比;换句话说,对所有数据来说,机器对了多少?
召回率=在所有准确的数据中,机器预测正确的占比;换句话说,对应该对的数据来说,机器找到了多少个对的?
第二节:输入
输入的类型:文本、语音、图片、二维码等等,由于不同的输入内容,我们对信息的解析,以及后续检索排序都有不同的方法,本文主要讲基于文本(自然语言处理NLP)相关的内容。
其他的我们这边简单讲讲:
如果用户输入是语音的话,那么第一步需要将语音转化为文本语言,然后继续走NLP相关的路径。
如果用户输入时图片,那么需要对图片提取特征,理解并进行搜索。如果是二维码的话,直接跳转到页面,或者直接给结果即可。
输入优化
在用户进行输入的时候,为了方便用户的收入,或者明确用户的搜索意图,我们可以采用以下方法,这些方法可根据实际的产品形态,选择适合自己的。每个方法带来的效果,相信大家都能自己领悟,我们这里不做详细说明。
将部分详情展示出来(多用于电商类产品);
自动纠错;
有搜索结果的相似词;
热门搜索词语;
基于该用户推荐的词语。
第三节:意图识别
判断类型
结果型,搜索的内容有明确的结果的,比如:爱因斯坦出生于什么时候?
段落型,搜索的结果需要用大段文字来表述,比如:人工智能是什么?
展示型,搜索的结果是一些信息的展示,比如商品,职位……
判断意图
意图通常与知识图谱,或者说字典交相辉映。
字典一般包含:词干化,停用词,同义词,一词多义,上下位词语,这些内容。
其中,词干化常常出现在英文的信息中,中文中不太常见;停用词是指词语没有明确含义,比如:了,呢;同义词,比如:自然语言处理与NLP;一词多义,比如:苹果【公司/一种水果】;上下位词,比如互联网是互联网游戏的上位词。
那么字典是用来干嘛的呢,用最通俗的理解就是撞词,如果这个词出现在词表中的,那么这个词所代表的意义就被我们所知道(更厉害一点的就是知识图谱了,这个词的属性,与其他词的关系都可以知道,知识图谱我们之后再讲)。
通过对词语的理解,我们可以去进行信息检索和排序。当然实际应用中,它不仅仅是撞词那么简单,有更多更深的算法来提高对意图识别的准确度。
第四节:检索和排序
检索
基于向量的信息检索中,标准的做法:余弦相似度,通过计算两个向量的余弦来确定两个文本的相似度。
结果型
该这种类型的问题,一般是依靠知识图谱来查询相关的结果的,这部分的内容我们在知识图谱中再详细讲。
段落型
根据用户的输入,通过查找文档–>查找段落–>根据需求决定是否需要段落摘要
最简单的段落摘要,就是高亮,将命中的前后多少字作为段落摘要的内容,复杂点,可以通过AI来自动生成一些段落摘要。
排序
排序在整个流程中,分为两种:一种是算法排序,在进行信息筛选的时候,算法已经给了每个结果的数值;第二种是人工干预排序,主要展示在页面中的排序。
算法的排序结果是机器给的,不同产品时期,算法功力都会对排序产生影响。作为PM,可以把希望的结果以及一些bad case给到,来进行算法的优化。
页面中的排序,主要是PM根据需求来定的,通过对业务的了解、用户需求的把握,筛选出合理的排序条件。
第五节:输出
有结果:
在有结果的情况下,作为PM,只需要定义好输出字段即可。目前展示的形式有3种类型:
(1)卡片展示:
卡片适合每块信息量较少的情况;
整体来看,卡片的展示数量较列表来说是多的。
在卡片中,用户操作不宜过多。
(2)列表展示:
由于列表占用空间较多,因此如果有更多的操作或者信息的展示,可以列表来展示;
整体来看,展示数量少于卡片的展示。
(3)个性展示:比如地图找房
无结果:
最简单直观做法:展示没有任何结果页面,再加上提示“抱歉没有您要搜索的内容,请换个词语试试看”。
整个流程优化的做法:
1. 预防:防止无结果的情况发生
可采用的方法:
更好的理解用户的输入,建立自己的字典(停用词、同义词等,详见意图识别部分);
将部分详情展示出来(多用于电商类产品)。
2. 恢复:在无结果的情况下,帮助用户回到正轨。
可采用的方法:
自动纠错;
提示有搜索结果的相似词;
帮助文档,应当如何搜索。
变通:将错误变成新的机会。
可采用的方法:
展示类似的结果;
热门搜索词语;
基于该用户推荐的词语;
提供用户反馈;
允许用户贡献内容(常见UGC产品);
当有内容时告知用户(常见于实效性不强且用户在某方面敏感型的产品,比如地产类、机票低价提醒)
第六节:结果优化【产品层】
我们讲,在搜索的时候,假如结果不如意,如何让用户继续留在页面上,并找到自己想要的结果。
筛选
筛选是一个有力的交互过程,意味着用户的需求明确,要求的结果更加精准。我们最怕的是用户不知道自己要什么,因此我们在设计的时,希望通过一系列的小功能,比如筛选比如提示,来让用户明确自己的需求。
通用办法:可以通过Tab键切换,或者筛选框来对结果进行一个初步筛选。
Pinterest的筛选:这个我是想单独讲讲的,这真的是我很喜欢的一个设计。当你输入查询条件后,会自动弹出你的输入+另外一个组合词,真的是比普通的筛选牛了很多。
页面比其他页面就筛选而言,空间占用更少,更多的留给信息展示。
组合词比结构化的筛选更多,有些词是用户更常用更多搜索的,但比较难归类到某个类别进行展示。
组合词的更新可以在后台完成,不需要对页面做过多更改。
当然,你也可以说,在输入时直接自动出来让用户选择,这个当然也没啥问题。面对一些未知数量且模糊的搜索时,用户的输入会先从大到小,Pinterest的做法相当于结果——反馈——新的结果,不断循环,对用户的感知更顺畅更友好,且用户本身对事物的掌控也一直没有被削弱。
输入输出改进
详情参照上文第二节:输入;第四节:输出-无结果-整个流程优化的做法。
第七节:结果评估&优化【数据算法层】
我们讲,在搜索的时候,假如结果不如意,如何让用户继续留在页面上,并找到自己想要的结果。
分析输入,了解用户
我们可以通过分析入口,分析Query,并结合用户画像、用户分类,进行输入分析,了解用户在我们的产品上,输入较多的是哪些类别、哪些内容。接下来的算法策略就可以根据这部分进行一些参考。
评估输出,优化算法
常用评估输出的办法有3种:
通过业务指标来评估,比如CTR、业务指标的转化率等。
通过A/B testing来做不同算法间的比较。
通过人工来评估。
由于A/B testing需要耗费的技术资源较多,大家可以根据自己公司的进度以及资源程度决定是否要做;剩下两个是建议一起做。业务指标来看总的效果,人工评估来发现一些明显的典型case。
结束语
由于时间关系,我们这次的文章中,主要对整个搜索的流程有了一个简单的概述,至于里面的细节,大家可以参考其他文档来做知识的补充。欢迎大家一起探讨。
备注:关于第四节:输出-无结果-整个流程优化的做法,我是参考woshipm上一位朋友写的。由于时间久远,没有找到链接,如果大家有谁知道的,可以把链接贴到评论中。