许昌鲤鱼IT计算机软件编程培训中心让你五分钟了解搜索原理?
在介绍搜索之前,先介绍两个概念:信息量和信息量。
(都是用自己认为通俗易懂的解释。有兴趣可以看相关书籍。)
1.1信息是减少不确定性的东西,信息也是增加确定性的东西。
前半句是香农信息定义,后半句是逆香农信息定义。举个栗子,回想一下和一个异性交往的过程。在遇到TA之前,你并不知道这个人存在于这个世界上。后来,你看到了TA的样子。后来你了解了TA的性格,口头禅,往事。然后一步一步,你对TA一无所知,慢慢熟悉起来。这个时期就是你不断获取TA信息的过程。就是这些信息让你完全不确定TA是谁,完全确定TA适合你。
1.2信息量是信息能减少不确定性的度量,信息量也是信息能增加确定性的度量。
关于信息量的数学描述有很多,但总的来说,可以这么简单理解。举个栗子,目击者描述嫌疑人。一个证人的信息是“他是一个人”。证人B的信息是“TA是一个高中男生”,证人C的信息是“TA是一个高中生,长发大概170。”d证人的留言是“我认识他,他是陈浩南,学校的肩膀”。我们直观地感受到信息量之间的关系:a
本地男性比例为50%,本地高中男生比例为8%,本地高中男生长发约170的比例为4%,本地手帕名为陈浩南的比例为0.0001%。因为P(A)>P(B)>P(C)>P(D),所以信息量的关系是:a
2.搜索的产品逻辑
搜索满足了用户快速找到感兴趣内容的需求。用户输入查询,搜索系统根据用户输入的信息筛选出系统认为用户感兴趣的内容,并按照系统识别的重要程度依次显示。请注意这个表达。简而言之,搜索可以分为三个步骤。
步骤1:用户输入信息的解释
步骤2:根据用户输入信息过滤内容。
第三步:对过滤后的结果进行排序。
要了解这三个步骤在搜索系统中是如何完成的,我们首先要知道搜索服务器是如何存储信息的。
3.搜索数据的存储原则
上图中,假设我们做了一个新闻网站,那么它的结构就是下图。内容简化,假设一条新闻只有标题、导语和正文。数据只是阅读数,评论数,分享数。
图1-1
差不多就是上图右边的结构了。右边是新闻内容的存储:就像图书馆里的书一样,按照方便查找的顺序整齐排列(这种存储结构的名字叫做index,是来自图书馆的语言)。左边是词库:只要一个搜索的输入词能匹配词库,就能快速找到词库对应的内容。
每个搜索系统都有自己的词库,不能对应分词的搜索行为是不会有结果的。每个搜索系统都会根据不同的目标用户有相应的词库,就像字典一样。冶金词典和生物词典的词条不一样,知乎和淘宝的词库也不一样。搜索的很多优化都集中在词库的优化上。
简单总结一下,搜索的存储原则是:一个系统的词库,一个排列整齐的内容索引数据库,系统词库和内容索引数据库可以快速关联。
在这个搜索系统的存储结构的基础上,我们所说的三个搜索步骤将依次进行。
4.步骤1:用户输入信息的解释
前面说过,搜索词库是有限的,但是用户的输入是无限的。那么如何把无限搜索变成有限词库,匹配出相应的结果呢?这里需要引入一个新概念:分词,简单来说就是将输入的字符串进行拆分。
还以图1-1中的新闻搜索系统为例。如果用户输入的查询是“中国转基因食品”,系统里其实没有这个词。如果没有分词功能,即使系统中有相应的内容,搜索也会立即结束。分词的工作原理是在无法准确匹配的情况下,对用户的输入进行进一步拆分。于是我们得到了以下结果。
中国的转基因食品——中国、德国、转基因食品。
不是所有的单词都有信息。如果回忆一下“得”的结果,几乎所有的新闻内容里都会有。回忆这么多结果显然是不对的。比如这个查询中的“的”字,实际上在分词系统中会被直接忽略。正因为出现在内容中的概率不同,所以一个词出现的新闻越多,包含的信息就越少,信息太少的词就会被忽略,也就是停用词。同时,字数多的新闻内容会更重要。然后在停用词被去除之后,结果被进一步简化。
“转基因食品在中国”——“中国”、“转基因”、“食品”。
经过处理,用户的非标准查询转化为标准词库,可以快速找到相应的内容。如图1-1所示。
5.步骤2:根据用户输入信息过滤内容。
经过用户的查询解读,我们其实得到了一些标准化的词,这些词会对应一些搜索目标内容,然后进行内容筛选。
用户进行了搜索,搜索出了部分结果。然后将所有内容按照“内容是否相关”和“内容是否回忆”两个维度分为四个部分。
召回相关内容:被搜索内容中与用户搜索相关的部分。
召回的无关内容:被搜索内容中与用户搜索无关的部分。
未被召回的相关内容:未被搜索出来的与用户搜索相关的那部分内容。
未被召回的无关内容:未被搜索出来的、与用户搜索无关的那部分内容。
一般来说,是否过滤掉的决定会从准确率和召回率两个角度来衡量。
准确率是相关内容在所有搜索到的内容中所占的比例。精确度:
查全率是应该搜索的所有内容的比例。召回率:
准确率和召回率是相互矛盾的指标。需要权衡。最终测量将取2的调和平均值作为目标函数。即f值:
这三个概念是搜索优化的关键指标,涉及人工评分和更高级的优化。这里没有了。我们只需要记住一点:不是所有包含用户查询关键词的结果都应该被召回。
6.第三步:对过滤后的结果进行排序。
排序影响搜索结果的质量,越靠前的结果越容易获得用户的点击。好的搜索不仅仅是尽可能的搜索出应该搜索的内容,还要考虑最有可能吸引用户的内容要展示在前面。
搜索排名的基本逻辑是通用的:
用户输入的文本被转换成标准词库中的单词,搜索系统根据每个特定内容是否包含这些单词来决定是否显示这些内容,同时,搜索系统根据文本的相关性给这些要显示的内容打分。最后的排名是根据每个内容的得分。
网上介绍了Lucene的核心排序公式的原理。但实际情况其实更复杂。我们就以之前说的新闻搜索系统为例(为了便于理解,再贴一次图)
如果用户搜索“转基因”,那么无论是标题、简介还是正文中出现转基因文字,在评分中应该是不同的。显然,题目中应该有更高的分数。还应该考虑业务数据。比如一个阅读量为65438+百万+的帖子比一个阅读量为3的帖子更相关,但显然阅读量为65438+百万+的帖子应该在前面。
其实所有的数据都可以分为两类,文本和数据。文本用于计算内容的相关度,这部分评分交给Lucene的成熟算法。目前市场上也有成型的开源解决方案。如何处理文本和数据之间的关系是一个搜索系统设计的核心部分。
以基于Lucene的Solr系统为例,文本和数据配置代码其实很简单。At < str name="bf " >和
& ltstr name="bf " >商业数据被赋予权重。
& ltstr name="qf " >文本数据被赋予权重。
在研究了Solr系统的机理后,对Solr核心公式进行了变形,得到了一个公式:
表示我们给文本的文本分数权重。比如,这个系统中有三种文本:标题、引言和正文。根据重要性,标题权重为10,导语权重为5,正文权重为1。
表示Lucene算法为文本给出的文本相关性分数。这样会综合考虑文本的字数,这个搜索词在所有文本中出现的概率等因素(想进一步了解原理的同学可以看看TF-IDF和余弦相似度的介绍)。
代表我们赋予数据的数据权重。比如这个系统有三种数据,评论量,分享量,阅读量。根据重要性,标题评论权重为100,分享权重为200,阅读权重为1。(一般会引入时间衰减,这里暂且不讨论)
表示数据的特定值。比如这个系统有三种数据,评论量,分享量,阅读量。
代表归一化系数,也就是说可以给很大的权重,最后的总分会在一个合理的范围内。
这次是根据算法指标来判断的。代表这个分数,用户输入查询提供的信息量。如果输入查询提供的信息越多,s就越大。
增加,不变,前一个系数不变,前一个系数增加。文本数据对整体得分的贡献越大,文本数据相对于业务数据的权重就越大。比如你输入“北京国庆交通拥堵”,相比“北京国庆交通拥堵”,“北京国庆交通拥堵”提供给系统的信息更多。S值越大,文本在总分中的分数越大。
所以我们可以看到,最终影响排名的是我们给文本数据和业务数据的权重,也就是给文本的权重和给数据的权重。
这两组数据影响了搜索的最终排名,而这组数据的赋值正是搜索系统对业务的理解。