想象一下,深夜的城市里有一家“老友咖啡馆”。老咖啡师阿达闭着眼睛都能说出熟客的口味:陈姐要少糖拿铁,老周只喝不加冰的美式,小美最爱桂花酒酿。可是有一天阿达休假了,店里来了一位新咖啡师小冷。小冷面前有一本厚厚的顾客本,上面画满了复杂的记录——但只要客人一开口,他就尴尬地愣住:“这位客人,我完全不认识您。”更麻烦的是,后厨新到的一袋咖啡豆,没有任何人尝过,小冷也不知道该把它推荐给谁。这就是推荐系统协同过滤的“冷启动问题”:算法像小冷一样,依赖“历史记录”来猜人心,一旦遇到从没记录过的新用户、新物品,就彻底懵了。 好在,小冷可以学。他可以观察客人的穿着谈吐来猜口味(基于内容推荐);可以问客人喜欢酸还是苦(冷启动引导);可以先把店里的招牌咖啡端上来(热门物品兜底);还可以把几种方法组合起来用(混合推荐策略)。这篇文章,就是陪小冷——也陪正在做推荐系统的你——把这些方法逐个理清楚。

岗位关联

掌握冷启动解决思路,是推荐算法工程师的核心基本功。它让你的系统在新用户涌入、新物品上架时依然保持推荐质量,直接决定产品的冷启动体验与转化指标。

目录
  1. 可视化演示
  2. 冷启动成因:数据缺位的起点
  3. 冷启动分类:三种“不认识”
  4. 基于内容推荐:用画像弥补行为
  5. 混合推荐策略:多种信号组合出击
  6. 冷启动引导方案:变“猜”为“问+观察”
  7. 热门物品兜底:过渡期的安全牌
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示推荐系统中新用户/新物品的冷启动问题,以及基于内容、热度、混合等解决策略的对比。

本节配有交互动效(进入视口后自动加载,约 3KB)。

协同过滤冷启动问题 新用户:无交互历史,无法匹配相似用户 新物品:无评分记录,无法被推荐 系统冷启动:全新平台无数据积累 Cold Start = No History → No Prediction 冷启动是协同过滤的核心痛点

冷启动成因:数据缺位的起点

小冷第一天上班就遇到了最头疼的事——客人们陆陆续续进门,每个人的脸上都写着“你怎么还不认识我”。老咖啡师阿达可以靠记忆推荐,但小冷手里只有一本零散的点单记录。他想找到某位新客人的“相似老熟人”,却发现这位客人的名字从没出现在记录里,一个相似的人都找不到。

协同过滤推荐系统的逻辑,正是“找相似的人,看你看过的东西”。它需要用用户×物品的“交互矩阵”来做运算——行是用户,列是物品,格子是行为记录。可是,当一个新用户或新物品进入矩阵时,对应的整行或整列都是空的。空行空列无法计算余弦相似度,也不能参与矩阵分解,协同过滤就“断粮”了。

冷启动在工程上首先表现为交互矩阵稀疏。我们用一个公式量化稀疏程度:

公式中,$N_{\text{user}}$ 是用户数,$N_{\text{item}}$ 是物品数,两者相乘是矩阵的总格数;$N_{\text{interaction}}$ 是有行为记录的格子数。这个比值越小,稀疏度越大,冷启动越严重。

稀疏度就像咖啡馆的“熟客覆盖率”。当 100 位客人面对 50 种咖啡时,本子上却只有 300 条点单记录——覆盖率仅 6%。而小冷最需要的那位新客人,连一条记录都没有,这就是冷启动的根源。

