好久没写技术文章了,咱们就来随便写写吧
最近好一段时间,叔都在研究gss,gss是什么了,general special search,就是针对特殊搜索做的通用检索,好高大上的一个词,好吧,我们重头开始说;
搜索是什么?搜索就是通过技术帮人们找到他们心中想要的东西,这里面的关键是两个,第一个是找到东西,第二个是找到心中所想,换算成专业的术语,就是考察的两个指标是召回和准确,所有搜索的最终目标就是这两个;
1.召回
1.1解析query
从召回开始,gss的输入是用户的query以及da根据输入query分析出来的一些成分信息,da的事情我们暂不去说它,我们说一下gss是怎么解析的吧,他通过的是一套pattern+feature的方式来进行解析,pattern是什么,pattern就是从我们常用的语句中提取出的表达式,比如刘德华演的电影,表达式就是[actor][stopword][type],stopword就是一些连接词,这一个表达式可以覆盖,张学友的电视剧,陈赫拍的综艺这一系列的query,feature就是actor所有可能的选项,所以召回其实就是尽可能的挖掘出pattern,使得不管用户输入什么query,我们都能从中提取出足够多的信息来进行搜索,目前这一块我当然是做的比较low,主要指覆盖了一阶和二阶的组合,长尾的覆盖暂时还没有做,难点当然也是长尾的覆盖,既然我写了这个,表示之后会把长尾词覆盖做成一个topic来进行的,比如挖pattern;
但是这只是一部分,用户的输入解析其实应该是da做的,gss只是因为自己有业务体系,所以把这个也做了,提高召回最快的做法,还是接入da,之后可以花个一天的时间,把这个接进去;
1.2建索引
接下来说召回的另外一部分,也就是如何从商品数据中提出有用的特征和属性来建索引,这个事情的极致,就是切词,把商品的所有信息都切成可以理解的短语来建索引,当然这里的难点就是如何给不同的短语设置权值,避免引入不相关的切词短语;而一般的搜索,其实不应该从这个防线往下走,因为我们一般都是针对具体业务来的,比如视频、小说、商品、旅游,这些都是有很强的业务性的,而这些业务数据很多时候并不一定体现在商品上,他们是商品的标签而不是描述,所以在针对具体业务的搜索上,分类体系往往是更加合适的,即把一个检索问题变成一个分类问题,将商品扔到一个个合适的体系里,往往更加适合用户来进行选择;
举个例子,如美食,第一个体系自然是行业分类,他可以分为 川菜、湘菜、粤菜、火锅、麻辣烫、烤鱼等一系列菜系,这种分类可以帮助我们快速的对自己心中所想进行定位,然后下发到某一个类别中去;第二个维度是地域,从区(浦东)、到商圈(陆家嘴)、到热门区域(传奇广场),这是一个个往下钻的,做的越细致,用户的需求更容易定位,还有地铁沿线,这都是地域维度要考虑的,第三个维度是菜谱,如水煮鱼、米线、水饺、剁椒炒鸡蛋,这是从另外一个维度来看用户需求,也能覆盖一部分的真实需求;当然最基础的检索,还是基于字面的检索,比如搜小南国、外婆家,但是在业务搜索中,字面检索只是其中的一个组成部分,并不是最重要的组成部分了;所以在召回的时候,应该尽可能多的找到用户感兴趣的纬度,然后将其体系化,这样每做一次就意味着一类新query召回,可以极大的提升召回率;
o2o还有一个问题就是距离,要做附近,要做场景化,这是另外一个话题,不在这里讨论了;
2.精确
精确是另外一个维度,帮用户找到心中所求,而不仅仅是找到数据;而这个问题也是涉及两点,第一是排序,第二是过滤:
2.1 排序
先说排序,排序说的是在召回的一堆数据中,设计一种方案,对商品进行合适的排序,将用户想要的放在前面;这个事情从用户的纬度可以分为通用和个性化两个方面,从技术的纬度可以分为规则和预估两种方法;
2.1.1 通用排序和个性化
通用排序顾名思义就是我搜这个词和你搜这个词出来的结果是一样的,这种排序方式是通用的;他是基于统计的方法来做的,通过统计出具有什么特征的人更加容易去做什么事情,给出一个规则或者一个预估;举个例子:当我们发现搜索耐克的同学往往都会去看adidas的商品,或者搜火锅的人基本上都喜欢点海底捞,在上述这种前提下,我们会把adidas做为推荐,会把海底捞权重提高,这就是通用的排序,是基于历史做出的规则或预测;
而另外一种就是个性化,是在通用的基础上加上一些个性化的东西,比如同样是搜火锅,如果我们发现其中一个人多次在呷哺呷哺交易,这时候应该把呷哺呷哺的数据往上拉;同样是在张江,发现一个人经常在御桥吃火锅,就可以把御桥的火锅店排在龙阳路的火锅店前面;这就是个性化的东西,完全取决这个用户之前做过什么;
两者的区别是什么,就是两个第一次接触互联网的同学都站在张江地铁站,搜火锅他们出来的东西应该是一样的,这是通用搜索;而当一个人搜索火锅,买了海底捞的团购,另外一个人去了小辣椒吃川菜,在下一次他们都搜索美食的时候,出来的东西就会有所区别,这就是个性化;
2.1.2规则和预估
排序的方案分为两种,一种是规则,一种是预估,很好理解,我比较喜欢用规则的方式,观察加一些统计的方式来解决问题,简单粗暴,预估在做到一定规模之后会有用,是好中取优的方案,但是一般具有比较多的限制条件,方法就不在这里提了;另外说一点的时候,在做业务搜索的时候,业务属性其实往往会比搜索字面更重要,所以很多时候会把业务属性单独拉出来做排序,比如美食:价格、折扣、口味、环境、服务、距离,这些在业务搜索上,往往更加重要,因为很少人找美食,会直接不点筛选或者排序就下单的;
2.2过滤
第二个问题是过滤:我们自己做业务搜索搜商品,和在公司网页搜索搜商品,最大的区别在于网页搜索肯定能给你相关的结果,而业务搜索不一定;比如搜国美,可能会出国美的电器,也可能会出韩国美女,但是通过排序的方式,依据网民历史数据的统计,总能把国美的数据放在韩国美女的前面,而且能填满前面几页,因为他候选集多;但是业务搜索不一样,受制于数据采集,往往有可能我们只有韩国美女整容院的数据,而没有国美电器的数据,所以只能出韩国美女的结果了,这种case比比皆是;因为我们的候选集是有限的,而网页搜索的候选集是无限的,我简单抓一个点评的商铺页,就有2亿多条,更何况全网的数据,而比如糯米的团购、点评的团购,满打满算也就是几十万条,撑死几百万条,一旦细分,肯定会出现召回不了国美只能召回韩国美女的badcase了,这就涉及到过滤,一半的过滤方案是设置一个相关性,而我这里的方案更简单,就是只做精准匹配,也就是直接把切的全部干掉了;
3.总结
随随便便讲了好一些,大的方面就是两点,召回和准确,细的方面就是去做pattern挖掘、细化数据建新维度索引、根据业务和点击进行排序,往装逼的方向来说,就是事情做到极致,就是不管用户输入啥,能根据他的输入、历史信息、所处场景、个人信息给出他最想要的东西,这需要静下心来细细的准备数据,清洗,整理,是件辛苦活,嘿嘿,当然也可以做成装逼范,来百度的第五年,得出的结论是升级和你做什么事情没啥关系,升级无非是看你从哪个切入点来讲故事;而对我来说,最重要的是这个故事我觉得有意思;