老张在巷口开了家小咖啡店,五年下来,他能准确报出每位熟客的固定订单:小林要冰美式,阿珍要热拿铁……这就像传统协同过滤——通过相似顾客的行为,猜你爱喝什么。可最近老张遇到一件怪事:周五清晨,小林顶着黑眼圈进店,点名要最大杯冰美式;而周日下午,小林陪女朋友来,却对菜单上的桂花拿铁情有独钟。老张恍然大悟:一个人不是只有一张“口味画像”,他早晨要提神、午后陪人、深夜加班,不同情境下的偏好完全不同。于是老张开始记下“谁、在什么时间、什么天气、和谁一起”来点单——这就是上下文感知推荐:在“用户×物品”的基础上,加上“情境”这个第三维,让推荐系统像老张一样,不仅懂你是谁,更懂你此刻。

岗位关联

对 AI 从业者的价值:上下文感知是搜索与推荐系统的进阶必修课,掌握它,你才能从“懂用户”走向“懂用户此刻”,做出真正差异化的推荐体验。

目录
  1. 可视化演示
  2. 一碗面的“看人下菜碟”:概念引入
  3. 四个“情境刻度”:上下文维度
  4. 三种上菜流程:三大建模法
  5. 记得你刚才的偏爱:时间衰减加权
  6. 边看脸色边调整:实时语境调优
  7. 好不好,拿数据说话:工程评估优化
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示上下文感知推荐三大核心:上下文维度(六大维度时间/位置/设备/社交/情绪/历史扩展U×I为U×I×C三元组)、方法分类(预过滤先用上下文筛选数据子集再CF/后过滤先CF再用上下文调整/上下文建模直接融入模型效果最优)、传统vs上下文对比(传统U×I忽略场景上下文感知U×I×C精度提升约25%覆盖率+50%新颖性+75%),三模式切换理解上下文推荐全貌。

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

'+C1+'

一碗面的“看人下菜碟”:概念引入

老张的咖啡店里最珍贵的资产是一本泛黄的笔记本,上面记着每位熟客的点单。五年下来,他练就了“听到脚步声就知道要什么”的本领。可上周五早晨,小林顶着一头乱发进来要最大杯冰美式,下午又挽着女朋友点了杯甜腻的桂花拿铁。老张一愣:同一个小林,怎么判若两人?他翻开笔记,发现答案就写在不同日期的“备注”里——早晨那页写着“赶早会”,下午那页写着“陪女友”。人还是那个人,处境变了,口味就跟着变。

传统协同过滤的做法,是把所有用户的“用户-物品”评分堆成一张大表格,找口味相似的邻居来推荐。它暗暗假设一个人偏好稳定。可现实中,同一用户在清晨与深夜、在公司与在家、独处与结伴时,偏好会剧烈漂移。上下文感知推荐(Context-Aware Recommendation)正是要打破这个假设:它不仅记录“谁喜欢什么”,更记录“在什么情境下喜欢什么”,把推荐从“懂用户”升级为“懂用户此刻”。

形式上,传统协同过滤的数据是二维矩阵 R,上下文感知推荐把它扩展成三维张量:用户、物品、情境各占一维。情境集合 C 的每个取值 c,都对应一张“该情境下的评分矩阵”。预测某用户在某情境下对某物品的态度,就是在这个数据立方体里做切分或插值。

老张的笔记本从此多了一列“场景备注”。他不再只回答“小林爱喝什么”,而是回答“小林在这种处境下爱喝什么”。答案不同,端上来的咖啡自然不同——这就是上下文感知推荐的起点。

R∈R∣U∣×∣I∣×∣C∣R \in \mathbb{R}^{|U| \times |I| \times |C|}
推荐数据从一张“用户×物品”的平面表格,长成了“用户×物品×情境”的立体仓库,每个情境一格货架。
  1. 三个集合U 是用户集合,I 是物品集合,C 是情境集合(如时段、地点、天气)。
    R∣U∣×∣I∣×∣C∣\mathbb{R}^{|U| \times |I| \times |C|}
  2. 张量维度R 是三维张量,每个分量表示某用户在某个情境下对某物品的打分强度。
    R∈R∣U∣×∣I∣×∣C∣R \in \mathbb{R}^{|U| \times |I| \times |C|}
  3. 切片含义固定情境 c,取一个切片,就回到一张“情境 c 下的协同过滤表”。
    R:,:,c∈R∣U∣×∣I∣R_{:,:,c} \in \mathbb{R}^{|U| \times |I|}