Sparsity=1−NinteractionNuser×Nitem\text{Sparsity} = 1 - \frac{N_{\text{interaction}}}{N_{\text{user}} \times N_{\text{item}}}
  1. $N_{\text{user}} \times N_{\text{item}}$用户数与物品数相乘,得到交互矩阵的总容量,相当于所有客人×所有咖啡的组合数。
    Nuser×NitemN_{\text{user}} \times N_{\text{item}}
  2. $N_{\text{interaction}}$实际发生的交互记录数,例如点击、购买、收藏等有效行为点。
    NinteractionN_{\text{interaction}}
  3. $\frac{N_{\text{interaction}}}{N_{\text{user}} \times N_{\text{item}}}$已记录行为占总组合数的比例,也叫矩阵密度。
    NinteractionNuser×Nitem\frac{N_{\text{interaction}}}{N_{\text{user}} \times N_{\text{item}}}
  4. $1 - \text{密度}$用 1 减去密度,得到空白格子的比例,即稀疏度。新用户整行全空,该行密度为 0。
    1−NinteractionNuser×Nitem1 - \frac{N_{\text{interaction}}}{N_{\text{user}} \times N_{\text{item}}}

冷启动分类:三种“不认识”

小冷慢慢发现,“不认识客人”也分好几种情况。有的客人是第一次推门进来,谁都没见过;有的是供应商送来一袋从没上架过的新豆子,连老客人都没喝过;还有一种最夸张——小冷自己也是第一天来,整家店的历史记录都少得可怜。

在推荐系统里,这三种情况分别叫用户冷启动、物品冷启动和系统冷启动。用户冷启动发生在刚注册的新用户身上,他们没有任何浏览、点击、购买记录;物品冷启动发生在新上架的商品身上,它没有获得任何用户反馈,也无法参与“相似物品”计算;系统冷启动则出现在产品上线初期,连存量数据都很稀少。

无论哪一种冷启动,在数学上都可以统一为“交互矩阵中某一行或某一列的和为 0”。设 $R_{ui}$ 表示用户 $u$ 对物品 $i$ 的交互记录,则用户冷启动的条件是:

对小冷来说,这三种状况需要不同的应对策略。面对全新客人,他要靠观察画像;面对新豆子,他要靠豆子的风味标签去匹配老客人;面对刚开张的店,他只能先把热门款做起来。分清类型,才能对症下药。

∑i=1nRui=0\sum_{i=1}^{n} R_{ui} = 0
  1. $R_{ui}$用户 $u$ 对物品 $i$ 的交互取值,有行为记 1,无行为记 0,这是交互矩阵的最小单元。
    RuiR_{ui}
  2. $\sum_{i=1}^{n}$对所有的 $n$ 个物品遍历求和,统计用户 $u$ 的总行为数。
    ∑i=1n\sum_{i=1}^{n}
  3. $=0$总和等于 0,说明用户 $u$ 没有任何行为,其行向量是零向量。
    =0=0
  4. 零向量的后果零向量的长度为 0,与任意向量的夹角余弦无法定义,协同过滤无法为该用户找到相似人群。
    u=0⇒∥u∥=0⇒similarity is undefined\mathbf{u} = \mathbf{0} \Rightarrow \|\mathbf{u}\| = 0 \Rightarrow \text{similarity is undefined}

基于内容推荐:用画像弥补行为

小冷开始想别的办法。虽然不认识这位新客人,但他发现客人穿着运动鞋、背着相机、说话时总提到“登山”。于是小冷鼓起勇气推荐了一杯冷萃咖啡——因为这种咖啡口感清爽,像山里的泉水。客人眼前一亮:“你怎么知道我喜欢这个!”

这就是基于内容的推荐。它不依赖用户的历史行为,而是从两个维度构建特征:一是用户画像,描述“这个人喜欢什么”;二是物品特征,描述“这个东西像什么”。两者做相似度计算,就能在没有行为数据的情况下对物品打一个“匹配分”。

把用户画像视为向量 $\mathbf{w}_u$,物品特征视为向量 $\mathbf{f}_i$,维度 $d$ 是所有特征标签的数量(如“清爽”“醇厚”“果香”)。余弦相似度是常用的匹配分数:

