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

网易云音乐、新闻、游戏、邮箱、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 + 类似用户迁移学习补齐数据不足问题

彩录:

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

相关推荐
码事漫谈11 分钟前
大模型输出的“隐性结构塌缩”问题及对策
前端·后端
小江的记录本30 分钟前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
这儿有一堆花36 分钟前
前端三件套真的落后了吗?揭开现代 Web 开发的底层逻辑
前端·javascript·css·html5
白羊by43 分钟前
YOLOv1~v11 全版本核心演进总览
深度学习·算法·yolo
努力的小雨1 小时前
龙虾量化实战法(QClaw)
后端
.Cnn1 小时前
JavaScript 前端基础笔记(网页交互核心)
前端·javascript·笔记·交互
橙露1 小时前
SpringBoot 整合 MinIO:分布式文件存储上传下载
spring boot·分布式·后端
醉酒的李白、1 小时前
Vue3 组件通信本质:Props 下发,Emits 回传
前端·javascript·vue.js
anOnion2 小时前
构建无障碍组件之Window Splitter Pattern
前端·html·交互设计
NotFound4862 小时前
实战分享Python爬虫,如何实现高效解析 Web of Science 文献数据并导出 CSV
前端·爬虫·python