四个“情境刻度”:上下文维度

老张琢磨:到底该记哪些“场景备注”?他先试着记天气,结果发现晴天雨天对小林的选择没什么影响;又试着记星期几,发现工作日和周末差别巨大。于是他的笔记本上真正留下来四个刻度:星期几、几点、和谁一起、忙不忙。

学术上,上下文维度大致可分四类。时间:时刻、星期、季节、节假日;地点:家、公司、通勤路、旅行地;设备与状态:手机还是电脑、网速快慢、是否在运动中;社交与情绪:独处还是结伴、心情好坏、天气冷暖。同一个用户,在“周末午后+在家+独处”与“工作日晚上+通勤+赶时间”两种情境下,想要的几乎是两个完全不同的商品集合。

上下文还可以分显式与隐式:显式由用户主动告知(如“我想听助眠音乐”),隐式由系统推测(从定位、传感器、行为轨迹推断)。维度选择并非越多越好——情境切得越细,每个切片里的数据越少。工程上常用轻量化的办法:把情境编码成一个元组,供后续建模使用。

老张最终只保留四个刻度,因为他发现“记录越简单,越能坚持”。维度取舍本身就是工程智慧:把力气花在影响最大的那几类情境变量上,而不是贪多求全。

c=(ttime, lloc, ddev, ssoc)c = (t_{\text{time}},\, l_{\text{loc}},\, d_{\text{dev}},\, s_{\text{soc}})
一个情境由“时间、地点、设备、社交”四个分量拼成,就像老张笔记本上那四列备注。
  1. 四个分量t 时间、l 地点、d 设备、s 社交状况,各自取离散或连续的值。
    ttime, lloc, ddev, ssoct_{\text{time}},\ l_{\text{loc}},\ d_{\text{dev}},\ s_{\text{soc}}
  2. 组合成元组四个分量拼成一个情境标签 c,系统按这个标签区分“不同的处境”。
    c=( ttime, lloc, ddev, ssoc )c = (\,t_{\text{time}},\, l_{\text{loc}},\, d_{\text{dev}},\, s_{\text{soc}}\,)
  3. 粒度控制分量越粗(如“上午/下午”),数据越稠密;越细(如精确到小时),数据越稀疏,需要权衡取舍。
    slot(h)=⌊h6⌋,h∈[0,24)\text{slot}(h) = \left\lfloor \frac{h}{6} \right\rfloor, \quad h \in [0, 24)

三种上菜流程:三大建模法

有了情境数据,怎么用?老张想出了三种上菜方式。第一种:看客下单前先翻对季节——清晨只翻早餐菜单(预过滤);第二种:先按老口味上一轮,再根据眼前情境换掉不合时宜的(后过滤);第三种:把“星期几、几点、和谁”直接写进配方,跟咖啡豆一起磨(语境建模)。

预过滤(Pre-filtering)在进入协同过滤之前,先按目标情境 c 把数据切出来,只用情境 c 下的历史记录做相似度计算和打分。优点是与现成协同过滤算法无缝对接;缺点是情境切得越细数据越少,容易冷启动。后过滤(Post-filtering)先用传统协同过滤算出候选列表,再用情境规则或情境模型对列表重排、过滤。实现灵活、多样性好;但两步优化目标可能不一致。

语境建模(Contextual Modeling)把情境作为特征直接塞进模型,与用户、物品一起联合学习。典型代表是张量分解(Tensor Factorization),把三维张量分解成用户、物品、情境三个因子矩阵;现代深度模型则把情境向量做 embedding 拼接。预过滤的数学本质是对情境切片做条件平均:

