QP:Query类目

server/2024/12/23 1:55:27/

Query类目

Query类目指的是根据查询内容将查询词Query归类到某个特定的分类体系中。这个体系通常是多级的,能够将查询词从更广泛的类别逐渐细分到更具体的子类目,这个体系通常在电商搜索和推荐领域中有重要的作用。

Query和Doc一般共用一套类目体系,搜索系统可以根据类目信息对搜索结果进行相关性排序,基于Query和Doc的类目匹配程度提高召回Doc的精准度。通过类目体系,搜索引擎可以挖掘用户的搜索历史和偏好,为用户提供个性化的搜索结果。此外,类目体系在搜索系统中起到了组织和分类内容的作用,从而有助于进行数据分析,了解用户的行为和偏好,优化搜索和推荐策略。

类目体系

类目通常是分层的,具有一级类目二级类目(甚至更多层级),每个层级从广义到狭义逐渐细化,具体如下:

  • 一级类目:代表更宽泛的领域或主题,通常为大类,比如“时尚”、“体育”、“影视娱乐”等
  • 二级类目:在一级类目的基础上,进一步细分到更具体的领域或话题,如“穿搭”、“户外运动”、“手游”等
  • 三级类目(可选):如果需要更细致的分类,可以继续细分。例如,“帽子推荐”可能在“穿搭”下面有一个“帽子”类目

在设计类目层级时,通常考虑以下原则:

  1. 层级清晰:类目层级应清晰明了,便于理解和使用
  2. 逻辑合理:类目之间的逻辑关系应合理,避免出现交叉或重复的情况
  3. 可扩展性:类目体系应具备一定的可扩展性,以适应未来可能出现的新信息

Query类目预测

由于Query和Doc共用一套类目体系,彼此相关的Query和Doc之间的类目通常也是相关的,且Doc类目由于其内容量多、信息量大,因而预测难度较低。所以Query类目的预测除了从文本语义角度出发,一般还依赖于Query关联Doc的类目信息。

基于PMI的类目预测

由于Query与关联Doc之间类目强相关,则Query历史点击Doc的类目可以作为Query类目预测。PMI主要用来衡量两个事件(在这里是“查询词”和“类目”)之间的相关性,帮助我们通过观察查询词和类目(点击Doc的类目)之间的共现关系,预测查询词所属的类目。

PMI衡量的是两个词或事件同时发生的概率与它们独立发生的概率之间的比率,PMI的值越高,意味着查询词和类目之间的相关性越强,反之则较弱。基于PMI的Query类目预测流程如下:

  1. 统计每个查询词与类目组合在语料库中出现的频率(即共现次数),记为 N ( x , y ) N(x, y) N(x,y)

  2. 统计每个查询词在语料库中出现的次数,记为 N ( x ) N(x) N(x)

  3. 统计每个类目在语料库中出现的次数,记为 N ( y ) N(y) N(y)

  4. 计算语料库中查询词和类目的总数 N total N_{\text{total}} Ntotal

  5. 对于每一对查询词 x x x 和类目 y y y,计算其PMI值:

    P M I ( x , y ) = log ⁡ P ( x , y ) P ( x ) P ( y ) = log ⁡ N ( x , y ) N total N ( x ) N total ⋅ N ( y ) N total = log ⁡ N ( x , y ) ⋅ N total N ( x ) ⋅ N ( y ) PMI(x, y) = \log \frac{P(x, y)}{P(x)P(y)} = \log \frac{\frac{N(x, y)}{N_{\text{total}}}}{\frac{N(x)}{N_{\text{total}}} \cdot \frac{N(y)}{N_{\text{total}}}}=\log \frac{N(x, y) \cdot N_{\text{total}}}{N(x) \cdot N(y)} PMI(x,y)=logP(x)P(y)P(x,y)=logNtotalN(x)NtotalN(y)NtotalN(x,y)=logN(x)N(y)N(x,y)Ntotal

  6. 对于给定的查询,计算查询中每个词与每个类目的PMI值,选择PMI值TopN的类目作为预测结果

  7. 基于上述流程,通过搜索日志的语料库挖掘生成Query-类目映射表

