当前位置: 首页 > news >正文

Twitter推荐算法总架构和算法说明

Twitter推荐算法总架构:

这个推荐架构的作用是生成在用户首页上显示的推文列表

在这里插入图片描述



步骤:

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



候选源:

来源分成两部分,网络内和网络外。这里的网络指的是Twitter的社交网络。



1、网络内来源
网络内来源是最大的候选来源,旨在提供所关注的用户的最相关、最近的推文。它使用逻辑回归模型,根据相关性对你所关注的用户的推文进行有效排名。排名靠前的推文会被送到下一个阶段。

对网络内推文进行排名的最重要组成部分是Real Graph。真实图谱是一个预测两个用户之间接触的可能性的模型。你和推文作者之间的Real Graph得分越高,将包括更多他们的推文。

网络内来源一直是Twitter最近工作的主题。最近停止了使用Fanout服务,这是一项有12年历史的服务,以前是用来从每个用户的推文缓存中提供网络内推文的。也正在重新设计逻辑回归排名模型,该模型最后一次更新和训练是在几年前!



2、网络外的来源
寻找用户网络之外的相关推文是一个比较棘手的问题:如果你不关注作者,怎么能知道某条推文是否与你有关?Twitter采取了两种方法来解决这个问题。



2.1社会图谱

第一个方法是通过分析你所关注的人或有类似兴趣的人的参与情况来估计你会发现什么是相关的。

遍历参与度和关注度的图表,以回答以下问题:

1、我关注的人最近参与了哪些推文?
2、谁喜欢与我相似的推文,他们最近还喜欢什么?
**根据这些问题的答案生成候选推文,并使用逻辑回归模型对生成的推文进行排名。**这种类型的图形遍历对网络外推荐至关重要;

**开发了GraphJet,一个图形处理引擎,维护用户和推文之间的实时互动图,以执行这些遍历。**虽然这种搜索Twitter参与和关注网络的启发式方法已被证明是有用的(目前这些方法服务于大约15%的主页时间线推文),但嵌入空间方法已成为网络外推文的更大来源。



2.2嵌入空间

嵌入空间方法旨在回答一个关于内容相似性的更普遍的问题:哪些推文和用户与我的兴趣相似?

嵌入的工作方式是生成用户兴趣和推文内容的数字表示。然后,可以计算出这个嵌入空间中任何两个用户、推文或用户-推文对之间的相似性。只要产生准确的嵌入,就可以用这种相似性作为相关性的代表。

Twitter最有用的嵌入空间之一是SimClusters。SimClusters使用一种自定义的矩阵分解算法,去发现由有影响力的用户群体关注的社区进行嵌入。这里有145k个社区,每三周更新一次。用户和推文在社区的空间中被表示,并且可以属于多个社区。社区的规模从个人朋友圈的几千个用户,到新闻或流行文化的几亿个用户。这些是一些最大的社区:

在这里插入图片描述

可以通过查看Tweet在每个社区的当前受欢迎程度,将Tweet嵌入到这些社区。一个社区的用户越喜欢一条推文,该推文就越能与该社区联系起来。



排序

为你服务 "时间轴的目标是为你提供相关的推文。在管道的这一点上,有大约1500个可能是相关的候选推文。分数直接预测每个候选推文的相关性。在这个阶段,所有的候选推文都被平等对待,不考虑它来自哪个候选推文的来源。

排名是通过一个约4800万个参数的神经网络实现的,该网络在推特互动上不断训练,以优化积极的参与(例如,赞、转发和回复)。这个排名机制**考虑到了数千种特征,并输出十个标签,给每条推文打分,其中每个标签代表参与的概率。**根据这些分数对推文进行排名。



启发式方法、过滤器和产品特性

在排名阶段之后,应用启发式方法和过滤器来实现各种产品功能。这些功能共同作用,创造一个平衡和多样化的推荐。一些例子包括:

1、可见度过滤:根据推文的内容和你的偏好,过滤掉推文。例如,删除你屏蔽或静音的账户的推文。
2、作者多样性:避免单一作者的连续推文太多。
3、内容平衡:确保在网络内和网络外的推文中提供公平的平衡。
4、基于反馈的疲劳度:如果观众对某些推文提供了负面的反馈,则降低该推文的得分。
5、社会证明:排除没有第二层关系的网络外推文,作为一种质量保障。换句话说,确保你关注的人参与了该推文或关注该推文的作者。
6、对话:通过将回复与原始推文串联起来,为回复提供更多背景。
7、编辑过的推文:判断当前设备上的推文是否过时,并发送指示,用编辑过的版本替换它们。



混合和服务

在这一点上,Home Mixer有一组推文,准备发送到你的设备上。作为这个过程的最后一步,系统将推文与其他非推文内容混合在一起,如广告、关注建议和入职提示,这些内容将返回到你的设备上显示。

上述管道每天运行约50亿次,平均在1.5秒内完成。一个管道的执行需要220秒的CPU时间,几乎是你在应用程序上感知到的延迟的150倍。



参考:

1、Twitter’s Recommendation Algorithm

er.com/engineering/en_us/topics/open-source/2023/twitter-recommendation-algorithm)

2、examples/lite/examples/image_classification/android at master · tensorflow/examples (github.com)

相关文章:

Twitter推荐算法总架构和算法说明

Twitter推荐算法总架构: 这个推荐架构的作用是生成在用户首页上显示的推文列表 步骤: 1、从不同的推荐来源中获取最好的推文,这个过程被称为候选来源。 2、使用机器学习模型对每条推文进行排名。 3、应用启发式方法和过滤器,例如…...

1.C语言题目---指针类(基础)

1. 小端,低地址存低字节,高地址存高字节 大端,低地址存高字节,高地址存低字节 人类读写数据习惯是大端字节序 比如说数字12345678在寄存器大端存储顺序如下: 在寄存器小端存储顺序如下: 假设,a变量的地址为0x64,则a变量在内存中的模型为: 0…...

【算法与数据结构】关于排序的问题思考

文章目录引言不断的插入值,并保证序列是递增的。Python中sort()和sorted()的区别是啥?sorted 函数如何使用?问题: 如何返回排序之后的索引问题:排序的稳定性问题,寻找第K大的元素的算法。引出一个算法题&am…...

行为型模式-命令模式

行为型模式-命令模式命令模式(Command)解决命令执行问题描述适用环境优点:缺点:违反原则:代码实现命令模式(Command) 解决命令执行问题 描述 将一个请求封装为一个对象,并定义该对…...

SHELL综合练习1

文章目录1、编写函数,实现打印绿色OK和红色FAILED 判断是否有参数,存在为Ok,不存在为FAILED2、 编写函数,实现判断是否无位置参数,如无参数,提示错误3、编写函数实现两个数字做为参数,返回最大值…...

ROS开发之如何使用发布者、订阅者和话题消息?