这就像小冷在心里给客人画了一张“口味画像”,又给每杯咖啡贴了一张“风味标签”。画像和标签越接近,推荐越可能命中。基于内容推荐让新用户不再无解,因为画像可以来自注册时填写的兴趣,而不是行为历史。

sim(u,i)=∑k=1dwuk⋅fik∑k=1dwuk2⋅∑k=1dfik2\text{sim}(u, i) = \frac{\sum_{k=1}^{d} w_{uk} \cdot f_{ik}}{\sqrt{\sum_{k=1}^{d} w_{uk}^{2}} \cdot \sqrt{\sum_{k=1}^{d} f_{ik}^{2}}}
  1. $w_{uk}$用户 $u$ 在特征 $k$ 上的偏好权重,值越大说明越喜欢这类特征。
    wukw_{uk}
  2. $f_{ik}$物品 $i$ 在特征 $k$ 上的属性值,例如“果香”标签为 0.8,没有“苦涩”标签则为 0。
    fikf_{ik}
  3. $\sum_{k=1}^{d} w_{uk} \cdot f_{ik}$逐维相乘再求和,得到两向量未归一化的方向一致性。
    ∑k=1dwuk⋅fik\sum_{k=1}^{d} w_{uk} \cdot f_{ik}
  4. $\sqrt{\sum_{k=1}^{d} w_{uk}^{2}}$用户向量的长度,用于把向量“缩”到单位尺度。
    ∑k=1dwuk2\sqrt{\sum_{k=1}^{d} w_{uk}^{2}}
  5. $\sqrt{\sum_{k=1}^{d} f_{ik}^{2}}$物品向量的长度,作用同上。
    ∑k=1dfik2\sqrt{\sum_{k=1}^{d} f_{ik}^{2}}
  6. 整体比值最终余弦值落在 $[-1,1]$,内容特征非负时落在 $[0,1]$,越接近 1 匹配越好。
    ∑k=1dwuk⋅fik∑k=1dwuk2⋅∑k=1dfik2\frac{\sum_{k=1}^{d} w_{uk} \cdot f_{ik}}{\sqrt{\sum_{k=1}^{d} w_{uk}^{2}} \cdot \sqrt{\sum_{k=1}^{d} f_{ik}^{2}}}

混合推荐策略:多种信号组合出击

小冷发现,光靠画像推荐也有问题:新客人说他喜欢“清爽”,但清爽的咖啡有几十种,他到底爱哪种?这时候老客人说了一句“可以都试一点”。小冷突然明白——把多种线索结合起来,比单打独斗更稳。

这就是混合推荐策略。工程上常用的有三种:加权混合,把不同算法的得分按权重相加;切换混合,根据数据量决定用哪种算法,比如新用户用内容推荐、老用户用协同过滤;层混式混合,先做热门召回,再用个性化精排,层层递进。

加权混合是最直观的。设 $\hat{r}^{\text{CF}}_{ui}$ 是协同过滤给出的预测分,$\hat{r}^{\text{CB}}_{ui}$ 是基于内容给出的预测分,则最终得分为:

其中 $\alpha \in [0,1]$ 是权重。冷启动阶段行为数据少,$\alpha$ 调小;行为逐渐积累后 $\alpha$ 调大,让协同过滤逐步接手。

小冷从此有了一个“推荐小分队”:画像线索负责猜偏好,热门榜单负责兜底,老客人的相似行为负责补细节。三种信号合在一起,即使某个信号失灵,其他信号也能顶上。

