为什么知乎的搜索功能如此之烂? - 知乎

标签: | 发表时间:2017-06-18 07:33 | 作者:
分享到:
出处:https://www.zhihu.com

谢邀!(潜水员终于有可以专业回答的问题了)

利益相关:搜狗搜索工程师,对搜索技术「略懂」

搜索是技术方向辐射相当广的一个复杂系统,其技术门槛之高,在众多的互联网产品中能与搜索比肩的是少之又少。要想玩转这套系统,拥有一批最优秀且懂搜索的工程师和研究员是必不可少的。我看到之前@熊辰炎同学也提到说想解决的话,知乎可能需要5个熟练工干大半年。在我看来,这种团队配置作为站内搜索差不多能解决大部分基础问题,即达到不被“到处”抱怨。但如果要求再高一点点,能稍”智能”地处理用户查询,那么这种团队配置恐怕还是望成莫及。

当然搜索也绝不仅仅是一个人力问题,支撑搜索的人工智能技术正在”经验主义”(以统计学为代表)的道路上享受着大数据(特别是用户行为数据)的红利。从一个特定站点出发,即使是一个格调高、深受用户喜爱的站点,其能够接触到的数据无论是用户群体行为数据还是全网的信息资源都是十分有限的。用户对于全网通用搜索和站内搜索的期望的差别仅在于搜索范围从全网变为这个特定站点,但搜索用户天生的”懒惰”、表达含糊以及对搜索结果智能的期待从未改变过。而且由于用户对他所喜爱的站点的了解、熟悉程度远远超出其对全网的了解,所以用户对搜索服务所存在的各种问题更为敏感,从而也有更高的要求。正是这种数据局限所带来的技术水平局限与用户需求之间的矛盾,使得原生站内搜索注定就是一件不太可能成功的路。

扯远了,回到作为一个技术人员解释为什么知乎站内搜索没有通用搜索(例如百度、搜狗)的site查询好用吧。

@张前川关于搜索效果的评测解释得已经比较完善了,下面我就以这几个case为例解释一下通用搜索是如何解决背后的技术问题吧。主要分为NLP/相关性计算/排序这几个方面。

1.NLP

1.1分词(Word Segmentation)

搜索中的分词是指将文本切成多个独立的语义单元以作为检索的最小单元,然后分词后的词串建立倒排索引以加快检索服务的速度。这是信息检索最基本最重要的架构,这里不详细展开。

先看看张前川提到的“避谷”这个case,正如张前川所说,避谷应该切成一个独立的词。为了解释后面的算法,我把case改成“避谷方法”,更容易说明问题,它的正确切词方法是【避谷】【方法】。如果把避谷分成【避】【谷】两个单字,就容易出现知乎站内搜索这种【避】【谷】两字分开出现的结果,也是我们常说的结果发生语义漂移。那么如何知道【避谷】应该是个独立的词呢?

最经典的分词方法有基于词典的前向/后向最大匹配或基于语言模型的分词等等,其中如何构建准确而全的词典,用什么语料统计适用的语言模型都是算法成功的关键所在。

:通用搜索如何解决这个问题呢?

答:挖掘网络语料或用户行为数据!

a. 对于基于词典的方法,由于“避谷”是个道家的一个术语,有可能分词词典里不包含这个词。那么通用搜索通常可以通过挖掘网络语料(例如百科词条)来补充词典。

b. 对于语言模型或其他统计方法,用户群体历史的行为数据就是一种非常有价值的数据。这里仅提一个思路。历史上搜索“避谷方法”的用户,所点击结果的标题中“避”与“谷”很大概率彼此紧邻,“方“法”很大概率紧邻,而“谷“与”方法”很小概率紧邻。由此可以推断【避谷】【方法】应该相互连接组成一个词,而“避谷”与”方法”之间切分开来更合适。利用用户历史行为数据的方法还有很多,大家也可以打开思路。

1.2查询纠错(Query Correction)

再看“什么名字haoting“这个case,非常直观,大家都能看出来是用户把查询词的一部分敲成拼音了,需要系统自动纠错。当然这是个简单的纠错,只要找到haoting对应的上下文语言模型概率最大的汉字“好听”即可纠正过来。

有些需要纠错的case就不那么容易了。例如“哦泡手机”,原意是找“oppo手机。”人脑能够非常快速准确的完成这一个纠错过程,但对于不具备智慧的机器,这个转换过程并不那么容易。针对这个case算法纠错的过程大致应该是这样:首先把”哦泡”转换成拼音“opao“,然后计算“opao”和“oppo”之间的编辑距离(一种度量文本串之间相似程度的方法),然后通过多种数据和模型计算出来“哦泡”纠错成“oppo”的概率,特别是在上下文为“手机”的条件下“哦泡”纠错成“oppo”的概率。这里面的每个步骤都同时需要算法与数据的支撑,通用搜索面对更多的数据和更更多的用户,显然有非常大的优势。

1.3查询理解(Query Understanding)