文章目录0、引言1、创建发布者(velocity发布者 →geometry话题消息→turtlesim订阅者)2、创建订阅者(turtlesim发布者→turtlesim话题消息→pose订阅者)3、自定义话题消息4、使用自定义话题消息(person发布者→自定义话…...

基于Java+Springboot+vue高校资源共享交流平台设计和实现

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...

收藏! 38个Python数据科研库

通用的数据科学库,即那些可能被数据科学领域的从业人员用于广义的,非神经网络的,非研究性工作的库: 数据-用于数据管理,处理和其他处理的库 数学-虽然许多库都执行数学任务,但这个小型库却专门这样做 机…...

SpringBoot过滤器获取Bean-请求重复可读-获取请求体数据-用户IP归属地获取

文章目录一.获取Bean二. Request重复可读三. 过滤器获取Body请求体数据四.用户ip获取一.获取Bean 网上一些论调说Filter无法注入Bean的原因是加载顺序: listener—>filter—>servlet导致的.我不赞同. 原因:默认机制下,在SpringBoot应用启动时,IOC…...

有哪些特别小众而有趣的编程语言呢?

相对较小众的编程语言,还要有趣?发表一些个人看法,如果不对大家口味,大家轻喷,留情留情。 Rust:Rust是一种系统编程语言,致力于提供高性能、可靠性和安全性。Rust具有内存安全和线程安全的特性&…...

vue中使用高德

首先我们要申请高德地图的key,当前升级过后高德地图使用也需要加上安全秘钥 注册账号 访问高德地图开发平台根据实际情况填写就可以🍜(实名认证的时候选择个人就可以,如果是企业级的项目,可能会涉及人员变动&#xf…...

React class组件和hooks setState异步更新数据详解

一、 class组件setState详解 1.class组件setState异步更新数据详解 class Father extends React.Component{state {num:0}addHandler () > { this.setState({num: 100})console.log(state中的值,this.state.num)}render() { return (<div><button onClick{this…...

ToBeWritten之嵌入式操作系统

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…...

git 实际开发中使用-解决问题

前言 git代码版本管理工具&#xff0c;打破常规的物理传输&#xff0c;更新&#xff0c;合并&#xff0c;回滚提高了开发效率和可追溯性。 网上的资料会把所有的命令都很全也很多&#xff0c;导致对刚刚了解的同学不友好&#xff0c;很难实际使用。 每个人都有自己使用git的习…...

新星计划·2023-第1期 - Python赛道报名入口 -〖你就是下一个新星〗

↓↓↓报名方式&#xff1a;&#xff08;下滑到本页面底部&#xff09;重要提醒&#xff1a;这里是 新星计划2023-第1期 - Python赛道报名入口&#xff0c;一经报名&#xff0c;不可更换。报名入口点击此处跳转 一、新星计划 新星计划是一个以发掘潜力新人、培养优质博主为目…...

Android LowMemoryKiller概述

Agenda Low memory killer 概述 内核空间LMK ULMK‐vmpressure ULMK‐PSI Low memory killer 概述 lowmemorykiller的作用就是当内存比较紧张的时候去及时杀掉一些对用户来说不那么重要的进程&#xff0c;回收内存&#xff0c;保证手机的正常运行。安卓平台lowmemorykiller机…...

特殊操作流——案例:游戏次数

需求&#xff1a;请求程序实现猜数字小游戏只能试玩三次&#xff0c;如果还想玩&#xff0c;提示&#xff1a;游戏已经结束&#xff0c;想玩请充值&#xff08;www.itcast.cn&#xff09; 思路&#xff1a; 写一个游戏类&#xff0c;里面有一个猜数字的小游戏 写一个测试类&am…...

git clone connect to gitlab sign in token弹窗让我输入用户名和密码

系列文章目录 文章目录系列文章目录前言前言 当我使用git bash输入命令&#xff1a;git clone https://gitlab.freedesktop.org/raqm/raqm.git libraqm 弹窗 ASUSLAPTOP-0R30I78P MINGW64 /e/krita-dev $ git clone https://gitlab.freedesktop.org/raqm/raqm.git libraqm C…...

【Blender】如何在Blender中添加HDRI环境贴图

​ 什么是HDRI环境贴图 环境贴图或HDRI贴图是在Blender中照亮3D场景并实现逼真效果的最有效和最快捷的方法之一。 HDRIs本质上是现实世界照明的快照&#xff0c;其中包含高动态范围成像&#xff08;HDRI&#xff09;的准确照明细节。HDRI是一个包含亮度信息&#xff08;从暗…...

前端监控指的是什么?

前端监控分为三个方面&#xff1a; 异常监控&#xff08;监控前端页面的报错&#xff09;性能监控&#xff08;监控页面的性能&#xff09;用户行为监控&#xff08;监控用户的行为&#xff0c;计算PV、UV、在线时间等、数据监控即我们常说的埋点 例子1 在后端突然上线了某个需…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...