基于PMI统计得到的类目表是Query和类目的映射关系,当线上Query没有命中类目表时,需要对Query进行分词,将分词后的Term分别召回对应类目,并可结合Term权重分取加权平均值,筛选加权平均值最高的类目作为预测结果。

基于BERT的类目预测

对于PMI类目预测中缺失统计信息造成置信度不高Query,可以通过基于BERT的类目预测调整结果。对于类目预测,这是一个多标签分类问题,目标是对Query预测多个类目的概率。

在多标签分类中,采用的激活函数是Sigmoid,而非Softmax。因为每个标签都是独立的二分类问题,Sigmoid 为每个标签分别计算独立的概率。常用的损失函数采用二元交叉熵损失(BCE Loss),对于一个标签 y i y_i yi,其真实标签是 y i ∈ { 0 , 1 } y_i \in \{0, 1\} yi{0,1},预测的概率是 y ^ i \hat{y}_i y^i,损失函数的形式为:

BCE ( y i , y ^ i ) = − [ y i ⋅ log ⁡ ( y ^ i ) + ( 1 − y i ) ⋅ log ⁡ ( 1 − y ^ i ) ] \text{BCE}(y_i, \hat{y}_i) = - \left[ y_i \cdot \log(\hat{y}_i) + (1 - y_i) \cdot \log(1 - \hat{y}_i) \right] BCE(yi,y^i)=[yilog(y^i)+(1yi)log(1y^i)]

对于所有标签的总损失,取每个标签的损失的平均值,得到最终的损失:

Total Loss = − 1 N ∑ i = 1 N [ y i ⋅ log ⁡ ( y ^ i ) + ( 1 − y i ) ⋅ log ⁡ ( 1 − y ^ i ) ] \text{Total Loss} = - \frac{1}{N} \sum_{i=1}^N \left[ y_i \cdot \log(\hat{y}_i) + (1 - y_i) \cdot \log(1 - \hat{y}_i) \right] Total Loss=N1i=1N[yilog(y^i)+(1yi)log(1y^i)]

其中:

  • N N N 是标签的数量。
  • y i y_i yi 是标签 i i i 的真实标签(0 或 1)。
  • y ^ i \hat{y}_i y^i 是标签 i i i 的预测概率(通过 Sigmoid 激活函数得到的值)

考虑到一个合格的类目体系下,各类目标签的分布应当符合正态分布。在构建训练集时也会不可避免的出现标签类别不平衡的问题,此时除了平衡训练集的类别分布,损失函数上也可以选择Focal Loss

Focal Loss引入了一个焦点因子 ( 1 − y ^ ) γ (1 - \hat{y})^\gamma (1y^)γ,并且可能会为正负样本引入不同的权重因子 α \alpha α 来缓解类别不平衡。Focal Loss 的公式如下:

F L ( y , y ^ ) = − α ⋅ ( 1 − y ^ ) γ ⋅ [ y log ⁡ ( y ^ ) + ( 1 − y ) log ⁡ ( 1 − y ^ ) ] FL(y, \hat{y}) = - \alpha \cdot (1 - \hat{y})^\gamma \cdot \left[ y \log(\hat{y}) + (1 - y) \log(1 - \hat{y}) \right] FL(y,y^)=α(1y^)γ[ylog(y^)+(1y)log(1y^)]

其中:

  • y y y 是真实标签(0 或 1)
  • y ^ \hat{y} y^ 是模型的预测概率(Sigmoid 输出)
  • α \alpha α 是平衡因子,用于调整类别不平衡问题,通常 $ \alpha $ 可以为正负样本分配不同的权重
  • γ \gamma γ 是焦点因子的指数,控制模型对难分类样本的关注程度

