网易推荐系统全揭秘:如何让用户越刷越上头?(附算法逻辑+特征样例+召回实测)

网易云音乐、新闻、游戏、邮箱、LOFTER、网易号......你可能不知道:

"网易内部推荐系统每天调用超10亿次,为数十个业务场景提供'你喜欢'。"

而背后的推荐不是玄学,而是一整套多阶段召回 + 特征工程 + 多塔深度模型 + 实时重排的系统。

今天,我们不仅讲算法,还讲代码、样例和真实召回逻辑。


一、网易推荐架构全景图(多阶段、多模型、多业务)

css 复制代码
graph TD
A[用户请求] --> B[粗排召回层]
B --> C[多路召回通道]
C --> D[候选集合并]
D --> E[特征工程处理]
E --> F[排序模型层(DNN+LR+GBDT)]
F --> G[TopK生成]
G --> H[用户前端展示]

二、召回阶段:网易的"六路召回"策略

通道 描述 示例
用户行为召回 根据用户点击/点赞记录 "你最近听过的歌手"
相似内容召回 根据内容 embedding 相似度 "听了A推荐B"
热门召回 当前热点内容或热榜 "今日热议话题"
标签匹配召回 用户兴趣与内容打标签匹配 "你关注的'爵士乐'"
地域兴趣召回 区域偏好挖掘 "广州本地最火游戏"
社交传播召回 好友互动内容推送 "你朋友点赞了..."

三、代码演示:内容 embedding 相似度召回(简化)

python 复制代码
# 1. 基于 FastText/Word2Vec/自研embedding模型获取内容向量
def get_embedding(content_id):
    return content_embedding_db[content_id]

# 2. 计算与目标内容的余弦相似度
def cosine_sim(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

# 3. 召回最相似的10条内容
def recall_similar_content(target_id, topk=10):
    target_vec = get_embedding(target_id)
    all_scores = []
    for cid in content_pool:
        if cid == target_id:
            continue
        score = cosine_sim(target_vec, get_embedding(cid))
        all_scores.append((cid, score))
    return sorted(all_scores, key=lambda x: -x[1])[:topk]

输出样例:

python 复制代码
[
  ('song_324', 0.976),
  ('song_871', 0.953),
  ('song_112', 0.941),
  ...
]

这些候选内容就是召回阶段第一步结果,将进入后续排序。


四、特征工程:网易推荐模型的关键"黑魔法"

每个候选内容,网易会生成超200维特征,分为:

类别 示例特征
用户侧 uid、历史点击 CTR、活跃天数、兴趣词向量
内容侧 content_id、类型、标签、热度、embedding
行为侧 展现时间、点击时间、页面位置、设备类型
交叉特征 用户兴趣 × 内容标签;地域 × 内容类型等

五、排序模型:DNN + Wide & Deep + 多塔网络(DeepFM)

网易推荐排序核心模型是类似如下结构:

python 复制代码
import torch.nn as nn

class NetEaseRankModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.wide = nn.Linear(200, 1)
        self.deep = nn.Sequential(
            nn.Linear(200, 128),
            nn.ReLU(),
            nn.Linear(128, 64),
            nn.ReLU(),
            nn.Linear(64, 1)
        )

    def forward(self, x):
        wide_out = self.wide(x)
        deep_out = self.deep(x)
        return wide_out + deep_out
  • Wide部分捕捉稀疏组合(如:广州+游戏)
  • Deep部分捕捉非线性兴趣(如:你最近总在听"民谣")

六、真实重排流程(简化)

python 复制代码
def rerank(candidates, user_features):
    scored = []
    for cid in candidates:
        content_feat = get_content_feature(cid)
        combined = combine(user_features, content_feat)
        score = model.predict(combined)
        scored.append((cid, score))
    return sorted(scored, key=lambda x: -x[1])[:10]

实测输出(Top10):

css 复制代码
[  ('song_871', 0.91),  ('song_112', 0.89),  ('song_324', 0.85),  ...]

这些就是最终推荐给你的列表


七、网易个性化推荐的亮点总结:

特性 说明
多源召回 精准构建候选内容池
海量特征 支持多业务横向扩展
模型混合 Wide + Deep、FM、GBDT 多模型融合
实时性强 推荐请求延迟 < 100ms
强调用户冷启动 使用 user embedding + 类似用户迁移学习补齐数据不足问题

彩录:

"网易推荐系统不是要'推荐内容',而是'推荐你想成为的样子'。"

相关推荐
摸鱼的春哥3 分钟前
Agent教程15:认识LangChain(中),状态机思维
前端·javascript·后端
明月_清风9 分钟前
告别遮挡:用 scroll-padding 实现优雅的锚点跳转
前端·javascript
明月_清风12 分钟前
原生 JS 侧边栏缩放:从 DOM 监听到底层优化
前端·javascript
风象南7 小时前
我把大脑开源给了AI
人工智能·后端
万少9 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
董董灿是个攻城狮10 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
橙序员小站11 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德11 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆13 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
炫饭第一名14 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员