知味轩餐厅的老板阿觉,是个记性极好的老饕。他记得老张无辣不欢,每次研发新辣菜,第一时间端给老张尝鲜;他记得点了麻辣香锅的客人十有八九会要冰镇酸梅汤,于是总会顺势补一句“再搭一杯?”。这家店生意越做越大,阿觉却发现人手记性再强也敌不过成千上万的新面孔——有人只来过一次,有菜刚上架没人点过。他雇来一位叫“深度学习”的味觉分析师:分析师不靠问熟人,而是给每位客人和每道菜都建一份隐形的“味觉档案卡”,用一连串数字记录口味密码,再让神经网络自己琢磨“什么口味配什么菜”。老食客的直觉加上数据分析师的建模能力,这就是协同过滤与深度学习的珠联璧合。本文将带你从阿觉的餐厅故事出发,理解推荐系统从“问朋友”到“建档案、学匹配”的完整进化路径。
对 AI 从业者而言,理解协同过滤与深度学习的结合方式,是踏入推荐系统、搜索排序等核心业务方向的必修课——它能帮你从“调参工程师”成长为真正懂推荐原理的算法工程师。
可视化演示
演示NCF的GMF与MLP双路融合、用户-物品二分图LightGCN传播、以及HR@K与NDCG@K评估指标对比。
本节配有交互动效(进入视口后自动加载,约 3KB)。
NCF双路融合架构 GMF分支 MLP分支 NeuMF=σ(h^T[GMF;MLP]) 双路拼接后Sigmoid输出预测分数
协同过滤基础
知味轩的老板阿觉有个好习惯——每位熟客的口味他都记在心上。老张无辣不欢,新研发的辣菜一定先端给老张尝;新客人一句“我和老张口味差不多”,阿觉便照老张的喜好推荐。这就是协同过滤最朴素的模样:依靠一群人的集体行为经验,替你做参谋。在推荐系统里,这条路叫“基于用户的协同过滤”——你的口味由和你相似的用户投票决定。另一路叫“基于物品的协同过滤”,逻辑反过来:阿觉发现点过麻辣香锅的客人八成也会点冰镇酸梅汤,那么新客人点了香锅,他就顺势推荐酸梅汤——物品之间的相似度,由大量用户的共同消费记录推算出来。
所有行为数据先被整理成一张“用户×物品”的交互矩阵:行是用户,列是物品,格子里填评分或点击次数。真实场景中这个矩阵极其稀疏——绝大多数格子是空的,因为一个人一辈子也点不完菜单上的菜。相似度计算最常用余弦相似度:把两个用户的评分向量看成高维空间里的箭头,箭头夹角越小说明两人口味越像。
老办法直观好用,但硬伤明显:食客千千万,阿觉的记性再好比不过海量数据;矩阵太稀疏,新客人和新菜品常常“找不到相似对象”。这正是深度学习方法将要登场的理由——记忆不够,建模来凑。
- 用户平均分基准$\bar{r}_u$ 是用户 $u$ 对所有打过分的物品的平均分,代表这个人整体的“手松手紧”程度——有人习惯打高分,有人天生苛刻。
- 邻居集合$N(u)$ 是与用户 $u$ 相似度最高的前 $k$ 个用户组成的圈子,相当于阿觉心里“和老张口味最像的那几位熟客”。
- 相似度加权偏差$(r_{vi} - \bar{r}_v)$ 表示邻居 $v$ 对物品 $i$ 的打分偏离他个人平均分的程度,偏离方向比绝对值更有意义;用 $\text{sim}(u,v)$ 做权重,口味越像,话语权越大。
- 归一化分母 $\sum |\text{sim}(u,v)|$ 把所有邻居的权重加起来,把加权和压缩回合理评分区间,防止邻居多时预测值膨胀。
深度学习优势
分店开起来后客流暴涨,阿觉发现老一套失灵了。新客人才来过一两次,翻遍熟客名单也找不到“和他相似的老张”;新菜刚上架,没人点过,更无从谈起“和什么菜搭配”。阿觉意识到:人与物的关系,不能只靠间接找人类比,得给每个用户和每件物品各建一份独立的“味觉档案”。这份档案就是“隐向量”(Embedding):用一串固定长度的数字,编码一个人的口味倾向,或一道菜的味觉密码。档案一开始是随机数,随着训练被不断修正,越修越准。
深度学习相比传统协同过滤的核心优势,正在于把“找相似”升级为“建表示”。传统方法在稀疏的 one-hot 编码上做算术,等于面对一屋子几乎空白的档案册无从下手;深度学习则把高维稀疏输入压成低维稠密向量,让原本“八竿子打不着”的用户和物品在向量空间里有了可比性。
深度学习替代人脑的另一个好处是“可扩展”:堆非线性层能捕捉复杂交互,还能自然融入用户画像、物品图片、评论文本等多源特征。档案卡从空白到精准,阿觉的记性彻底被数字化取代。
- 用户隐向量$\mathbf{p}_u \in \mathbb{R}^K$ 是用户 $u$ 的味觉指纹,$K$ 个数字分别代表某一维潜在口味因子(比如“辣度承受力”“甜口偏好”)。
- 物品隐向量$\mathbf{q}_i \in \mathbb{R}^K$ 是物品 $i$ 的风味特征,维度与用户向量对齐,第 $k$ 维数字回答“这道菜在辣度因子上的表现”。
- 逐维相乘再求和点积把两个向量逐位相乘后累加,等于把“用户的每维口味倾向 × 物品的每维风味特征”全部配对打分后汇总。
- 维度 K 的意义$K$ 是隐向量维度,控制表示能力的粗细。$K$ 太小装不下复杂口味,$K$ 太大容易过拟合,实践中常见 8 到 64。
神经协同过滤
阿觉干脆雇了一位 AI 训练师,把“建档案 + 判匹配”的活儿全交给神经网络。这位训练师不靠人写规则,自己从行为数据里摸索“什么口味配什么菜”。这就是 NCF(Neural Collaborative Filtering,神经协同过滤) 的开山思路:用神经网络替换手工设计的相似度函数。经典方案 NeuralCF 分两条支路并行:一条叫 GMF(广义矩阵分解),对用户向量和物品向量做逐元素乘积,保留传统矩阵分解“线性点积”的表达能力;另一条叫 MLP(多层感知机),把两个向量拼接后送进多层全连接网络,学习“非线性交互”——比如“爱吃辣 + 深夜 + 重口味”这种组合才生效的复杂规则。
两条支路各自产出特征后拼接融合,再过一层全连接,最后用 sigmoid 激活函数把得分压到 0~1 之间,当作“用户喜欢物品”的概率。训练时拿真实交互做监督信号,误差反向传播,自动调整嵌入层和网络权重。
有了训练师,阿觉的两手都硬了:既有矩阵分解的“老食客直觉”,又有深度网络的“综合分析悟性”,推荐准确率明显上了一个台阶。
- GMF 支路$\mathbf{z}_{GMF} = \mathbf{p}_u \odot \mathbf{q}_i$,逐元素相乘保留向量分解的线性匹配能力,相当于传统矩阵分解的“直感”。
- MLP 支路$\mathbf{z}_{MLP} = \phi(\mathbf{p}_u \oplus \mathbf{q}_i)$,把两个向量拼接后经过多层非线性变换,$\phi$ 表示多层感知机的映射函数。
- 双路融合$\oplus$ 是向量拼接操作,把 GMF 和 MLP 两路的特征首尾相连,$\mathbf{h}^T$ 是对拼接结果的加权求和,学出“该信线性还是信非线性”的比例。
- 激活输出$\sigma(\cdot)$ 是 sigmoid 函数,把实数得分压成 $(0,1)$ 概率,方便用交叉熵损失做二分类训练。
特征交叉建模
日子久了阿觉又发现:同一位客人,雨天想喝热汤,夏天想喝冰饮;加班深夜点夜宵和中午朋友聚餐,选择截然不同。光有“用户档案 + 菜品档案”还不够,时间、地点、天气这类上下文特征同样关键。把这些额外信息也纳入模型,就是“特征交叉建模”。
工程上这些上下文信息大多是稀疏离散特征,比如“时段=深夜”“天气=雨”“设备=手机”。处理分两步:第一步让每个稀疏特征都过一层嵌入层,变成稠密向量;第二步让特征之间发生“交叉”。为什么必须交叉?因为单个特征单独看信息量有限,而“深夜 + 雨天 + 火锅”这种组合才真正有预测力。Factorization Machines(FM)用二阶交叉项刻画两两特征组合的贡献;想捕捉更复杂的高阶组合,就交给深度网络的隐层逐层提炼。DeepFM 正是把 FM 的一二阶项与 DNN 并联融合的典型结构。
给推荐装上“天气 + 心情 + 场合”的感知能力,就像阿觉学会了察言观色。特征交叉让模型不只会认人,还会“看天看时”,推荐结果自然更有人情味。
- 全局偏置$w_0$ 是整体平均分,相当于所有餐厅菜品在天时地利人和都不偏不倚时的基准热度。
- 一阶线性项$\sum_{i=1}^{n} w_i x_i$ 是每个特征单独的贡献累加——“雨天”本身加 0.2 分,“火锅”本身加 0.3 分。
- 二阶交叉项$\langle \mathbf{v}_i, \mathbf{v}_j \rangle x_i x_j$ 是特征 $i$ 和特征 $j$ 同时出现时的协同效应——“雨天 × 火锅”的加成远大于各自加分之和。
- 交叉遍历次序$i$ 从 1 到 $n-1$、$j$ 从 $i+1$ 到 $n$,保证每一对特征只交叉一次,不重复计数。
模型训练优化
训练推荐模型就像反复试菜:客人咬了一口皱眉,阿觉就在档案卡上做个负向标记;客人连点三次,就把这道菜的权重调高。优化的本质,是让模型预测和真实行为越来越一致。但这里藏着一个大坑——客人没点过某道菜,真的代表不喜欢吗?很可能他只是没看见。如果把“未交互”一律当作负样本,模型会误以为所有没吃过的菜都不好吃,推荐范围越缩越窄。
于是有了“负采样”策略:从海量未交互物品中随机抽取少量充当负样本,与真实正样本组成对比对。配合 BPR(Bayesian Personalized Ranking)损失,训练目标是:对同一个用户,让正样本的预测得分尽量高于负样本的得分——不要求绝对分多高,只要求相对顺序对。
此外还有冷启动问题:新客人没有历史记录,隐向量无从学起。业界常见做法是“流行度回退”——模型没把握时先推荐热门菜,积累足够数据后再让个性化模型接管。阿觉深知,“没吃过”的海量数据不能一刀切判死刑,得靠采样和排序技巧拿捏分寸。
- 三元组采样$D$ 是三元组 $(u, i, j)$ 的集合,$i$ 是用户 $u$ 交互过的正样本,$j$ 是从未交互物品中采样的负样本。
- 得分差$\hat{y}_{ui} - \hat{y}_{uj}$ 是模型给正样本和负样本打分的差距。差距越大,说明模型越能把“喜欢的”和“不喜欢的”分开。
- 负对数似然$-\ln \sigma(\Delta)$ 把得分差映射成损失。得分差大→$\sigma$ 接近 1→损失趋近 0;得分差为负→损失很大,狠狠惩罚。
- 正则化$\lambda \|\Theta\|^2$ 对全部参数 $\Theta$ 做 L2 惩罚,让隐向量数值不至于过大,避免模型死记硬背个别样本。
性能评估方法
推荐得准不准,不能只听阿觉自夸。得办一场公平的“盲测”:把历史数据切出一块当考卷,让模型在考卷上作答,再和真实行为对答案。这就是离线评估。评估分两类:预测打分准不准,看 RMSE(均方根误差)和 MAE(平均绝对误差);排序推得好不好,看 HR@K(命中率)和 NDCG@K(归一化折损累计增益)。
HR@K 只统计“推荐的前 K 个里有没有用户真正喜欢的”,比较粗粒度;NDCG 更严格,用户真正喜欢的东西排得越靠前,得分越高,排到后面就要扣分。这就像盲测不光看“推荐的菜客人点没点”,还要看“客人最想吃的菜是不是摆在推荐列表第一位”。
离线指标是模拟考,最终还要上线做 A/B 测试:把用户随机分两组,一组用新模型,一组用旧模型,对比点击率、转化率、人均时长等真实业务指标。盲测满分不代表客人满意,只有真实营业数据说了算。
- 相关性标记$rel_k$ 是推荐列表第 $k$ 位物品与用户的相关性,通常取 0 或 1(1 表示用户真实交互过)。
- 增益项$2^{rel_k} - 1$,相关的物品增益为 1,不相关的为 0,只有“命中”才能贡献分数。
- 位置折损$\log_2(k+1)$ 作分母,排在第 1 位折损小,排在第 5 位折损大——越靠后的命中“含金量”越低。
- 归一化$\text{IDCG}@K$ 是“完美排序”下的最高分,用实际得分除以它,让 NDCG 落在 0 到 1 之间,方便跨用户比较。
工程实践要点
知味轩要开成连锁店——阿觉的“独门手艺”必须沉淀成一套谁都能上手的标准流程。推荐系统工程化同样如此:个人经验要变成“数据 + 模型 + 管道”的工业化流水线。典型链路是:用户行为日志 → 特征平台 → 离线训练 → 产出 Embedding → 写入向量检索库 → 线上推荐服务。
线上服务分两步走:先用 ANN(近似最近邻)向量召回,在百万级物品的向量库里快速捞出几百个粗选候选;再用精排模型逐条打分排序,最终返回 Top-N 结果。整个流程要控制在几十毫秒内。Embedding 并非训练一次就一劳永逸,需要定期增量更新以吸收最新行为;同时用监控系统盯住推荐效果指标,发现异常及时回滚。新用户和新物品没有历史交互数据时,套用“流行度回退”兜底,避免模型硬推。
连锁店成功的核心,是把“阿觉的舌头”变成可复制、可监控、可持续迭代的工业系统。每家分店的店长照着同一本菜谱操作,天南海北的客人都能吃到满意的推荐。
- 模型分$\hat{y}_{\text{model}}(u,i)$ 是协同过滤与深度模型给出的个性化匹配分,依赖用户历史行为。
- 流行度分$\hat{y}_{\text{popular}}(i)$ 是物品全局热度分,比如历史点击率或销量归一化值,不依赖具体用户。
- 融合权重$\alpha \in [0,1]$ 控制两种信号的信任比例,新用户取小值(如 0.3),老用户取大值(如 0.9)。
- 加权求和最终得分是两者的凸组合,保证数值范围稳定,直接用于候选排序。
AI 应用场景
电商平台“猜你喜欢”
阶段:离线召回与排序建模
解决的问题:传统热门榜毫无个性,用户行为又极度稀疏。AI 用 NCF 训练用户/商品隐向量做向量召回,再用融合特征交叉的精排模型(如 DeepFM 思路)二次打分,综合解决稀疏性和个性化问题。
具体案例:某电商用户近期频繁搜索“露营”,系统结合季节特征交叉,将帐篷、折叠椅、便携气罐排到首页前列,推荐点击率提升约 12%,转化率同步上涨。
短视频信息流个性化排序
阶段:在线排序与实时更新
解决的问题:短视频内容更新极快,新视频几小时内就要决定生死。BPR 损失优化排序,配合设备、时段、网络环境等上下文特征交叉,让新内容也能被快速精准分发。
具体案例:某视频平台对冷门但优质的创作者视频采用负采样 + 排序学习,避免新内容因初始曝光不足而沉没,优质视频的完播率显著提升。
音乐 App 每日推荐歌单
阶段:冷启动策略与效果评估
解决的问题:新注册用户没有任何听歌历史,直接上个性化模型等于盲猜。采用流行度回退:先推热门榜积累行为,再用 NDCG 等离线指标监控推荐质量,最后经过 A/B 测试确认收益后全量上线。
具体案例:某音乐 App 新用户注册后首周以热门歌单兜底,积累 50 次播放行为后逐步调大个性化权重 $\alpha$,次周人均播放时长提升 18%。
Python 演示
# -*- coding: utf-8 -*-"""简化版神经协同过滤(NCF 的 GMF 分支)演示: 使用模拟评分数据训练用户/物品隐向量,输出 Top-K 推荐。""" import numpy as np np.random.seed(42)NUM_USERS, NUM_ITEMS, K = 50, 80, 16LAMBDA, LR, EPOCHS = 0.01, 0.05, 30 # 1. 生成真实偏好,仅保留 20% 作为可见交互(稀疏观测)true_u = np.random.randn(NUM_USERS, K)true_i = np.random.randn(NUM_ITEMS, K)rating_all = true_u @ true_i.Tmask = np.random.rand(NUM_USERS, NUM_ITEMS) < 0.2observed = rating_all * mask # 2. 初始化参数:用户/物品隐向量 + 偏置P = np.random.randn(NUM_USERS, K) * 0.1Q = np.random.randn(NUM_ITEMS, K) * 0.1bu = np.zeros(NUM_USERS)bi = np.zeros(NUM_ITEMS)mu = np.mean(observed[observed > 0])pairs = np.argwhere(mask) # 3. 随机梯度下降训练def predict(u, i): return mu + bu[u] + bi[i] + P[u] @ Q[i] for epoch in range(EPOCHS): np.random.shuffle(pairs) for u, i in pairs: e = observed[u, i] - predict(u, i) bu[u] += LR * (e - LAMBDA * bu[u]) bi[i] += LR * (e - LAMBDA * bi[i]) old_pu = P[u].copy() P[u] += LR * (e * Q[i] - LAMBDA * P[u]) Q[i] += LR * (e * old_pu - LAMBDA * Q[i]) # 4. 预测完整评分矩阵,给用户 0 推荐 Top-5 未交互物品pred = mu + bu[:, None] + bi[None, :] + P @ Q.T def recommend(u, top_k=5): scores = pred[u].copy() scores[mask[u]] = -np.inf return np.argsort(scores)[::-1][:top_k] u0 = 0recs = recommend(u0)real_top5 = np.argsort(rating_all[u0])[::-1][:5]hit = len(set(recs) & set(real_top5)) / 5.0print("用户 0 的 Top-5 推荐:", recs)print("真实偏好 Top-5 命中率: %.2f" % hit)
observed = rating_all * mask用掩码造出 80% 稀疏的用户-物品交互矩阵,模拟真实世界的冷启动困境。mu = np.mean(observed[observed > 0])以全局均值为基线,用户和物品偏置都围绕它浮动,相当于“餐厅平均水准”。e = observed[u, i] - predict(u, i)预测误差是训练的唯一信号,误差大就多调整,误差小就少调整。old_pu = P[u].copy()先复制旧用户向量再更新,保证物品向量更新用的是本次迭代前的值,避免互相干扰。scores[mask[u]] = -np.inf屏蔽已交互物品,避免推荐重复内容,只从没吃过的菜里挑。
常见误区
误区数据里用户没点过的菜,肯定是不喜欢,全部当成负样本来训练。这样模型学出来推荐列表越缩越窄,最后只剩那几道热门菜。
正解没交互很可能只是“没看到”“没来得及”,并非负面反馈。正确的做法是负采样:从海量未交互物品中随机抽取少量充当负样本,再配合 BPR 这类排序损失,让正样本得分高于负样本得分。这就像阿觉不会因为客人没点过某道菜就说他讨厌这道菜——大概率只是菜单没翻到那一页。
为何常见:把缺失当负数,是把“稀疏矩阵里的 0”直接理解为“不喜欢”,而没有意识到缺失机制(曝光限制、排序位置)才是主因。
误区维度 K 越大,能装的口味细节越多,模型越聪明。于是直接把 K 设成 1024,结果训练慢、内存爆,效果反而变差。
正解K 控制表示能力的粗细,但数据量是瓶颈。K 过大时模型容易把训练样本的噪声背下来(过拟合),泛化能力下降;K 过小则表达力不足。实践中 K 取 8~64 是常见区间,具体要靠验证集调。就像给客人建档案,记 1024 条琐碎细节和记 32 条核心口味,后者反而更管用。
为何常见:直观上“信息越多越好”,忽视了有限样本下模型的拟合边界和计算成本。
误区有了 NCF、DeepFM 这些深度模型,基于用户/物品的经典协同过滤就过时了,不值得再学。
正解深度学习并没有消除协同过滤的核心假设——“相似的人有相似偏好”,只是把相似度函数从人工设计换成了神经网络自动学习。经典 CF 在冷启动、可解释性、资源受限场景下仍有不可替代的价值,深度模型也依然依赖交互数据的质量。两者是演进关系,不是取代关系。好比阿觉雇了分析师,不等于自己的舌头就没用了。
为何常见:把“模型架构升级”误当成“旧原理失效”,忽略了推荐系统的底层逻辑始终是协同信号。
误区离线测试 NDCG 涨了 5%,直接全量上线,结果线上点击率反而下降。
正解离线评估用的是历史数据,天然存在分布偏移——用户的兴趣在变、物品池在变。离线指标高只说明模型“在考卷上答得好”,线上还受延迟、展示位、内容生态等复杂因素影响。正确的流程是离线初筛 + A/B 测试验证,用点击率、转化率等真实业务指标做最终裁决。
为何常见:把模拟考分数等同于实战能力,忽略了“考卷”和“真实战场”之间的系统性差异。
误区把能拿到的特征全塞进模型,用户 ID、天气、设备、星座……统统交叉一遍,坚信“数据越多越强”。
正解冗余特征带来的噪声、稀疏性和计算成本往往超过增益。特征工程的核心是“选择有区分度、与业务目标对齐的特征”,并配合正则化控制模型复杂度。就像阿觉记客人爱好,记“口味、忌口、常来时段”就够了,记“鞋子尺码”纯属添乱。
为何常见:把“更多信息”等同于“更好模型”,忽略了特征与目标的相关性以及过拟合风险。
面试题
Q1. 协同过滤最核心的假设是什么?
- A.物品越多推荐越准
- B.相似用户偏好相似← 正确答案
- C.评分必须服从正态分布
- D.用户之间互不影响
答案:B。协同过滤不分析物品内容,只依赖群体行为:口味相似的用户,偏好也相似。B 正确。A 是数量幻觉,C 是统计假设错误,D 与协同过滤的前提完全相反。就像阿觉靠“老张爱吃辣,新客人像老张”来推荐。
Q2. 基于物品的协同过滤,推荐某物品的依据是什么?
- A.与该物品相似的物品← 正确答案
- B.与该物品同一品牌
- C.当前最热门的物品
- D.价格最低的物品
答案:A。ItemCF 的逻辑是“点了 A 的人也点了 B”,用共同交互数据计算物品间相似度,再推荐相似物品。同一品牌是属性特征而非协同信号,热门和低价是规则策略,都不是协同过滤的核心依据。
Q3. 下列哪项是衡量推荐列表排序质量的常用指标?
- A.归一化折损累计增益 NDCG← 正确答案
- B.模型训练集上的平均损失
- C.参数梯度下降的范数大小
- D.正则化项的惩罚强度高低
答案:A。NDCG@K 计算“越相关的物品排得越靠前”得分越高,是排序质量经典指标。训练损失只能反映拟合程度,梯度范数和正则化强度是训练过程的诊断量,均不能直接衡量推荐效果。
Q4. 矩阵分解中隐向量维度 K 的主要作用是什么?
- A.控制模型的表示能力← 正确答案
- B.控制训练的迭代轮数
- C.控制梯度下降的学习率
- D.控制负样本的采样比例
答案:A。K 决定用户和物品向量里装多少维“口味因子”,K 大表达力强但易过拟合,K 小表达力弱但稳健。K 与迭代轮数、学习率、采样比例无关,后三者是训练超参数。
Q5. 相比传统矩阵分解,深度学习在协同过滤中的优势有哪些?
- A.自动学习非线性特征← 正确答案
- B.融合文本图像多源信息← 正确答案
- C.天然解决全部冷启动
- D.完全不需要训练数据集
答案:AB。神经网络能拟合非线性交互,也能把文本、图片等特征一起嵌入训练,故 A、B 正确。深度学习依旧依赖交互数据,冷启动照样存在,C 错;无数据则无监督信号,D 错。
Q6. 特征交叉建模中,嵌入层(Embedding)的核心作用是什么?
- A.将稀疏离散特征映射为稠密向量← 正确答案
- B.增加训练样本的数量
- C.删除数据集中的缺失值
- D.加快梯度下降的收敛速度
答案:A。嵌入层本质是一张查找表,把 one-hot 稀疏向量映射为低维稠密向量,让“雨天”“深夜”这类类别特征变得可计算、可比较。它不增加样本、不删缺失值,收敛速度只是间接收益。
Q7. BPR 损失函数主要优化的是哪个目标?
- A.让正样本得分高于负样本得分← 正确答案
- B.让所有预测得分尽量接近真实分
- C.让模型输出的概率尽量均匀
- D.让训练损失降到绝对零值
答案:A。BPR 是排序损失,构建 (用户,正样本,负样本) 三元组,目标是正样本预测分 > 负样本预测分。它不要求绝对打分准确,只关心相对顺序,因此 A 正确,B 是回归目标,C、D 是误解。
Q8. 关于 NCF 中 GMF 与 MLP 两条支路,下列说法正确的有?
- A.GMF 保留线性点积能力← 正确答案
- B.MLP 只做简单特征拼接
- C.双路融合使用随机加权
- D.Sigmoid 输出偏好概率← 正确答案
答案:AD。GMF 对用户/物品向量做逐元素乘积,保留矩阵分解的线性匹配能力,A 正确;MLP 拼接后还要经过多层非线性变换,不是“只拼接”,B 错;双路融合的权重是学习出来的而非随机,C 错;最后用 sigmoid 把得分压到 0~1 表示偏好概率,D 正确。
Q9. 关于负采样与 BPR 损失的理解,正确的有?
- A.随机采样未交互物品作负样本← 正确答案
- B.让正样本得分高于负样本← 正确答案
- C.负样本越多模型一定越好
- D.负采样无需考虑物品热度
答案:AB。负样本从未交互物品中随机采样,A 正确;BPR 的核心是让正样本得分高于负样本,B 正确;负样本过多会造成类别极度失衡,未必更好,C 错;采样时通常会过滤高热度物品,避免“没交互只是没曝光”的假负样本,D 错。
Q10. 新用户冷启动场景下,工程上常用的回退策略是什么?
- A.先推全局热门物品兜底← 正确答案
- B.随机生成一个用户隐向量
- C.禁止向新用户做推荐
- D.放弃模型只靠人工规则
答案:A。新用户没有行为历史,模型分不可靠,常用 $\alpha \cdot \hat{y}_{model} + (1-\alpha) \cdot \hat{y}_{popular}$ 做流行度回退,先用热门兜底、积累数据后再调大个性化权重。随机向量缺乏语义,禁止推荐和放弃模型都不符合工程实践。