我的小流量“转正”心得 --- 下载下方深度语义重排的实践

news2024/11/24 3:11:42

目录

一、背景

二、通过数据分析找到的问题

三、迭代流程

迭代一:

迭代二:

迭代三:

迭代成功的原因:

知识扩展

四、hnswlib调优过程

五、附录

5.1 hnsw 超参选择


一、背景

  1. 在分发中下载带来的收入占比排列仅次于搜索。
  2. 下载资源的分发占比在一半以上。
  3. 下载资源是重要的收入来源之一。
  4. 下载相关推荐现有的策略大部分无法满足用户的需求。

二、通过数据分析找到的问题

  1. 下载资源中一半以上的资源都是曝光搜索词的。
  2. 在所有的下载资源中,有曝光搜索词的资源占比面积小。
  3. 博客和下载的曝光搜索词得分存在不准确性。
  4. 下载资源推荐结果存在无序的情况。

三、迭代流程

迭代一:

迭代方式:下载相关推荐下通过用户点击和下单行为进行重排

迭代失败原因:

  1. 用户在下载相关推荐下产生的点击过少,二级排序是针对于用户点击行为进行的加权处理。经统计,有曝光无点击的占比较高,导致二级排序的影响面很少,最终实验效果不明显。
  2. 为了避免整体收入波动大,实验上线后将策略安排在了2、3槽位,从不同实验相同槽位来看,新策略的收入和用户行为不如老策略,新策略落败。

总结:

  1. 下载相关推荐下无法做到像博客相关推荐一样的策略,下载推荐的点击量过少,而新策略是基于用户点击进行的排序。
  2. 在从槽位上对比发现,老策略召回的结果比较优,下一步打算从老策略调优入手。

迭代二:

迭代方式:下载相关推荐老策略通过ADA语义相似度计算距离,能将相似度最高的进行计算

迭代失败的原因:

  1. 词库中有曝光搜索词的资源只有百万资源,占比33%,覆盖面积较小,再加上实验只是小流量,导致在实验组中看到的召回率非常低。
  2. 老策略内部做排序是会把相同的曝光搜索词计算得分,但会出现结果全是新策略的资源,会把相关的资源挤到后面,导致结果不相关。

总结:

  1. 在现有的资源中做扩覆盖处理不是最优的选择,首先成本较大,并且覆盖面积较小,从实验数据中看出,召回率和收入微乎其微。
  2. 从扩覆盖中得知,扩覆盖是相当于把推荐结果进行了扩充并重排,何必不把原来的推荐结果重排,这是下一个实验的导火索。

迭代三:

迭代方式:下载相关推荐曝光搜索词通过ADA语义进行相似度计算,并根据相似度进行重排

全量上线原因:

  1. 这次挑选实验组时,挑选了一个在空跑期间收入较弱的一组,如果收入落败的组在新策略上线后能跟对照组拉平,则胜出。
  2. 从实验期开始,实验组的收入只有1天落败,在其他的同一天时间不同实验来看,实验组的收入大范围胜出。
  3. 扩量后,实验组的整体收入也高于对照组,并且点击率也有所上涨。

迭代成功的原因:

  1. 经统计下载资源中,推荐结果列表无排序的结果占比较大,下载资源中曝光搜索词得分一半以上较低,说明在现有的推荐结果中,部分推荐结果都是无排序结果。
  2. 首条结果是用户的首要选择,所以排序结果会对收入产生影响,通过语义排序,会提高用户体验。
  3. 吸取了前两个实验失败的原因,总结出对推荐结果进行重排才是重要原因。

知识扩展

语义计算:我们使用的是OpenAI第二代嵌入模型 text-embedding-ada-002将 SA资源的标题进行向量化,借助 hnswlib 完成向量索引库构建,通过余弦距离衡量两段文本之间的相关性。

GPT3采用Transformer的解码器:

text-embedding-ada-002在文本搜索、代码搜索和句子相似性任务上优于所有旧的嵌入模型,并在文本分类上获得相当好的性能,文本检索领域的评测结果: 

GOOD CASE:

 

四、hnswlib调优过程

1. hnsw超参调整,增加连接数量,召回从75.16%提升至80.21% ;详见附录5.1 hnsw超参选择
2. 前五十万样本建索引库召回率在96%,后四十多万建立索引库召回率只有 53%,分析发现24.7w 不同的 title向量存在重复,去除后召回率在96.7%;定位到原因:使用多线程批量访问OpenAI 向量化接口,hnswlib 对文本向量化存储时出现较多异常数据;
3. 重建向量索引库后,跟第一版相比top1 差异率:47.19%,自评 GSB=45:48:7;标注团队GSB=30:68:2;线上小流量实验落败,分析原因可能:query embedding 和 title embedding 分布存在差异,用于召回效果可能不太理想,尝试用于title to title的相似度重排,故尝试在下载下方相关推荐重排实验;
4. 对下载相关推荐中曝光搜索词召回结果使用文本向量相似度重排,胜出;