老张三种方式都试过:预过滤像“分菜单”,简单可靠但怕淡季没客;后过滤像“端上来再换”,灵活但偶尔手忙脚乱;语境建模像“定制配方”,最聪明也最费心思。真正上手的店,往往是三者混用。

r^u,i c=1∣Nu,i c∣∑r∈Nu,i cr\hat{r}_{u,i}^{\,c} = \frac{1}{|\mathcal{N}_{u,i}^{\,c}|} \sum_{r \in \mathcal{N}_{u,i}^{\,c}} r
预过滤法在情境 c 下,直接用该情境里用户 u 对物品 i 的历史评分取平均,作为预测分。
  1. 情境切片\mathcal{N}_{u,i}^{\,c} 表示“情境 c 下用户 u 对物品 i 的所有历史评分”这个集合。
    Nu,i c={ r∣user=u, item=i, ctx=c }\mathcal{N}_{u,i}^{\,c} = \{\, r \mid \text{user}=u,\ \text{item}=i,\ \text{ctx}=c \,\}
  2. 求和把这些评分全部加起来,得到总贡献。
    ∑r∈Nu,i cr\sum_{r \in \mathcal{N}_{u,i}^{\,c}} r
  3. 取平均除以评分数量,得到该情境下的条件平均分。
    r^u,i c=1∣Nu,i c∣∑r∈Nu,i cr\hat{r}_{u,i}^{\,c} = \frac{1}{|\mathcal{N}_{u,i}^{\,c}|} \sum_{r \in \mathcal{N}_{u,i}^{\,c}} r

记得你刚才的偏爱:时间衰减加权

老张记账时发现一个规律:小林上周连着三天点燕麦拿铁,这个信号比他半年前爱喝焦糖玛奇朵有价值得多。人的口味会漂移,越近的历史越能代表现在的偏好。于是老张给每笔旧账“打折扣”——越久远,参考价值越低。

时间是最特殊、最普适的上下文:它不增加稀疏性(人人都有时间戳),却能显著提升推荐的时效性。工程上最常用的折扣函数是指数衰减,权重随间隔时长的指数衰减,由参数 λ 控制快慢。加权平均后,预测分更贴近“最近的状态”:

λ 怎么定?老张的直觉是:“常客一周来三次,隔一个月就该打折。”做会话推荐时,几分钟前的点击比一小时前的浏览重要得多,λ 要调大;λ 太小等于没加时间上下文,λ 太大长期偏好又被抹光。调参的过程,就是老张在“记性”与“善忘”之间找平衡。

r^u,i=∑k=1Ke−λ(tnow−tk)⋅ru,i,k∑k=1Ke−λ(tnow−tk)\hat{r}_{u,i} = \frac{\sum_{k=1}^{K} e^{-\lambda (t_{\text{now}} - t_k)} \cdot r_{u,i,k}}{\sum_{k=1}^{K} e^{-\lambda (t_{\text{now}} - t_k)}}
对用户 u 关于物品 i 的历史 K 次交互,按距离现在的时长打指数折扣,再求加权平均:最近的记录权重最大。
  1. 计算时间差先求当前时刻与每条历史记录时刻的间隔。
    Δtk=tnow−tk\Delta t_k = t_{\text{now}} - t_k
  2. 指数衰减权重对间隔取指数衰减,得到 0 到 1 之间的权重。
    wk=e−λΔtkw_k = e^{-\lambda \Delta t_k}
  3. 加权求和每条历史评分乘以各自权重后累加,作为分子。
    numerator=∑k=1Kwk⋅ru,i,k\text{numerator} = \sum_{k=1}^{K} w_k \cdot r_{u,i,k}
  4. 权重的归一化把所有权重加起来作为分母,保证结果仍是评分量纲的平均值。
    denominator=∑k=1Kwk\text{denominator} = \sum_{k=1}^{K} w_k
  5. 预测分分子除以分母,得到时间衰减后的加权平均分。
    r^u,i=∑k=1Kwk⋅ru,i,k∑k=1Kwk\hat{r}_{u,i} = \frac{\sum_{k=1}^{K} w_k \cdot r_{u,i,k}}{\sum_{k=1}^{K} w_k}

