Twitter推特开源机器学习算法学习——For You重排名器及TwHIN嵌入特征算法

本文主要是介绍Twitter推特开源机器学习算法学习——For You重排名器及TwHIN嵌入特征算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Twitter推特开源机器学习算法学习——For You重排名器及TwHIN嵌入特征算法

  • 系统核心部分
  • 机器学习算法
    • The "For You" Heavy Ranker
      • 1、简介
      • 2、开发
      • 3、python源码
    • TwHIN embeddings
      • 1、简介
      • 2、工作流
      • 3、python源码
  • 其它资料下载

在这里插入图片描述

2023年3月31日,Twitter 部分推荐算法源码正式在 GitHub 上开放,采用 GNU Affero General Public License v3.0许可证。短短一星期,Github中该推荐算法源码已经取得了**50k+**的Star关注,可见其在算法技术圈中的火爆程度。

在这里插入图片描述
今天我们就来重点分析该推荐算法系统中最重要的机器学习算法。再此之前,我们先来简单看看该推荐系统的核心部分,官方博客参考链接:Twitter’s Recommendation Algorithm

系统核心部分

Twitter 官博重点介绍了Twitter如何每天从5亿条推文中展示部分精选内容,也就是“For You”列表下的算法相关推荐机制和排名。

Twitter 算法推荐的基础是一组核心模型和特征,从推文、用户和互动数据中提取潜在信息。推荐流水线由三个主要阶段组成,这些阶段使用这些特征:

1、从不同的推荐来源中获取最佳推文,这个过程称为获取候选推文;
2、使用机器学习模型对每个推文进行排名;
3、应用启发式和过滤器,例如过滤用已屏蔽用户的推文、NSFW 内容和已经看过的推文等。

负责构建和提供 For You 时间线的服务称为 Home Mixer。Home Mixer 基于 Product Mixer 构建,Product Mixer 是 Twitter 自定义的 Scala 框架,可以帮助构建内容流。该服务充当软件骨干,连接不同的候选源、评分函数、启发式和过滤器。

在这里插入图片描述
一句话可以总结为:Twitter先获取和你相关的各类推文,然后进行推文排名,最后将广告、关注建议和登录提示等非推文内容与排名出来的推文混合,最终展示到你设备上的For you内容,如下图所示。

在这里插入图片描述

机器学习算法

博主对Twitter开源出的推文排名的机器学习算法,比较感兴趣。我们先看下在这次项目开源过程中开源的最重要的两块ML模型:

  1. The “For You” Heavy Ranker: For You 重排名器算法
  2. TwHIN embeddings:TwHIN 嵌入算法

The “For You” Heavy Ranker

1、简介

重排名器是用于对已经通过候选检索阶段的“For You”时间轴的推文进行排名的机器学习模型。它是漏斗的最后阶段之一,主要由一组过滤启发式成功。

该模型接收描述推文和推文被推荐给的用户的特征(具体可参考FEATURES.md)。关于Features的详细解析,博主放到后面再进行研究分析。模型架构是一个并行的MaskNet算法,它输出一组0到1之间的数字,每个输出代表用户以特定方式参与推文的概率。预测的参与类型解释如下:

scored_tweets_model_weight_fav:用户喜欢这条Tweet的概率。
scored_tweets_model_weight_rettwitter:用户转发该Tweet的概率。
scored_tweets_model_weight_reply:用户回复Tweet的概率。
scored_tweets_model_weight_good_profile_click:用户打开推文作者配置文件并点赞或回复推文的概率。
scored_tweets_model_weight_video_playback50:用户至少看一半视频的概率。
scored_tweets_model_weight_reply_engaged_by_author:用户回复Tweet并且该回复被Tweet作者占用的概率。
scored_tweets_model_weight_good_click:用户点击进入该推文对话并回复或点赞推文的概率。
scored_tweets_model_weight_good_click_v2:用户点击进入这条Tweet对话并在那里停留至少2分钟的概率。
scored_tweets_model_weight_negative_feedback_v2:用户做出负面反应的概率(请求在Tweet或作者、block 或mute上“少显示”)

通过跨预测的参与概率进行加权求和,将模型的输出组合成最终模型分数。每个参与概率的权重来自配置文件,由这里的ScoredTweetsParam.scala文件服务堆栈读取。文件中的确切权重可以随时调整,但当前概率权重(2023年4月5日)如下:

scored_tweets_model_weight_fav: 0.5
scored_tweets_model_weight_retweet: 1.0
scored_tweets_model_weight_reply: 13.5
scored_tweets_model_weight_good_profile_click: 12.0
scored_tweets_model_weight_video_playback50: 0.005
scored_tweets_model_weight_reply_engaged_by_author: 75.0
scored_tweets_model_weight_good_click: 11.0
scored_tweets_model_weight_good_click_v2: 10.0
scored_tweets_model_weight_negative_feedback_v2: -74.0
scored_tweets_model_weight_report: -369.0

公式如下:

score = sum_i { (weight of engagement i) * (probability of engagement i) }

由于每个engagement 具有不同的平均概率,所以权重最初被设置为平均,即每个加权的engagement概率对分数贡献几乎相等的量。从那时起,我们定期调整权重,以优化平台指标。

一些免责声明:

由于需要确保它独立于Twitter代码库的其他部分运行,因此与生产模型可能会有一些小的差异。
由于隐私限制,我们无法发布真实的训练数据。但是,我们已经包含了一个脚本来生成随机数据,以确保您可以运行模型训练代码。

2、开发

按照repo设置说明操作后,您可以在虚拟环境中运行以下脚本,在 $HOME/tmp/recap_local_random_data 中创建随机训练数据集:

projects/home/recap/scripts/create_random_data.sh

然后,您可以使用以下脚本训练模型。检查点和日志将写入 $HOME/tmp/runs/recap_local_debug

projects/home/recap/scripts/run_local.sh

可以在 projects/home/recap/config/local_prod.yaml 中配置模型训练

3、python源码

详见官方Twitter Github。

TwHIN embeddings

1、简介

该算法包含用于预训练Twitter实体的密集向量嵌入功能的代码。在Twitter中,这些嵌入用于候选检索,并作为各种推荐系统模型中的模型特征。

我们基于Twitter中的各种图形数据获得实体嵌入,例如:“用户关注用户”“用户收藏夹推文”“用户点击广告”

虽然由于隐私限制,我们无法发布用于训练TwHIN嵌入的图形数据,但可以使用大量子采样的匿名开源图形数据: https://huggingface.co/datasets/Twitter/TwitterFollowGraph https://huggingface.co/datasets/Twitter/TwitterFaveGraph

代码要求parquet文件包含三列:lhs、rel、rhs,分别表示图中每条边的左侧节点、关系类型和右侧节点的词汇索引。

必须在projects/twhin/configs中的配置yaml文件中指定数据的位置。

2、工作流

1)构建本地开发映像

./scripts/build_images.sh

2)运行Docker环境命令

./scripts/docker_run.sh

3)迭代训练图像

./scripts/idocker.sh

4)运行测试

./scripts/docker_test.sh

3、python源码

详见官方Twitter Github。

其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

这篇关于Twitter推特开源机器学习算法学习——For You重排名器及TwHIN嵌入特征算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_31136513/article/details/129982433
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/258280

相关文章

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx