上面那个是一个ugc的标题,下面的是搜索词
1)title会在离线进行分词,并且对分词得到的每个term进行id化(就是转换成一个个uint32de term_id)
2) query进来之后,也会分词,然后term_id化
3)最后遍历结果,两个term_id 值相等,就匹配上了
- 靳东主演的电视剧我们的爱情
term咋生成的?这个term是对query和title进行小粒度分词得到的
query_term_index_map
最优index的选择原则:item的index必须在前一个item对应的index之后(previous_query_index)且index_diff最小
Diff = index – previous_query_index 找到使得 diff >0且最小的index
- 米粒参加电视剧穷孩子富孩子首播
Title在query中的位置,这个title是一个ugc视频的title
Title是query匹配出来的
title是文档标题
query是用户输入的搜索词
相关性是对 query和一个文档的匹配计算,每个走相关性的文档都有这个计算过程
不是index差最小,实际上是 连续两个hit<doc_index, query_index>差最小
这个是每个匹配的结果,hit = <doc_index, query_index>
有交叉时,匹配距离应该是diff+1
这里处理的几种情况,原则是尽量解决交叉匹配问题、以前一个或者后一个hit为基准,修正最小匹配位置。
米粒参加电视剧穷孩子富孩子首播是一个ugc的标题,穷孩子富孩子是搜索词
1)title会在离线进行分词,并且对分词得到的每个term进行id化(就是转换成一个个uint32de term_id)
2)query进来之后,也会分词,然后term_id化
3)最后遍历结果,两个term_id 值相等,就匹配上了
int32_t center_ofs = hit.doc_pos_ - hit.query_index_;
...
min_dis = abs(doc_pos - query_index - center_ofs);
...
// 后一个hit为中心,左边hit和 中心hit 的距离他差
if (left_hit.query_index_ > hit.query_index_) {
proximity_min_dis[left_hit.query_index_] = std::max(1, abs(min_dis - 1));
} else {
proximity_min_dis[left_hit.query_index_] = min_dis;
}
C++
有交叉时,应该是实际(pos-diff)差,但是至少有 1 的diff
发现的问题:文档写错3处
- 第一种情况 顺序应为title query
- 第2种情况应为<4,2> 文档写错为<4,1>
- 第3种情况 query应为 微微微微一笑很倾城
离线分词,用的alinlp udf
select search_kg:alilt_segment("" ,"YOUKU", "0", "3", " ", "false", ":", "|")
,search_kg:alinlp_pos(search_kg:alilt_segment("", "YOUKU", "0", "1"));
这部分基本就是 1) query和文档的字段进行匹配,最终目的就是生成一堆匹配特征,
后面的逻辑大概是:2) 使用模型预测相关性得分
3)根据线上问题,增加规则,调整相关性得分