查询理解这个概念比较广,广义上前面提到的分词、查询纠错也可以纳入查询理解的范畴,这里我们主要用查询理解来概括查询改写、词间紧密度、词赋权等一系列的对查询的理解以帮助获得更好的搜索结果。前川前面给出的“101大厦”就是一个比较综合的例子,但是这个case我有些不同看法。

首先“101大厦”合在一起表示一个完整语义的实体,所以相关的结果中101和大厦应该紧邻在一起。前川说应该分成一个词,但出于搜索查全率的考虑,即尽可能找到更多的相关结果,它们还是分开比较好,因为“101大厦”还有很多种其他的叫法,例如“台北101””101大楼”等等。挖掘出101大厦的这些等价(或同义)说法对于搜索效果至关重要。这种等价或同义的算法用在搜索中就是查询改写一种最常见的形式。

但是“101”和“大楼”之间又存在非常紧密的关系,两者如果在文档中相距太远,结果通常是不相关的。这里涉及的是另一个概念——紧密度,即既需要切成两个独立的词,但又要求结果中这两个词之间的距离足够近,某些情况要求一定紧邻。

查询改写、紧密度同样依赖于网络资源的挖掘以及历史用户行为的挖掘,例如用户在同一个session内的主动改写、用户查询后的点击、具有相似点击结果的多个query等等…每种数据的合理应用,都能让搜索效果有所提升。通用搜索正是利用其数千亿网页索引库以及每日数亿次的用户查询及后续行为,在大数据上逐渐积累对查询理解的智慧。这些恐怕任何一个站点都无法触及的。

2.相关性(relevance)

前面提到的都是NLP相关内容,我们再来看看搜索里另一个核心技术—相关性计算。相关性计算通常指给定一个查询和一篇文档,计算两者是否语义相关。语义相关是个非常大的挑战,从技术的发展历程来看,从早期的统计词出现的频率,例如tf.idf、BM25、到language model、proximity等等都试图从查询词在文档中出现的次数、位置、词的权重、文档的长度等等多个角度去估计查询与文档之间的相关度。近来在深度学习的影响下,基于深层神经网络的词嵌入、语义表示、语义匹配等新兴技术的涌现,正在带领相关性计算由匹配统计迈入“语义计算”的大门。搜狗、百度已经在这这方面取得了阶段性的成功,同时这个方向还有很多问题待解决,让我们拭目以待吧。

就前川提到的“为什么要来北京”这个case,可以从多个角度解决。例如通过查询理解,我们可以知道“北京”在这个查询中是个非常重要的词,而标题包含重要的词的文档相比于仅正文包含重要词的文档中有更大概率与查询词先关。前川提到的第二条结果不相关,”北京”即仅仅出现正文里。解决这个问题的思路还有很多,要想做个搜索,需要从多个维度去阐述查询与文档之间的关系,这是一项需要相当深积累的工作。