焦点因子 ( 1 − y ^ ) γ (1 - \hat{y})^\gamma (1y^)γFocal Loss 中的作用是 降低易分类样本 的损失影响,使得模型更多关注 难分类样本

  • y ^ \hat{y} y^ 接近于 1 时(即正类容易分类),焦点因子的值接近于 0,降低了易分类样本的损失权重
  • y ^ \hat{y} y^ 接近于 0 时(即负类容易分类),焦点因子同样会使损失值变小,避免了对负类样本的过多关注
  • γ \gamma γ 参数控制焦点因子的强度,通常 γ \gamma γ 取值为 2,用以显著降低对易分类样本的损失权重

BERT训练样本构造可以利用基于PMI的类目映射表,为了减少长尾类目由于点击行为较少带来训练不足的问题,可以挖掘长尾类目的Doc,利用Query-Title-类目构建训练集,从而提高模型在长尾类目上的预测效果,增强模型泛化能力。

总结

类目体系在搜索系统中起到了组织和分类内容、提高搜索效率和准确性、优化用户体验、支持数据分析和管理的重要作用。通过合理设计和维护类目体系,可以显著提升搜索系统的性能和用户满意度。

参考文献

  1. Focal Loss for Dense Object Detection
  2. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
更多内容请点击:搜索系统算法解析

http://www.ppmy.cn/server/152376.html

相关文章

【每日一题 基础题】[蓝桥杯 2020 省 AB3] 乘法表

[蓝桥杯 2020 省 AB3] 乘法表 乘法表 九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。 例如, 四进制下的乘法表如下所示: 1 * 11 2 * 12 2 * 210 3 * 13 3 * 212 3 * 321 请注意,乘法表中两个数相乘的顺序必须为样例…

Linux系统安全与应用: 筑牢防线,高效运维

在当今数字化时代,Linux系统凭借其卓越的稳定性与强大的性能,广泛应用于各类关键业务场景,从数据中心服务器到云计算平台,从网络设备到嵌入式系统,无处不在。因此,确保Linux系统安全稳定运行,成为重中之重。本文将深入解析Linux系统安全与应用的关键要点,涵盖账户安全,…

裸机LED 灯实验

G1、硬件原理分析 2、寄存器说明 a、主要配置寄存器 使能 GPIO1 时钟—CCM_CCGR1 设置 GPIO1_IO03 的复用功能—IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 配置 GPIO1_IO03—IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03 设置GPIO GPIO1_GDIR 的 bit3 要设置为 1,表示输出 控制GPIO输出电平,…

移除链表元素(最优解)

题目来源 203. 移除链表元素 - 力扣(LeetCode) 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4…

【ETCD】【源码阅读】深入分析 applierV3backend.Apply`方法源码

applierV3backend的Apply主要负责将 Raft 请求 (pb.InternalRaftRequest) 应用到 Etcd 的后端存储中。它处理各种不同类型的请求,并且根据请求的具体内容调用相应的处理逻辑。 版本【release 文章目录 一、完整源码二、方法详解1. 定义和初始化2. 记录操作开始时间并…

Docker搭建kafka环境

系统:MacOS Sonoma 14.1 Docker版本:Docker version 27.3.1, build ce12230 Docker desktop版本:Docker Desktop 4.36.0 (175267) 1.拉取镜像 先打开Docker Desktop,然后在终端执行命令 docker pull lensesio/fast-data-dev …

ios的safari下载文件 文件名乱码

当使用nginx代理文件并下载文件时,返回的协议头Content-Disposition中filename%E9%9B%AA%E5%B1%B1.jpg中文内容会是URL编码的形式,当客户端在safari浏览器下载下载文件时,文件名不会转换(URL解码)为正常的中文。 应该…

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(关系运算符和逻辑运算符)

在C编程的旅途中,经常会遇到需要根据不同条件执行不同代码的情况。这时,分支结构就显得尤为重要。它就像程序中的“决策点”,让程序能够根据输入、状态或其他条件智能地选择执行路径。这时就需要学习关系表达式与逻辑表达式,有了判…