r^ui=α⋅r^uiCF+(1−α)⋅r^uiCB\hat{r}_{ui} = \alpha \cdot \hat{r}^{\text{CF}}_{ui} + (1 - \alpha) \cdot \hat{r}^{\text{CB}}_{ui}
  1. $\hat{r}^{\text{CF}}_{ui}$协同过滤给出的预测打分,来源于相似用户的行为聚合。
    r^uiCF\hat{r}^{\text{CF}}_{ui}
  2. $\hat{r}^{\text{CB}}_{ui}$内容推荐给出的预测打分,来源于画像与物品特征的相似度。
    r^uiCB\hat{r}^{\text{CB}}_{ui}
  3. $\alpha$权重系数,范围 $[0,1]$,决定两个来源各占多少比例。
    α\alpha
  4. 加权求和$\alpha=1$ 时退化为纯协同过滤,$\alpha=0$ 时退化为纯内容推荐,中间值让二者互相补位。
    α⋅r^uiCF+(1−α)⋅r^uiCB\alpha \cdot \hat{r}^{\text{CF}}_{ui} + (1 - \alpha) \cdot \hat{r}^{\text{CB}}_{ui}

冷启动引导方案:变“猜”为“问+观察”

光靠观察不够准确,小冷干脆主动出击。他在吧台上放了一张小卡片:“您喜欢偏酸还是偏苦?喜欢奶咖还是黑咖?请勾选。”客人随手一勾,小冷心里就有谱了。等客人喝完咖啡,小冷又偷偷记下“杯子见底了,应该喜欢”。

产品上对应的做法是冷启动引导方案。第一个是兴趣选择页:新用户注册后先看到一组标签云,点选感兴趣的类别,系统用这组标签初始化用户画像。第二个是实时反馈收集:用户对推荐结果的点击、停留、跳过都是隐式信号,持续流入模型。第三个是增量更新:画像不必等隔天的批处理,而是用小批量数据实时刷新。

我们可以用“置信度加权”来融合初始先验和实时反馈。设 $p_0$ 是兴趣选择页给出的初始偏好,$w_0$ 是先验权重;后续每条反馈 $j$ 提供观察值 $p_j$ 和置信权重 $w_j$。更新后的偏好为:

小冷把小卡片收回来,把“勾选结果”和“喝到见底”这两份证据按可信度加权:勾选是 3 分信任,喝到见底是 1 分信任,加起来一比,客人的口味轮廓就越来越清晰。引导方案的本质,是把“猜”变成“问 + 观察”。

p^u=w0⋅p0+∑j=1mwj⋅pjw0+∑j=1mwj\hat{p}_{u} = \frac{w_0 \cdot p_0 + \sum_{j=1}^{m} w_j \cdot p_j}{w_0 + \sum_{j=1}^{m} w_j}
  1. $p_0$初始先验得分,例如兴趣页选择了“科幻”,则该标签获得一个初始正分。
    p0p_0
  2. $w_0$先验的权重,控制先验的强度,通常取一个大于 0 的常数。
    w0w_0
  3. $p_j$第 $j$ 条实时反馈的观察值,比如用户点击了科幻电影,则该类型得正分。
    pjp_j
  4. $w_j$第 $j$ 条反馈的置信权重,购买比点击权重更大,搜索比浏览权重更大。
    wjw_j
  5. 分母归一所有权重求和,把结果拉回加权平均的尺度,避免反馈条数无限累积导致画像暴涨。
    w0+∑j=1mwjw_0 + \sum_{j=1}^{m} w_j

热门物品兜底:过渡期的安全牌

当然,还有最后一招。遇到实在不愿填卡片的客人,小冷就把店里卖得最好的招牌拿铁端出来。十个人里有六个都点过它,哪怕猜不透个性,这个选择也不至于让人失望。

这就是热门物品兜底。在推荐系统里,新用户的第一屏往往先给出热门榜——它基于统计而非个性化,因此不需要行为数据。但热门只能用来“过渡”,不能永远依赖,否则就失去了推荐的个性化价值。工程上还会结合探索与利用策略,以及多样性插队,在热门中加入不同类型的内容。

热门得分可以用归一化浏览次数描述。设 $N_i$ 为物品 $i$ 的交互次数,$\max_{j \in I} N_j$ 为所有物品交互次数的最大值,则:

热门得分最高的物品为 1,其余按比例落在 $(0,1)$。注意,新物品的 $N_i = 0$,热门分也为 0,所以热门兜底主要服务于新用户;新物品要借助基于内容的特征匹配来获得第一批曝光。

招牌拿铁先让客人“不踩雷”,等小冷摸清客人喜好之后,再慢慢换上有针对性的手冲单品。热门兜底不是终点,而是一座桥——把新用户从“零记录”平滑地送到“有画像”的彼岸。

Hot(i)=Nimax⁡j∈INj\text{Hot}(i) = \frac{N_{i}}{\max_{j \in I} N_{j}}
  1. $N_i$物品 $i$ 获得的交互次数,如浏览、收藏、购买的总和。
    NiN_i
  2. $\max_{j \in I} N_j$所有物品中交互次数的最大值,作为归一化基准。
    max⁡j∈INj\max_{j \in I} N_j
  3. $\frac{N_{i}}{\max_{j \in I} N_{j}}$物品热度相对于最火爆物品的比例,范围 $[0,1]$。
    Nimax⁡j∈INj\frac{N_{i}}{\max_{j \in I} N_{j}}
  4. $N_i = 0$ 的场景新物品尚未获得交互,热门分为 0,因此需要其他策略补充。
    Ni=0N_i = 0

AI 应用场景

短视频平台的新用户冷启动

阶段:召回到排序之间的策略层

解决的问题:短视频平台每天新增大量注册用户,这些用户没有点击、关注、完播记录,纯协同过滤无法生成个性化推荐流。若冷启动阶段刷到的内容不感兴趣,用户会立即流失。

具体案例:新用户用手机号登录后,系统弹出兴趣选择页,点选“萌宠、美食、汽车”等标签;随后首屏推荐流由 20% 热门短视频 + 80% 标签匹配视频混合生成;用户每滑动一次,模型用“完播 + 点赞”信号实时更新画像,24 小时内逐步过渡到完全个性化推荐。

电商平台的新品推荐

阶段:供给端冷启动策略

解决的问题:商家每天上传大量新品,新品没有销量和评论,协同过滤的“相似物品”相似度为 0,商品几乎没有曝光机会,也无法进入协同过滤召回池。

具体案例:商品上架时自动提取类目、标题、属性标签(如“连衣裙、法式、茶歇裙”);系统将新品与已有高口碑相似商品的用户画像做匹配,推送给偏好法式风格的人群;同时新品获得一个初始热门加权分,在搜索结果中拥有基础曝光位。

音乐 App 的冷启动过渡

阶段:个性化推荐的兜底策略

解决的问题:音乐库中大量独立音乐人新曲无人问津,而新用户对社区陌生的曲风没有依赖,需要既保证基础体验,又带来惊喜感。

具体案例:新用户注册后,首屏是“全站热歌榜”与“根据年龄和城市猜你喜欢”的混合推荐;用户切歌时,模型采集跳过信号提高风格权重;新上架歌曲通过热度因子 + 内容标签双路召回进入候选池,再与用户画像做精排,实现从热门兜底到个性化引导的自然过渡。

Python 演示

