X推荐算法,从特征到排序的完整链路是怎样的?

2026-05-30 04:334阅读0评论运维
  • 内容介绍
  • 文章标签
  • 相关推荐

X推荐算法,从特征到排序的完整链路是怎样的?

2026 年 1 月,X 平台 向全球开发者开放了其“For You”推荐算法的源代码。本文基于 x-algorithm编写,聚焦算法层面的分析。如有理解不对的地方,欢迎指正,我倾向于...!

推荐系统的标准阶段

本文从推荐算法的视角, 聚焦 X推荐系统的算法部分按照推荐系统的标准阶段进行拆解:

X 推荐算法详解:从特征到排序的完整链路

先说说是召回阶段,然后是精排阶段,再说说是重排阶段。

召回阶段

我倾向于... X 的召回策略比较简单,没有粗排,只做了召回截断。

召回的具体细节:用户序列的处理方式很普通,而且只有互动序列一种,太虐了。。

参数 说明
history_seq_len历史序列长度
candidate_seq_len候选物品数量

是不是? 只有1个上下文特征产品界面。其他特征并没有送入模型,而是做了一些未开源的策略。

精排阶段

X 的精排模型基于 Grok Transformer与传统的Transformer Encoder区别:FFN 因子、Attention logits 缩放因子等,是不是?。

参数 说明
widening_factorFFN 因子
attn_output_multiplier Attention logits 缩放因子
num_layers Transformer 层数
emb_size Embedding 维度
num_q_heads Query 头数
num_kv_heads Key/Value 头数

X 抛弃了统计特征、 交叉特征,直接全部使用 ID特征 ,我好了。。

是不是? ID通过2种hash方式, 得到2个hash值,分别过look-up table得到128d的embedding。接着把他们concat起来过一个无激活函数的Linear层再压缩回128d。

# Hash configurationhash_config = HashConfig,最后说一句。

为什么用多重 Hash?

X的用户和帖子的 ID 空间巨大, 如果只用 1 次hash,要把冲突率降到极低, 也是醉了... 表必须开得很大,所以呢这里采用多重Hash Embedding 的方案:

精排模型的预测目标

精排模型直接一边预测 18 种用户行为的概率 P、P、P、P、P、P等等。

预测目标 说明
retweet_score P
reply_score P
favorite_score P

所有预测后来啊通过加权求和得到 weighted_score

重排阶段

精排之后 X 通过一系列重排策略对候选进行到头来调整:去重、时效过滤、平安过滤等。

过滤器

说明

我傻了。 RetweetDeduplicationFilter

  过滤本次下发的物品           具体的权重值未开源           过滤条件           语言偏好         本文基于 x-algorithm编写…… … …

太刺激了。 VFFilter   防止同一作者的帖子霸占信息流

操作一波。 AuthorSocialgraphFilter 好家伙... 作者在 blocked 或 muted 列表

… …

一下吧~!喵!🐈💕😂🤣😃😆🙃😍🙃🙂☺️😊☺️😌😌😌你说是不是呢, 是吧,老铁💁‍♀️👩‍🎤🧖‍♀️🤦‍♀️🤷‍♀️👩‍💼🚺🛀🧖‍♂️🤦‍♂️🤷‍♂️👨‍💼🚹🛀啊哈~!哦豁~!呀呼~!🎉🎊👏💥🎁🔥🎈🪄💫⭐️🌟🌠🌡️🌤️🌪️🌫️🔵🔴🛑🚫🤯🥶☠️💀👻🕷️🤡🦇😹👺🤥🤫🧐🤓🥸🤠👽🦸‍♂️🦸‍♀️👮‍♂️👮‍♀️🚔🚓🚗🚲🛴🛵🚴🏻‍♂️🚴🏻‍♀️🏋🏻🏋🏻✍🏻📝📚📖💡📣📢📰📱📞🔊📻🎧📺📻🔍🔎🗨🔘✔✅❗⚠️➰©®™‼⁉‽⚜⚛〽⚔⚒⚑✇✍☾❄⛅☁⛈⛆〰〽⚓⚒✈︎❄☃⛄︎☾☆⭐︎🌟🌠〰〽⚔⚒⚑✇✍☾❄⛅☁⛈⛆〰〽⚓⚒✈︎❄☃⛄︎☾☆⭐︎🌟🌠

)

