搜索分词算法

本文探讨了文档标题和用户搜索词的分词、ID化过程,重点讲解了匹配算法如何解决交叉匹配问题,以及如何通过模型预测相关性得分,提升搜索效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上面那个是一个ugc的标题,下面的是搜索词

1)title会在离线进行分词,并且对分词得到的每个term进行id化(就是转换成一个个uint32de term_id)

2) query进来之后,也会分词,然后term_id化

3)最后遍历结果,两个term_id 值相等,就匹配上了

  1. 靳东主演的电视剧我们的爱情

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

  1. 米粒参加电视剧穷孩子富孩子首播

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处

  1. 第一种情况 顺序应为title query     
  2. 第2种情况应为<4,2> 文档写错为<4,1>
  3. 第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)根据线上问题,增加规则,调整相关性得分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方狱兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值