python80 行
"""冷启动推荐策略演示模拟一个小型电影推荐系统, 对比三种策略:1) 纯协同过滤 - 新用户无历史数据时直接失败2) 基于内容推荐 - 利用注册画像获得初始推荐3) 混合推荐 - 内容匹配 + 热门兜底, 效果最稳"""  class ColdStartRecommender:    """结合内容相似度与热门度的冷启动推荐器"""     def __init__(self, items, user_profiles, interactions):        self.items = items                  # [{ "id": 1, "tags": ["科幻", "动作"] }]        self.user_profiles = user_profiles  # {1: {"科幻": 0.8, "喜剧": 0.6}}        self.interactions = interactions    # {1: [2, 5], 2: [1, 3]}        self._hot = self._calc_hot()     def _calc_hot(self):        """计算每个物品的流行度得分, 归一化到 [0, 1]"""        cnt = {}        for uid, ids in self.interactions.items():            for iid in ids:                cnt[iid] = cnt.get(iid, 0) + 1        mx = max(cnt.values()) if cnt else 1        return {iid: v / mx for iid, v in cnt.items()}     def _content_score(self, tags, profile):        """用户画像与物品标签的平均匹配分, 无标签返回 0"""        if not tags:            return 0.0        return sum(profile.get(t, 0.0) for t in tags) / len(tags)     def recommend_new_user(self, profile, k=5):        """新用户: 内容分 0.7 + 热门分 0.3 加权"""        scored = []        for item in self.items:            cs = self._content_score(item["tags"], profile)            hs = self._hot.get(item["id"], 0.0)            scored.append((0.7 * cs + 0.3 * hs, item["id"]))        scored.sort(key=lambda x: -x[0])        return [iid for _, iid in scored[:k]]     def recommend_new_item(self, tags, k=3):        """新物品: 找出画像与新物品标签最匹配的存量用户"""        scored = []        for uid, profile in self.user_profiles.items():            cs = self._content_score(tags, profile)            if cs > 0:                scored.append((cs, uid))        scored.sort(key=lambda x: -x[0])        return [uid for _, uid in scored[:k]]  def main():    items = [        {"id": 1, "tags": ["科幻", "动作"]},        {"id": 2, "tags": ["喜剧", "家庭"]},        {"id": 3, "tags": ["科幻", "悬疑"]},        {"id": 4, "tags": ["纪录片", "历史"]},        {"id": 5, "tags": ["动作", "冒险"]},    ]    profiles = {        1: {"科幻": 0.9, "动作": 0.7},        2: {"喜剧": 0.8, "家庭": 0.6},        3: {"纪录片": 0.7, "历史": 0.8},    }    interactions = {        1: [1, 3, 5],        2: [2],        3: [4],    }    rec = ColdStartRecommender(items, profiles, interactions)    new_user_profile = {"科幻": 0.8, "悬疑": 0.6, "动作": 0.4}    print("新用户推荐:", rec.recommend_new_user(new_user_profile))    print("新物品推荐给:", rec.recommend_new_item(["科幻", "悬疑"]))  if __name__ == "__main__":    main()
目的:用一个小型电影推荐系统演示冷启动三类策略——基于内容推荐、热门兜底和两者加权混合的实现。
  1. self._hot = self._calc_hot()初始化时预计算热门分,相当于咖啡馆先做好“畅销排行”。
  2. cnt[iid] = cnt.get(iid, 0) + 1统计每个物品被交互的次数,遇到没见过的 key 就从 0 开始加。
  3. return {iid: v / mx for iid, v in cnt.items()}除以最大值,把热门分归一化到 [0,1]。
  4. sum(profile.get(t, 0.0) for t in tags) / len(tags)对标签逐个查画像权重后取平均,得到内容匹配分。
  5. scored.append((0.7 * cs + 0.3 * hs, item["id"]))加权混合:内容分占七成,热门分占三成,互补短板。
  6. scored.sort(key=lambda x: -x[0])按总分降序排序,让最匹配的候选排在最前。
  7. if cs > 0:只考虑对新物品标签有偏好的用户,避免把推荐强加给没兴趣的人。

常见误区

误区我以为冷启动就是指系统第一次上线的那个阶段,只要系统跑起来一段时间,冷启动问题就自然消失了,后面不用再管。

正解冷启动是伴随新数据持续出现的现象。产品上线初期是“系统冷启动”最严重,但之后每次大规模拉新、每次商家批量上传新品,都会触发新的局部冷启动。推荐系统需要常驻冷启动策略,而不是一次性修复。就像小冷刚开店时最难,但之后每来一位新客人、每进一批新豆子,他都需要重新“认识”一次。