X推荐算法,从特征到排序的完整链路是怎样的?

2026 年 1 月,X 平台 向全球开发者开放了其“For You”推荐算法的源代码。本文基于 x-algorithm编写,聚焦算法层面的分析。如有理解不对的地方,欢迎指正,我倾向于...!

推荐系统的标准阶段

本文从推荐算法的视角, 聚焦 X推荐系统的算法部分按照推荐系统的标准阶段进行拆解:

X 推荐算法详解:从特征到排序的完整链路

先说说是召回阶段,然后是精排阶段,再说说是重排阶段。

召回阶段

我倾向于... X 的召回策略比较简单,没有粗排,只做了召回截断。

召回的具体细节:用户序列的处理方式很普通,而且只有互动序列一种,太虐了。。

参数 说明
history_seq_len历史序列长度
candidate_seq_len候选物品数量

是不是? 只有1个上下文特征产品界面。其他特征并没有送入模型,而是做了一些未开源的策略。

精排阶段

X 的精排模型基于 Grok Transformer与传统的Transformer Encoder区别:FFN 因子、Attention logits 缩放因子等,是不是?。

参数 说明
widening_factorFFN 因子
attn_output_multiplier Attention logits 缩放因子
num_layers Transformer 层数
emb_size Embedding 维度
num_q_heads Query 头数
num_kv_heads Key/Value 头数

X 抛弃了统计特征、 交叉特征,直接全部使用 ID特征 ,我好了。。

是不是? ID通过2种hash方式, 得到2个hash值,分别过look-up table得到128d的embedding。接着把他们concat起来过一个无激活函数的Linear层再压缩回128d。

# Hash configurationhash_config = HashConfig,最后说一句。

为什么用多重 Hash?

X的用户和帖子的 ID 空间巨大, 如果只用 1 次hash,要把冲突率降到极低, 也是醉了... 表必须开得很大,所以呢这里采用多重Hash Embedding 的方案:

精排模型的预测目标

精排模型直接一边预测 18 种用户行为的概率 P、P、P、P、P、P等等。

预测目标 说明
retweet_score P
reply_score P
favorite_score P

所有预测后来啊通过加权求和得到 weighted_score

重排阶段

精排之后 X 通过一系列重排策略对候选进行到头来调整:去重、时效过滤、平安过滤等。

过滤器

说明

我傻了。 RetweetDeduplicationFilter

  过滤本次下发的物品           具体的权重值未开源           过滤条件           语言偏好         本文基于 x-algorithm编写…… … …

太刺激了。 VFFilter   防止同一作者的帖子霸占信息流

操作一波。 AuthorSocialgraphFilter 好家伙... 作者在 blocked 或 muted 列表

… …

一下吧~!喵!🐈💕😂🤣😃😆🙃😍🙃🙂☺️😊☺️😌😌😌你说是不是呢, 是吧,老铁💁‍♀️👩‍🎤🧖‍♀️🤦‍♀️🤷‍♀️👩‍💼🚺🛀🧖‍♂️🤦‍♂️🤷‍♂️👨‍💼🚹🛀啊哈~!哦豁~!呀呼~!🎉🎊👏💥🎁🔥🎈🪄💫⭐️🌟🌠🌡️🌤️🌪️🌫️🔵🔴🛑🚫🤯🥶☠️💀👻🕷️🤡🦇😹👺🤥🤫🧐🤓🥸🤠👽🦸‍♂️🦸‍♀️👮‍♂️👮‍♀️🚔🚓🚗🚲🛴🛵🚴🏻‍♂️🚴🏻‍♀️🏋🏻🏋🏻✍🏻📝📚📖💡📣📢📰📱📞🔊📻🎧📺📻🔍🔎🗨🔘✔✅❗⚠️➰©®™‼⁉‽⚜⚛〽⚔⚒⚑✇✍☾❄⛅☁⛈⛆〰〽⚓⚒✈︎❄☃⛄︎☾☆⭐︎🌟🌠〰〽⚔⚒⚑✇✍☾❄⛅☁⛈⛆〰〽⚓⚒✈︎❄☃⛄︎☾☆⭐︎🌟🌠

)