五、附录

5.1 hnsw 超参选择

  1. 选择 l2 距离还是 cosine 距离对召回率影响不大,但是cosine距离会更好一点;
  2. 扩大 候选list 大小ef 和 连接数M召回率会有提升,对应的创建索引库的时间和检索时间会增加; 

ef - the size of the dynamic list for the nearest neighbors (used during the search).

M - the number of bi-directional links created for every new element during construction.

第一版向量召回优化,recall 对比

recall

l2

cosine

耗时

ef = 100

75.16%

75.35%

37.4s

ef = 500

80.163%

80.21124%

11min36s

ef = 600

80.166%

80.21157%

28min09s

# m = 64

# ef = 500: 10min25s 0.8021080499165129

# ef = 600: 30min27s 0.8021146410053608

# m = 100

# ef = 200: 11min36s 0.8021124439757448

# ef = 600: 28min09s 0.8021157395201687

文章作者:李震 & 卫亮亮 & 李长皓 & 王品

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重磅|2024年浙大MPA提前批面试政策公布:申请三步走

说曹操曹操到!昨天还在说浙大MPA提面吃迟迟未公布的事情,晚些时候就来了!等待许久的MPA考生们可以开始着手筹划自己的提面备考了!提前批面试真题周期较长,但是需要做准备的内容确实也不少,本期专注浙大的杭…

如何区分bin log 、redo log 跟 undo log?

概要 MySQL 日志包含了错误日志、查询日志、慢查询日志、事务日志、二进制日志等,如果存储引擎使用的是 InnoDB ,二进制日志(binlog)和事务日志(包括redo log和undo log) 是肯定绕不过去的,本篇接下来详细为大家介绍这三种日志。 redo log 为…

Android OpenGL ES实现简单绿幕抠图

目录 正文 OES FilterBlendShader Filter最后的效果缺陷 正文 实现绿幕抠图,其实想法很简单。 这里简单粗暴的使用着色器替换。 OES Filter 直接实现在相机预览上的Shader ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #extension GL_OE…

Spring Boot 中的 Sleuth 是什么, 如何使用

Spring Boot 是一个非常流行的 Java Web 开发框架,它提供了许多方便的功能,其中之一就是 Sleuth。Sleuth 是一个分布式跟踪系统,用于跟踪应用程序中的请求和操作。在本文中,我们将探讨 Spring Boot 中的 Sleuth 是什么&#xff0c…

git 新建分支,切换分支,上传到远程分支

git 在使用的过程中,有的时候我们需要更换一个分支才存贮数据,作为版本的一个迭代或者是阶段性成果的一个里程碑。 如何来做操作呢? 在git中,可利用checkout命令转换分支,该命令的作用就是切换分支或恢复工作树文件&a…

Linux串口应用编程——STM32MP157

文章目录 替换设备树文件串口API设置行规程struct termios 结构体行规程函数 串口应用——回环 替换设备树文件 挂载boot分区: mount /dev/mmcblk2 /boot拷贝新的设备树文件到boot分区 cp /mnt/stm32mp157c-100ask-512d-lcd-v1.dtb /bootreboot重启,查…

C++ set和map使用

搜索平衡二叉树的封装 1. 关联容器2. 键值对3. 树形结构的关联式容器3.1 set3.1.1 set介绍3.1.2 set 的使用1. set模板参数列表2. set的构造3. set 的迭代器4. set的容量5. set修改5. set的使用 3.2 multiset3.2.1 multiset的介绍3.2.1 multiset的使用 3.3 map3.3.1 map的介绍3…

Could not load the Qt platform plugin “xcb“