边看脸色边调整:实时语境调优

老张最得意的手艺是“察言观色”:小林说“随便来一杯”,但眼睛瞟着冷萃区,老张就端上冷萃;他喝了一口皱眉,老张立刻心虚地解释“今天豆子换了一批”。推荐也一样,不能只做“下单前的一次预测”,还要根据实时反馈不断校正。

实时反馈信号包括点击、停留时长、滑走、加购、支付、退单。用户每出现一个新行为,系统就获得一条新的情境化训练样本。工业界常用的做法是在线学习(Online Learning):模型不重新全量训练,而是沿着损失函数的梯度走一小步,逐步逼近当前情境下的最优参数。

情境切换也是实时调优的难点:用户午休刷手机和深夜躺床上,场景截然不同。系统要能感知切换信号(时段变化、位置移动、设备切换),并平滑过渡——而不是突然把推荐列表完全换掉,让用户摸不着头脑。老张的总结是:实时调优不是“每次都推翻重来”,而是“小步快跑地修正”。

θt+1=θt−η ∇θL(θt; ct)\theta_{t+1} = \theta_t - \eta \, \nabla_{\theta} \mathcal{L}(\theta_t;\, c_t)
每来一条“此刻情境 c_t”下的反馈,就用它的梯度给参数做一次小幅度修正——像老张每次听到一句抱怨,就悄悄调整一次配方。
  1. 损失函数\mathcal{L}(\theta_t; c_t) 衡量在当前参数下,情境 c_t 这条新样本的预测误差,误差越大说明模型越“看不懂此刻”。
    L(θt; ct)\mathcal{L}(\theta_t;\, c_t)
  2. 梯度方向\nabla_\theta \mathcal{L} 指出参数往哪个方向调整能让误差下降最快。
    ∇θL(θt; ct)\nabla_{\theta} \mathcal{L}(\theta_t;\, c_t)
  3. 学习率\eta 控制每次调整的步长,太大容易乱抖,太小反应太慢。
    η∈(0,1)\eta \in (0, 1)
  4. 参数更新沿负梯度方向走一小步,得到新参数,模型更贴合当前情境。
    θt+1=θt−η ∇θL(θt; ct)\theta_{t+1} = \theta_t - \eta \, \nabla_{\theta} \mathcal{L}(\theta_t;\, c_t)

好不好,拿数据说话:工程评估优化

老张怎么判断“分菜单”策略到底有没有用?光凭印象不靠谱。他的做法是:翻旧账本,算回头客率和满意度;再挑一个月做实验,工作日一半用新菜单、一半用旧菜单,月末对比营业额。这就是评估,推荐系统也一样。

推荐系统的评估分两步。离线评测在历史数据上回放,计算排序质量指标,如 NDCG、AUC、召回率。NDCG 的核心思想是:相关的东西排得越靠前,得分越高,且位置越靠后扣分越重。离线评测快、成本低,适合粗筛候选方案。

第二步是在线评估:在真实流量上做 A/B 实验,用户随机分桶,一组看新算法、一组看旧算法,对比点击率、转化率、人均时长、留存。冷启动与上下文交织时,默认策略是“降级兜底”:新用户缺情境历史,就先用全量热门加最粗粒度情境(如只按时段)推荐,数据积累后再逐步细化。评估不是一次性动作,而是推荐系统持续进化的仪表盘。

NDCG@K=DCG@KIDCG@K,DCG@K=∑k=1K2relk−1log⁡2(k+1)\text{NDCG}@K = \frac{\text{DCG}@K}{\text{IDCG}@K}, \qquad \text{DCG}@K = \sum_{k=1}^{K} \frac{2^{\text{rel}_k} - 1}{\log_2(k+1)}
DCG 按位置折减相关性得分,IDCG 是完美排序下的 DCG,两者相除得到 0 到 1 的 NDCG——越接近 1 说明排序越理想。
  1. 相关性得分rel_k 是排序第 k 位物品与用户的相关性等级(0/1/2…)。
    relk∈{0,1,2,… }\text{rel}_k \in \{0, 1, 2, \dots\}
  2. 位置折减除以 log_2(k+1),排得越靠后的相关物品贡献越小。
    2relk−1log⁡2(k+1)\frac{2^{\text{rel}_k} - 1}{\log_2(k+1)}
  3. DCG 累加把前 K 个位置的折减贡献累加起来。
    DCG@K=∑k=1K2relk−1log⁡2(k+1)\text{DCG}@K = \sum_{k=1}^{K} \frac{2^{\text{rel}_k} - 1}{\log_2(k+1)}
  4. 归一化除以理想排序 IDCG,消除列表长度差异,便于跨模型比较。
    NDCG@K=DCG@KIDCG@K\text{NDCG}@K = \frac{\text{DCG}@K}{\text{IDCG}@K}

AI 应用场景

外卖平台的“时段×地点”情境推荐

阶段:召回排序阶段的情境化处理

解决的问题:同一用户早餐想吃包子、深夜想吃烧烤,静态画像只会给出“他爱吃的”而不是“他此刻想吃的”。传统协同过滤把不同场景的行为混在一起,导致推荐“时对时不对”。引入时间与地点上下文后,候选召回与重排都按情境切分,点击率显著提升。

具体案例:美团、饿了么在早午晚时段切换首页“猜你喜欢”的类目侧重;深夜 23 点后自动加重夜宵、超市便利的曝光,并结合设备移动速度信号判断用户是否在打车途中,优先推荐可外带的轻食。

音乐App的场景歌单

阶段:召回与情境联合建模

解决的问题:传统协同过滤把“通勤时爱听什么”和“睡前爱听什么”混为一谈,用户觉得推荐“时而惊艳时而翻车”。采用语境建模,把运动状态(步频、GPS)、时段、设备类型作为特征与用户、歌曲联合学习。

具体案例:Spotify 的“场景歌单”与网易云音乐的“跑步电台”:晨跑时推送 170 BPM 的节奏歌单,深夜自动切到轻柔助眠曲;用户从耳机切换到车载音响时,推荐列表平滑过渡到更轻快、更适合驾驶的内容。

电商大促的实时情境调优

阶段:在线学习与在线评估

解决的问题:大促期间流量剧烈波动,用户的“此刻”转化意图变化极快,离线训练好的模型跟不上节奏。需要在线学习按实时行为梯度更新参数,并用 A/B 实验验证每一次策略改动是否真正带来收益。

具体案例:双十一预热期,系统根据用户刚点的会场、刚领的券、当前所在时段,实时调整商品排序与优惠券曝光顺序;同时在 20% 流量上跑新策略对比,用转化率与客单价决定是否全量上线。

Python 演示

python53 行
import mathfrom collections import defaultdict  def time_weight(now_ts, old_ts, lam):    """指数时间衰减: 时间差越大, 权重越小"""    return math.exp(-lam * max(now_ts - old_ts, 0))  class ContextAwareRecommender:    """极简上下文感知推荐器: 预过滤 + 时间衰减"""     def __init__(self):        self.logs = []        self.context_map = defaultdict(list)     def fit(self, logs):        self.logs = logs        for user, item, context, ts, rating in logs:            self.context_map[context].append((user, item, ts, rating))     def predict(self, user, item, context, now_ts, lam=0.01):        pool = self.context_map.get(context, [])        total_w = 0.0        total = 0.0        for u, i, ts, r in pool:            if u == user and i == item:                w = time_weight(now_ts, ts, lam)                total_w += w                total += w * r        if total_w == 0:            return 0.0        return total / total_w  def main():    logs = [        ("XiaoMing", "Americano", "morning", 100, 5),        ("XiaoMing", "Latte", "afternoon", 200, 3),        ("XiaoMing", "Americano", "morning", 300, 4),        ("XiaoLi", "Americano", "morning", 150, 4),        ("XiaoLi", "ColdBrew", "afternoon", 250, 5),        ("XiaoMing", "ColdBrew", "afternoon", 400, 4),    ]    rec = ContextAwareRecommender()    rec.fit(logs)    for context in ["morning", "afternoon"]:        score = rec.predict("XiaoMing", "Americano", context, 500)        print(context, round(score, 2))  if __name__ == "__main__":    main()
目的:用一个极简的“预过滤 + 时间衰减”推荐器,演示上下文感知推荐如何让同一用户在不同情境下得到不同的预测分。
  1. return math.exp(-lam * max(now_ts - old_ts, 0))把时间差映射成 0 到 1 的权重,越近越接近 1,越久远越趋近 0。
  2. self.context_map[context].append((user, item, ts, rating))把每条历史记录按情境归档,相当于老张的“分账本”。
  3. pool = self.context_map.get(context, [])预测时只取当前情境那一本账,这就是预过滤的数学动作。
  4. w = time_weight(now_ts, ts, lam)给每个历史评分按时间打折,让“上周的喜好”胜过“半年前的口味”。
  5. total += w * r` 与 `return total / total_w加权求和后除以权重和,归一化得到最终预测分。

