今天学习了同事总结的搜索相关性计算方法,整理如下:
相关性指搜索query和页面之间的相关程度,衡量的维度有:文本相关性、权威性、查询需求满足。其中权威性要求同等条件下选择更优质、权威的结果;需求满足侧重了搜索个性化,同一个搜索词有多种不同含义,搜索引擎应该能够分析出用户的意图和需求,然后返回适合的结果。
常用的文本相关性模型有TF*IDF模型,TF:term frequency IDF=log(D/DW)(D:文档个数,DW:关键字W出现的文档个数),同时,还需要考虑:
1)term出现的顺序和相对位置
2)页面级别的特征:主题分析、反链anchor分析、页面类型、页面质量、站点/频道的属性、正文提取/边框去噪等
3)term级别的特征:结构特征及语义(定义词、上下文关系等)
得到每个term的tf*idf后,计算相关性的方法有:
1)将query中所有term的TF*IDF加权相加,
2)向量夹角:query向量和页面向量之间的相似度
3)主题匹配度*offset模型(百度)
主题匹配度*offset模型:
目标:好结果的召回(包含全部term的网页,命中同义词的网页,主干命中的网页)、结果排序
计算: 主题匹配度=cqr*ctr,其中cqr是query与片段的交集占query的比例, ctr是query和片段的交集占片段的比例。
offset:term在网页中的分布情况,用于计算query中的term在网页中的距离,体现了term的相对位置信息,
sum(|(offset_page(i+1)-ofset_page(i))
-(offset_query(i+1)-offset_query(i))|*tight_ratio(i))
计算文本相关性,term的重要性是不同的,要按照term的重要性做省略重查,query的主干识别很重要。
除了文本相关性,相关性计算还涉及权威性、用户需求分析、反作弊、用户行为分析、资源质量判定、svm模型等(概率检索模型?)……
------------------------------------------我是分割线——————————————————————————
目前的检索过程有:leaf计算scorer、booster后,由searchroot的pre_tuner和post_tuner进行调权,放出结果。
scorer是加权和,booster是调权因子,tuner是searchroot对结果进行调整,如pre_tuner过滤掉死链、死host、重复的doc等,post_tuner是例如去掉相同摘要的doc等等。
scorer如webcontentscorer、webanchorscocer、weburlscorer等,webcontentscorer是对title和content两个section进行计算,scorer中有node(query rewriter后产生不同node)、window(避免关键词累积作弊,找到命中term密度最大的片段来计算scorer),计算流程:
scorer初始化=》search初始化=》doc初始化=》computerscorerinternal=》computersectionscorer。。。=》scorer
searchroot检索流程:
query=》query_rewriter=》parent=>leaf=>searchroot pre_tuner=>parent=>leaf=>snippet=>post_tuner=>filter=>user....