搜索引擎相关技术

搜索

query rewrite

指导召回

意图识别

分词、结合(短分词结合)、粘连(要求连续命中)

核心词/Fuzzy

同义词:严格同义词 (上下文同义词在qsrch中触发)

检索field(title检索、类别搜索、全文检索)

成分识别/NER

指导rank

实体识别

词权重

动态词权重:term_weight

静态词权重:idf(跟域相关)

tokens之间紧密度(不一定要有)

rank

基础打分

p(doc | query) 正比于 p(doc) * p(query | d)

p(doc) : 静态分
  1. PageRank,链接分析,网页分析
  2. 某些情况下可以加入场景因素,表达为 p (doc | context) , 比如,对于地图搜索,考虑用户当前位置与POI的距离,计算 p ( poi | distance )
p(query | d) :相关性
  1. doc用query来表达的概率/ 从doc中产生query的概率 --> 最大似然 --> 交叉熵 tf*idf,词袋模型:Bm25;tf*idf ;cos等
  2. 考虑紧密度proximity
  3. sentence score
  4. 多个field的score
    1. title
    2. query anchor (引入用户行为)
      1. wei
      2. dwei
      3. order
      4. dorder
    3. keywords
    4. summary
    5. content
    6. 不同的field根据其特性采用不同的打分方式

二次排序

获得全局结果后,可以进行启发式的调序、过滤、触发重查和结果合并。

精排

  1. 对头部结果可以获取更加充分的正排信息/summary,引入复杂的模型,进行精排。
  2. 模型排序:
    1. LTR:lambdamart
      1. 搜索的场景,通常大多数特征可以用低维稠密特征来表达,适用xgb/lightgbm等树模型
      2. listwise,优化NDCG
      3. 用人工标注数据
    2. 点击模型
      1. 对doc的吸引度和点击后的满意度进行建模,DBN
    3. DSSM
      1. query与title的语义相似度
      2. 用点击数据

searcher

1)倒排索引(posting list),位置列表(location list)

倒排的数据结构:

数组:可压缩,求交块,增量复杂度较高,适用于doc集合大的情况比如网页搜索

双向无锁链表:实时更新,增量简单,数据量小时用

有序集合:std::set , 便于求交、复杂查询,小数据规模,不便于增量更新

docid按静态分有序:支持对召回结果进行截断(但是增量数据不能保证docid有序)

2)属性(各维度静态分,类别,标签等属性信息)

附:

final = (bm25 rank + sentence rank) * boost

importance

importance = examined / sc

attract

attract = uv / examined

satisfy

satisfy = fc / uv

点击离线计算的特征有:

doc: pvnum

doc-query: weight、dweight、dorder

doc-query: first click、examined、uv、search count

doc-query: importance、attract、satisfy

其中first click 、examined、uv是中间特征,线上不使用

doc-query计算维度有全量、近60天、内部数据、外部数据

weight

query在doc下的点击分布权重

score = uv * uv / sc

weight = currunt_score / sum_of_all_query_score_in_doc * 100

dweight

doc在query下的点击分布权重

dweight = currunt_score / sum_of_all_doc_score_in_query * 100

dorder

doc在query下依据score排序后的位置,现在都设为10

search count

用户完整查询的次数

根据用户id及同一用户点击间隔时间(1h)进行分割

first click

doc在query下被首次点击的次数

根据pos有较小权重调整:[1, 1, 2, 2, 2]

examined (不太准,有点问题)

doc在query下被用户看到的次数

根据点击pos排序,排在前边的认为是看过的

uv

doc在query下被点击的次数

注:i_表示360搜索的点击,e_表示百度的点击,r_表示近60天的点击

Satisfy

satisfy、r_satisfy

satisfy = (4.0 + i_fc) / (20.0 + i_uv)

first click占总点击的比例,反映了用户对图片的满意度

Attract

attract、r_attract

attract = (10.0 + i_uv) / (i_examined + 50)

反映图片对用户的吸引力

Title field

section_score[title] += sentence.proximity_score

Content field

section_score[content] = max(sentence.proximity_score, section_score[content])

Anchor field

section_score[anchor] += sentence.proximity_score

Query field

section_score[query] += sentence.proximity_score

对anchor 和query 域的原始分数做归一化处理

orig_score / (norm_factor + orig_score)

norm_factor:anchor域8.0,query域2.0

image-20210221191737183

推荐我的开源项目 exFM c++ deepFM

posted @ 2021-10-30 19:12  唐旺  阅读(108)  评论(0)    收藏  举报