常见误区

误区上下文感知不就是多喂几个特征吗?把用户的性别、年龄、职业一股脑加进模型,就是上下文感知推荐了。

正解上下文指“随处境变化的外部信号”,而性别年龄是静态画像。老张会区分两件事:记住你是谁(画像),与判断你此刻在什么场景(情境)。静态特征进模型只是特征工程;上下文感知的核心是动态情境对偏好的调节作用,并且通常需要用预过滤、后过滤或语境建模等特定方式建模,而不是简单拼接字段。

为何常见:学过特征工程的人常有“特征越多越好”的直觉,没意识到上下文是随时间变化的第三方维度,用法完全不同。

误区时间、地点、天气、同伴、心情全都要记录,维度越丰富,推荐越聪明。

正解维度越多,数据被切得越碎——每个情境切片里样本越少,模型越稀疏、越难学。老张最终只记“星期几、几点、和谁来”三个刻度,其余噪音忽略。工程上要做维度与粒度的取舍:只保留与业务结果相关性高、采集成本可接受的情境变量。

为何常见:追求全量信息是直觉反应,但忽略了数据稀疏性与存储计算成本,属于“贪多嚼不烂”。

误区时间衰减让近期数据权重更大,那 λ 设得越大,系统越灵敏、越贴合用户当下口味。

正解λ 过大等于只记得最近几小时,长期偏好被彻底抹掉——用户昨天爱喝的口味被忘光,推荐只会跟着最近一次点击剧烈摆动;λ 过小又形同虚设。正确做法是按业务频率调参:会话内推荐 λ 大,跨月偏好建模 λ 小,甚至用分段衰减。

为何常见:把“灵敏”简单等同于“好”,没看到过度拟合瞬时偏好的风险。

误区离线评测分数提升,说明推荐算法变好了,直接全量上线就行。

正解离线指标(AUC/NDCG)只反映排序质量的粗方向,上线后还要看点击率、转化率、留存等真实业务指标。老张也不会只看“点单率高”就换菜单,还要看顾客是否真买账、是否流失。必须用 A/B 实验在真实流量上验证,并持续监控,才能确认收益。

为何常见:离线评测省时省力,容易让人忽略线上环境的反馈、延迟与各种干扰因素。

面试题

Q1. 上下文感知推荐相比传统协同过滤,最主要区别是什么?

单选题 · easy

  • A.使用了用户的性别年龄信息
  • B.加入了情境维度的信息← 正确答案
  • C.只使用物品之间的相似度
  • D.不再需要用户的历史行为

答案:B。上下文感知推荐在“用户×物品”基础上增加情境维度的信息,利用时间、地点等动态情境调整推荐;传统协同过滤只看历史行为与相似用户。性别年龄属于静态画像而非情境,因此 B 正确。

Q2. 在预过滤方法中,推荐系统首先做什么?

单选题 · easy

  • A.先推荐再根据情境重排
  • B.直接对所有物品统一打分
  • C.先筛选出当前情境的数据← 正确答案
  • D.忽略情境信息直接进行推荐

答案:C。预过滤的“预”指在协同过滤打分之前,先按当前情境切分数据,只用同情境的历史记录。先推荐再重排属于后过滤。就像老张先翻对“清晨菜单”再选饮品。