3.排序(ranking

排序,望文生义即将搜索结果按照满足用户需求的程度从高到低排序,以便最满足用户需求的结果能够排在搜索结果列表的最前面,让用户能够最先浏览到。排序主要涉及两大问题:用于排序的多维特征以及多维特征的融合以决定最终的顺序。

相关性无疑是搜索排序的一类非常重要的纬度,我们前面也提到相关性自身也需要从多个更细纬度去剖析。正如很多用户提到的,知乎是问答社区,有人提问、有人回答、还有人点赞、关注,为什么知乎返回的结果很多都零回答、零关注。其实问题的回答数、关注数、点赞数都是衡量一个文档质量非常客观的指标,这些对于衡量问题是否能够满足用户需求都是非常有价值的,也就是说这些都应该成为排序所考虑的特征。

那么这么多特征相互如何融合来决定最终的顺序呢?有很多基于规则或线性融合的方法,近年来排序学习(Learning to Rank)的方法已经无数次在各种竞赛、学术论文、工业界产品中将排序多特征的融合的结果带入或逼近局部最优解或全局最优解。

无论是排序特征的准确与丰富还是排序融合,都是搜索工程师们孜孜不倦地不断优化的方向,经验与积累也是非常重要的。

4.搜索架构

张前川提到了搜索性能与稳定性问题,足以证明他确实是搜索的专业人士。呵呵。大部分用户会认为搜索效果和搜索性能没有什么关系,但实际上两者是紧密联系在一起的。由于服务负载的压力、用户响应时间的限制,分给每次用户查询的计算资源和时间是非常有限的。底层的检索的性能越好,所能查找的候选文档越多,所留给排序优化的时间越多,越能使用更丰富的特征和更复杂的算法,达到更好的排序效果。简而言之,性能越高,效果提升空间越大。

除了最基本的倒排索引,架构上还有很多可以优化的点。例如对历史数据的批量倒排和针对新数据或更新数据的实时倒排的设计,其次针对标题、正文等重要度不同字段的处理、倒排的压缩,快速交并算法、灵活的多机分环架构等等这些都是一个好的搜索架构需要考虑的问题。而好的架构的设计也是来源于对于搜索这个任务足够深刻的理解,如果没有对搜索多年的打磨,一名再优秀的架构师也是不可能设计出一套完美的搜索架构的。

啰嗦很多,总结一下,知乎搜索体验不理想,存在多种问题,但这些问题绝不是知乎仅有的问题,也不仅仅是人力投入的问题。搜索一个异常复杂的系统,好的搜索体验需要技术的沉淀与积累,需要海量数据特别是海量用户行为数据的支撑。站内搜索就于其在搜索方向的积累、其能接触到的数据,像知乎这样面对高标准严要求的用户,注定不易做到用户满意。

当然凡是问题,是都能够被解决的~~

相关 [搜索] 推荐:

深度搜索

- - 译言最新精选
译者: HorseHour 原文地址: streamhacker.com. 当我们准备发布 Weotta时,我们已经为如何描述它犯了难. 我们使用了机器学习和自然语言处理吗. 我们最终觉得“深度搜索”是对我们工作最贴切的描述,它是一个超越了基本文本搜索的复杂搜索系统的简洁描述. 无需赘言,不管怎么看,我们都不是这个领域唯一的一家公司;谷歌和很多其他公司都在对深度搜索的各个方面进行研究.

搜索的未来

- Levi - 月光博客
笔者认为,未来的搜索有两个趋势:个性化,社会化. (注:本文给出的很多链接需要特殊方式才可以访问,请自行解决).   从google诞生的那一天起,google的搜索本质上并没有什么变化,依旧是:一个大大的搜索框,你敲进去几个词,google给出一些相关的网页. 不同的人对于同一个关键词所期待的搜索结果可能有很大差别啊.

google搜索技巧

- - ITeye博客
搜索的词语是网页中链接内包含的关键词(可使用多个关键词). 搜索的词语是网页标题中包含的关键词(可使用多个关键词). 所搜索的文件一个特定的格式. 搜索的词语是网页中链接内包含的关键词. 搜索的词语是网页内文包含的关键词. inurl:google.com 开源. 所进行的搜索在指定的域名或网站内.

oracle全文搜索

- - Oracle - 数据库 - ITeye博客
不使用Oracle text功能,当然也有很多方法可以在Oracle数据库中搜索文本,比如INSTR函数和LIKE操作:. 有很多时候,使用instr和like是很理想的, 特别是搜索仅跨越很小的表的时候. 然而通过这些文本定位的方法将导致全表扫描,对资源来说消耗比较昂贵,而且实现的搜索功能也非常有限,因此对海量的文本数据进行搜索时,建议使用oralce提供的全文检索功能.

个性化搜索

- - CSDN博客云计算推荐文章
         随着大数据日益成为IT领域的主流,如何利用大数据为业务提供支持以及来扩展市场成为当今众多公司追逐的目标. 目前,比较热门的领域有两块:recommendation(推荐系统)和personalization search(个性化搜索).        这两者有着很大的关联性和相似性,都是在大数据的环境得到了充分的发展,特别是recommendation,在Netflix公司举办的一个比赛---奖金一百万美元.

Google高级搜索技巧

- yun - 就SEO
今天给大家介绍一些非常实用的Google高级搜索技巧,不管是平时搜索网页还是做SEO,这些高级搜索语法都帮了我很大的忙. 语法 实际操作 搜索结果 “ ” “就SEO” 精确匹配包含“就SEO”的网页 - 美洲虎 -汽车 包含美洲虎,不包含汽车的网页 * 中国 * 现状 让Google自动补全,如中国教育现状 define: define:seo 查询seo的定义结果 site: site:gioseo.com.

如何搜索flickr图片?

- Penny - 让PPT设计NEW一NEW
    首先恭祝大家国庆节快乐. 好久没与大家交流了,也有很多朋友一直很期待Lonely Fish快点更新,所以我在放假第一天就奉上好东东给大家. 今天与大家交流的是关于flickr图片搜索的,虽然我自己很少制作全图型PPT,但我知道有很多朋友对图片需求量还是挺大的,所以我觉得今天的议题应该对大家有帮助.

Google推出航班搜索

- xing - cnBeta.COM
Google去年以7亿美元价格收购了提供旅行搜索服务的公司ITA Software,现在利用ITA Software的数据和算法,它正式宣布了“飞行搜索”.

Google推出飞行搜索

- Antoine - Solidot
Google去年以7亿美元价格收购了提供旅行搜索服务的公司ITA Software,现在利用ITA Software的数据和算法,它正式宣布了“飞行搜索”. Google称,如果你在搜索引擎中寻找航班信息如输入关键词“从芝加哥飞往丹佛”,将会在结果页左侧面板看到“飞行搜索”的链接. Google飞行搜索的一个重要特性是速度,通过整合ITA Software的智能算法,它能即时显示航班搜索结果.

细看 Google+ 的搜索

- Qian - 谷奥——探寻谷歌的奥秘
Google+今天的大跃进升级终于带来了信息流的搜索,下面我们总结一下目前Google+搜索的重点:. 以前写有Find people的搜索框已经变成了Search Google+. 利用这个Search Google+的搜索框可以完成3种搜索:人物搜索、Google+信息流搜索、Sparks搜索.