为何常见:名字里带“启动”二字,很容易让人联想到“开机阶段”,忽略了新用户和新物品持续涌入的动态特性。

误区既然冷启动缺数据,那就让用户把星座、职业、爱好全部填完,这样画像就完整了,推荐也准了。

正解填写成本越高,注册转化率越低,很多用户会在冗长表单前放弃。更优雅的方案是兴趣选择页(只需点几个标签)、第三方授权获取基础画像、用行为反馈增量学习。用低成本信号持续迭代,远胜于一次性高成本采集。小冷要是逼客人填三页问卷,客人早就推门走了。

为何常见:直觉上认为“数据越多越好”,忽略了产品体验和用户流失成本之间的权衡。

误区既然新用户没法算相似度,那就把所有用户的新人阶段都推热门榜,推荐也够用了。

正解热门榜只能提供“不踩雷”的基础体验,但它没有个性化,长期使用会让用户觉得内容单调、缺乏惊喜。正确方式是把热门作为兜底项,与内容匹配、实时反馈、混合策略结合使用,在用户积累数据后逐步降低热门占比。小冷不可能永远只给所有客人端招牌拿铁,那会让店里失去个性。

为何常见:热门推荐在冷启动初期表现很好,容易让人误以为“够用了”,忽视了它天然无个性化的短板。

误区整个用户×物品矩阵只要数据总量大,稀疏度不高,单个新用户少几条行为也没关系,不用专门处理。

正解全局稀疏度只描述宏观密度,冷启动关注的是“个体行或列是否为零”。即使全局稀疏度只有 20%,新用户那一整行依然全是空的,该行内任何相似度计算仍然无法进行。全局数据再大,也无法替代单用户自己的行为记录,就像店里积累了一万条点单记录,也不代表小冷认识那个刚推门进来的客人。

为何常见:人们习惯用统计平均思考,忽略了“零行”这个局部细节,而协同过滤计算的恰恰是某个具体行与具体列。

面试题

Q1. 在推荐系统中,协同过滤的冷启动问题指的是什么?

单选题 · easy

  • A.系统刚启动时服务器响应缓慢
  • B.新用户新物品缺少行为数据← 正确答案
  • C.算法计算复杂度过分高昂
  • D.数据库连接超时返回错误

答案:B。冷启动问题的核心是“没有数据”。协同过滤依赖用户行为计算相似度,而新用户和新物品恰好没有行为,算法无法找到相似人群或相似物品,推荐失效。其余选项属于工程性能或运维问题,与协同过滤的数据缺失本质无关。

Q2. 下列哪个场景属于典型的用户冷启动?

单选题 · easy

  • A.老用户浏览了五十种商品
  • B.新注册用户没有任何浏览记录← 正确答案
  • C.商家一次性上传了一百件新品
  • D.老用户把账号昵称做了修改

答案:B。用户冷启动专指“用户本人没有行为数据”。选项 B 中刚注册的用户没有任何浏览记录,正是标准的新用户冷启动。选项 C 属于物品冷启动(新物品无反馈),选项 A 和 D 都是有历史行为的存量用户,不存在冷启动。

Q3. 基于内容的推荐主要利用了哪些信息?

单选题 · easy

  • A.所有用户的集体行为数据
  • B.用户画像与物品特征数据← 正确答案
  • C.用户之间的社交关系数据
  • D.商品销量排行榜单数据

答案:B。基于内容推荐的核心是“画像-特征匹配”,它不需要目标物品的历史行为,也不需要其他用户的行为。选项 A 是协同过滤的思路,选项 C 是社交推荐的思路,选项 D 是热门兜底的思路,都与内容匹配不同。

Q4. 混合推荐中“加权混合”的核心思想是什么?

单选题 · mid

  • A.随机选取某一算法的最终结果
  • B.给不同算法的打分赋予权重后合并← 正确答案
  • C.只保留热门物品的推荐结果
  • D.强制用户手动挑选推荐算法