Q3. 以下哪些属于上下文信息的典型维度?

多选题 · mid

  • A.用户的性别与年龄层次
  • B.当前的时间与所处位置← 正确答案
  • C.使用的设备和网络状况← 正确答案
  • D.用户注册时填写的年龄

答案:BC。上下文是随处境变化的信号,时间和位置、设备与网络都是典型情境维度;性别年龄、注册信息是稳定静态画像,不属于上下文。老张笔记里的“星期几、几点”正是会变的那一类。

Q4. 后过滤方法与预过滤方法的主要差异是什么?

单选题 · easy

  • A.情境过滤发生在推荐之后← 正确答案
  • B.情境过滤发生在推荐之前
  • C.推荐时完全忽略情境信息
  • D.只依赖物品之间的相似度

答案:A。后过滤先生成候选推荐,再用情境对列表重排或过滤;预过滤则在打分前切数据。一个“先上菜再换菜”,一个“先看季节再下单”。

Q5. 时间衰减权重 w = e^(-λ·Δt) 中,λ 的作用是什么?

单选题 · mid

  • A.控制历史数据被遗忘的快慢← 正确答案
  • B.调节物品之间的相似程度
  • C.决定用户画像的维度数量
  • D.改变上下文的离散取值

答案:A。λ 控制指数衰减速度,λ 大则历史被快速遗忘,λ 小则长期偏好保留更久。它不调节物品相似度、画像维度或上下文取值,只相当于老张“记性”的调节旋钮。

Q6. 若时间衰减系数 λ 设置得过大,会出现什么现象?

单选题 · hard

  • A.长期偏好被快速遗忘← 正确答案
  • B.推荐结果变得更稳定
  • C.情境影响完全消失
  • D.冷启动问题自动消失

答案:A。λ 过大会让几小时前的行为权重趋近于 0,长期偏好被抹光,推荐只反映最近一瞬间的行为,反而更不稳定,也无法缓解冷启动。好比老张记性太好,把顾客半年的口味全忘光了。

Q7. 下列哪些属于上下文感知推荐的主流建模方法?

多选题 · mid

  • A.先过滤情境再做推荐← 正确答案
  • B.先推荐再做情境过滤← 正确答案
  • C.仅按物品流行度排序
  • D.情境用户物品联合建模← 正确答案

答案:ABD。三大主流方法是预过滤(先筛情境)、后过滤(先推荐再过滤)和语境建模(情境作为特征联合学习)。仅按流行度排序是启发式基线,不属于上下文建模方法。

Q8. 上下文感知推荐在冷启动场景中面临的主要挑战是什么?

单选题 · mid

  • A.新用户缺少情境化历史← 正确答案
  • B.新物品没有价格信息
  • C.服务器算力总是不够
  • D.推荐结果无法解释

答案:A。上下文感知的前提是有情境化的历史数据,新用户恰恰没有,无法按情境切分或建模。价格、算力、解释性都不是冷启动的核心矛盾。老张面对新客时也只能先用“最粗的刻度”试探。

Q9. 在时间衰减的加权平均预测中,分母 Σw 的作用是什么?

单选题 · hard

  • A.让历史权重之和归一化← 正确答案
  • B.放大近期数据的影响力
  • C.消除上下文之间的差异
  • D.代替协同过滤的相似度

答案:A。分子是加权和,分母是权重和,二者相除才是“平均”量纲;若不归一化,评分数值会被整体放大或缩小,无法与基准分比较。就像老张算一周平均营业额,要除以开张天数。

Q10. 评估一个上下文感知推荐系统上线效果的方式包括哪些?

多选题 · mid

  • A.离线数据集上的指标评测← 正确答案
  • B.在线流量中的 A/B 实验← 正确答案
  • C.仅凭开发人员的主观感受
  • D.用户行为反馈的持续监控← 正确答案

答案:ABD。上线评估要多信号交叉验证:离线指标先粗筛方向,A/B 实验在真实流量中验证增量,线上日志持续监控用户反馈。仅凭主观感受不可靠,老张既翻账本又做对照实验,才是可信的做法。