qt.core.plugin.loader: QLibraryPrivate::loadPlugin failed on “/home/ly/Qt/6.5.1/gcc_64/plugins/platforms/libqxcb.so” : “Cannot load library /home/ly/Qt/6.5.1/gcc_64/plugins/platforms/libqxcb.so: (libxcb-cursor.so.0: cannot open shared object file: No su…

VTK8.2手动卸载

利用源代码方式安装的VTK, 进行手动卸载[参考] 1、进入.. /VTK-8.2.0/build目录 make2、记录sudo make install的log log在uninstall.sh文件中 touch uninstall.sh && chmod 775 uninstall.sh && echo #!/bin/bash -v > uninstall.sh && sudo m…

【unity实战】制作俯视角射击游戏多种射击效果(一)

文章目录 本期目标前言欣赏开始1. 角色移动和场景搭建2. 绑定枪械2.1 首先将各种枪械的素材添加给人物作为子物体2.2 给枪械也分别添加两个子物体用作标记枪口和弹仓位置 3. 枪械动画4. 切换枪械5. 发射功能5.1 手枪(1) 枪械随着鼠标旋转(2) 射击时间间隔(3) 创建好子弹、弹壳和…

手把手教你如何做手机PCB电磁兼容性设计

电磁兼容性是指电子设备在各种电磁环境中仍能够协调、有效地进行工作的能力。电磁兼容性设计的目的是使电子设备既能抑制各种外来的干扰,使电子设备在特定的电磁环境中能够正常工作,同时又能减少电子设备本身对其它电子设备的电磁干扰。 1、选择合理的导…

【霹雳吧啦Wz】Transformer中Self-Attention以及Multi-Head Attention详解

文章目录 来源Transformer起源Self-Attention1. 求q、k、v2. 计算 a ^ ( s o f t m a x 那块 ) \hat{a} (softmax那块) a^(softmax那块)3. 乘V,计算结果 Multi-Head Attention位置编码 来源 b站视频 前天啥也不懂的时候点开来一看,各种模型和公式&#…

FreeRTOS 低功耗模式设计 STM32平台

1. STM32F105RBT6 的三种低功耗模式 1.1 sleep睡眠模式、stop停机模式、standby 待机模式 1.2 STM32中文参考手册有介绍STM32 低功耗模式的介绍 2. FreeRTOS 采用的是时间片轮转的抢占式任务调度机制,其低功耗设计思路一般是: ① 当运行空闲任务&#…

启动网站调试提示 HTTP 错误 403.14 – Forbidden Web 服务器被配置为不列出此目录的内容。

启动网站调试提示 HTTP 错误 403.14 – Forbidden Web 服务器被配置为不列出此目录的内容。 解决方案第一种.在网站的配置文件里添加第二种.ISS管理界面修改 解决方案 第一种.在网站的配置文件里添加 <system.webServer><directoryBrowse enabled"true" /&…

【RH850/U2A】:休眠唤醒

休眠唤醒 唤醒差异休眠差异休眠是解决整个系统待机时尽可能的减少功耗,相应的唤醒则是低功耗模式下整个系统可以被已知的条件唤醒系统,进而进入全功能模式。 RH850/U2A的配置和RH850/F1KM大同小异,本文只讲述差异部分,其他部分详见 【Davinci开发】:IO唤醒系统 唤醒差异 …

API验证器,帮助ReSharper开启VS插件新时代!

实质上&#xff0c;ReSharper特征可用于C#&#xff0c;VB.net&#xff0c;XML&#xff0c;Asp.net&#xff0c;XAML&#xff0c;和构建脚本。 使用ReSharper&#xff0c;你可以进行深度代码分析&#xff0c;智能代码协助&#xff0c;实时错误代码高亮显示&#xff0c;解决方案范…

WideNet:让网络更宽而不是更深

这是新加坡国立大学在2022 aaai发布的一篇论文。WideNet是一种参数有效的框架&#xff0c;它的方向是更宽而不是更深。通过混合专家(MoE)代替前馈网络(FFN)&#xff0c;使模型沿宽度缩放。使用单独LN用于转换各种语义表示&#xff0c;而不是共享权重。 混合专家(MoEs) 条件计…

STM32 串口代码配置

一、首先开发板上关于串口1的引脚配置已经配置好了&#xff0c;位置在SYSTEM的 usart.c 文件中&#xff08;注意&#xff1a;只配置了串口1的&#xff0c;其他使用时需要自己配置&#xff09; 重要的是明白配置的参数都是什么意思&#xff0c;针对实现不同的串口功能有什么影响…

入门Python笔记(基础)

入门Python笔记 入门Python笔记(基础)1. Python的特点2. Python安装3. Python中的数据类型3.1 数字类型3.1.1 整数类型3.1.2 浮点类型3.1.3 复数类型3.1.4 布尔类型 3.2 数字类型的相互转换 4. 运算符4.1 算术运算符4.2 比较运算符4.3 逻辑运算符4.4 位运算符4.5 赋值运算符4.6…

基于Java SpringBoot和Vue UniAPP的微信商城小程序

摘要 近年来&#xff0c;随着我国网络基础设施的不断完善和信息技术的不断发展&#xff0c;第三方支付手段得到了广泛的普及&#xff0c;网上购物已经成为人们生活中的重要内容&#xff0c;基于PC平台的网上商城系统可以足不出户就可以享受购物。 基于手机的网购微信小程序发挥…