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

2023-10-19 19:20

本文主要是介绍我的小流量“转正”心得 --- 下载下方深度语义重排的实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、背景

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

三、迭代流程

迭代一:

迭代二:

迭代三:

迭代成功的原因:

知识扩展

四、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.chinasem.cn/article/241843

相关文章

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式