答案:B。加权混合的思路是把多个算法的预测分按权重相加,例如 α×协同过滤分 + (1-α)×内容推荐分,权重可随数据积累动态调整。随机选取、只保留热门、让用户选算法都不属于加权混合。

Q5. 以下哪些方案可以缓解协同过滤的冷启动问题?

多选题 · mid

  • A.基于内容的物品特征匹配← 正确答案
  • B.混合推荐策略的多种组合← 正确答案
  • C.兴趣选择页面主动引导用户← 正确答案
  • D.禁止新用户使用推荐功能

答案:ABC。选项 A 用物品特征弥补行为缺失,选项 B 混合多种策略取长补短,选项 C 主动收集用户偏好,这些都是公开的冷启动解法。选项 D 禁止新用户用推荐功能属于反操作,只会让产品彻底失去新用户,无法缓解冷启动。

Q6. 冷启动阶段主动引导用户的好处有哪些?

多选题 · mid

  • A.快速获取用户偏好信息← 正确答案
  • B.缩短冷启动过渡周期← 正确答案
  • C.提升推荐列表准确率← 正确答案
  • D.彻底消除所有数据稀疏

答案:ABC。主动引导通过兴趣选择页和实时反馈快速构建画像,能明显缩短冷启动周期并提升准确率。但选项 D 说“彻底消除稀疏”过于绝对,交互矩阵在任何系统中都不可能完全稠密,稀疏是常态而非一次性可解决的问题。

Q7. 两个特征向量的余弦相似度,其数值范围是?

单选题 · mid

  • A.属于闭区间负一到正一← 正确答案
  • B.属于开区间零到正无穷
  • C.只能取非负的整数数值
  • D.位于正负零点五区间内

答案:A。余弦相似度定义为两向量夹角的余弦,任何维度下夹角余弦都在 [-1,1]。向量方向相同时为 1,完全相反时为 -1,正交时为 0。选项 B、C、D 都不符合余弦函数的数学值域。

Q8. 交互矩阵中,冷启动用户所在的行有什么特征?

单选题 · hard

  • A.整行数值全部等于零← 正确答案
  • B.整行数值全部等于一
  • C.对角线上元素均为一
  • D.取全体用户的历史均值

答案:A。冷启动用户在交互矩阵中对应的行是全零向量,因为该用户尚未发生任何行为。全零行无法与其他行计算余弦相似度,这正是协同过滤失效的直接原因。选项 B 是“全交互”状态,选项 C 描述的是单位矩阵,选项 D 是统计描述,都与冷启动行特征不符。

Q9. 为什么热门物品推荐能辅助缓解冷启动?

单选题 · hard

  • A.因为热门物品的质量必然最高
  • B.因为流行度提供了先验知识← 正确答案
  • C.因为算法不再需要任何画像
  • D.因为热门推荐不存在计算成本

答案:B。热门推荐依据群体统计给出先验,相当于告诉系统“多数人喜欢什么”,可以作为新用户缺乏个人数据时的默认偏好。但热门不等于质量最高,也不能彻底替代画像,计算成本也并非为零,因此选项 A、C、D 均不成立。

Q10. 关于混合推荐中的动态权重调整,以下说法正确的有?

多选题 · extreme

  • A.数据积累后调高协同过滤权重← 正确答案
  • B.冷启动阶段调高热门兜底权重← 正确答案
  • C.权重更新完全不需要用户行为
  • D.所有策略的权重恒定不变

答案:AB。动态权重的核心是让算法随数据量自我调节:冷启动时行为稀少,内容与热门这类先验信号权重大;行为越积越多,协同过滤这类个性化信号权重逐步上调。因此选项 A、B 正确;选项 C 错误,因为权重变化依赖行为反馈;选项 D 错误,因为“动态”意味着权重会变。