想象你开了一家面馆。刚开始你按自己的口味做了一碗麻辣牛肉面,可端上去后,有的客人吃一半就问怎么不甜,有的客人不停加醋,还有的客人把汤都喝光了。你慢慢学会观察:谁皱了眉头、谁加了调料、谁光盘了。下一次再做面时,你心里就有了数——少放点辣,多点汤,甚至为常客单独准备一碗微辣。搜索引擎也是这样:用户搜“苹果”,点了手机评测还是水果食谱;扫过前两条直接点第三条;停留了十秒还是立刻返回。这些行为都是食客的表情和动作。相关性反馈,就是让搜索引擎像大厨一样,利用用户留下的“反馈”不断调整自己的判断,让每一次搜索都比上一次更懂你。接下来,我们会拆开这套“大厨调整菜谱”的方法——从 Rocchio 算法、隐式反馈、点击模型,到在线学习和落地挑战。

岗位关联

掌握相关性反馈,是搜索/推荐工程师利用用户行为数据、持续优化检索效果的核心技能,为你做个性化搜索、结果重排打下基础。

目录
  1. 可视化演示
  2. 基础概念:反馈是搜索系统的“味觉记忆”
  3. Rocchio算法:把查询向量往正确的方向推
  4. 隐式反馈:用户无意间留下的“口味线索”
  5. 点击模型:从“位置”里读出真实口味
  6. 在线学习:每次反馈都即时微调菜谱
  7. 实践挑战:开连锁店时的统筹与底线
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示Rocchio算法利用相关与无关文档修改查询向量的过程,以及点击模型分离位置偏差推断真实相关性的方法。

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

Rocchio查询修改算法 相关文档向量加权加入查询 无关文档向量从查询中减去 参数αβγ控制各部分影响权重 q\' = α·q + β·(1/|Dr|)Σd - γ·(1/|Dnr|)Σd Rocchio通过相关与无关反馈优化查询向量。

基础概念:反馈是搜索系统的“味觉记忆”

开面馆最怕的是什么?是不知道客人喜不喜欢。你试过把花椒减半,客人多吃了两口;把汤换成牛骨汤,老客户第二天又来了。这些来自餐桌的真实反应,比你自己拍脑袋想一百遍都管用。搜索引擎面临同样的问题:它返回十条结果,却不知道哪条真正满足了用户。

在信息检索里,用户输入查询词,就像食客报出“来一碗面”;搜索引擎返回候选结果,就像大厨端出几碗不同口味的试吃品。用户点了哪条、跳过哪条、在页面上停留多久,都是对这碗面的无声评价。相关性反馈,就是把用户的点击、浏览、标注等信息收集起来,重新调整查询表达或排序模型,让下一次检索更贴近用户真正的需求。

一个完整的检索闭环是这样的:用户提交查询 → 系统召回并排序 → 用户浏览并产生行为 → 系统捕获反馈 → 据此更新查询或模型 → 再次服务用户。这个闭环让搜索不再是一次性的“猜谜”,而是持续进化的系统。用户信号既包括显式的(例如点击“赞”按钮、给结果打分),也包括隐式的(例如点击、停留时长)。它们的共同点在于:都比“重新输入一遍查询词”更真实地体现了用户的偏好。

大厨的调料台摆满了食材,但只有客人的表情才能告诉他该往哪个方向调。相关性反馈就是搜索引擎的“味觉记忆”——每次用户拿起筷子的动作,都在悄悄改写下一份菜单。

Rocchio算法:把查询向量往正确的方向推

大厨改良菜式,不会把旧菜单全扔掉。他会在保留“牛肉面”这个底子的前提下,根据反馈增减调料:好评的菜就把配方往它的方向靠,差评的菜就刻意避开它的味道。Rocchio算法正是这套思路的数学版本。

在向量空间模型中,查询和文档都被表示成一组词项权重的向量,每个维度代表一个词。用户对某篇文档点赞或点击,就是“好评”;跳过或标记不相关,就是“差评”。Rocchio的思想非常直接:让新的查询向量等于“原查询向量 × 保留系数 + 好评文档的平均向量 × 吸引系数 − 差评文档的平均向量 × 排斥系数”。

参数调节很关键:α 太大,反馈几乎不起作用;β 和 γ 太大,少数的误点击就可能带偏整锅汤。实践中,α 通常在 1 附近,β 和 γ 在 0.5~1.5 之间调整,还要根据反馈置信度做归一化。Rocchio 在查询改写和查询扩展中非常经典,很多现代相关反馈算法都从它演化而来。

大厨端出新配方,客人点头了,说明方向对了;但下一次客人换了一批,配方还要再动。Rocchio 给了搜索引擎一个明确的“调味公式”,让每一次调整都有据可依。

q⃗new=αq⃗0+β∣Dr∣∑d⃗∈Drd⃗−γ∣Dnr∣∑d⃗∈Dnrd⃗\vec{q}_{new} = \alpha \vec{q}_0 + \frac{\beta}{|D_r|} \sum_{\vec{d} \in D_r} \vec{d} - \frac{\gamma}{|D_{nr}|} \sum_{\vec{d} \in D_{nr}} \vec{d}
这个公式可以理解为:大厨写下一张新配方,左边是“我原本想做的味道”,中间是“客人夸过的那桌菜的共同点”,右边是“客人皱眉的那桌菜的共同点”,三者按比例拌在一起。
  1. 保留原查询用系数 α 控制原查询向量的保留程度,避免新反馈把查询带离初衷。
    αq⃗0\alpha \vec{q}_0
  2. 正反馈质心把好评文档向量求平均,得到“满意方向”的中心,再用 β 放大它的吸引力。
    β∣Dr∣∑d⃗∈Drd⃗\frac{\beta}{|D_r|} \sum_{\vec{d} \in D_r} \vec{d}
  3. 负反馈质心把差评文档向量求平均,得到“不满意方向”的中心,再用 γ 决定推开的力度。
    γ∣Dnr∣∑d⃗∈Dnrd⃗\frac{\gamma}{|D_{nr}|} \sum_{\vec{d} \in D_{nr}} \vec{d}
  4. 合成新查询三项相加,得到既保留原意、又靠近好评、远离差评的新查询向量。
    q⃗new=αq⃗0+β⋅centroidDr−γ⋅centroidDnr\vec{q}_{new} = \alpha \vec{q}_0 + \beta \cdot \text{centroid}_{D_r} - \gamma \cdot \text{centroid}_{D_{nr}}

隐式反馈:用户无意间留下的“口味线索”

有些客人不会直接说“这碗面太咸了”,但他们会剩下半碗汤,或者拿纸巾反复擦嘴。作为老板,你得从这些不经意的动作里读出信号。搜索系统也一样——用户几乎不会主动写“这三条结果我很满意”,但他们每一次点击、滚动、停留,都在无意间留下了判断依据。

隐式反馈是指用户在使用搜索过程中自然产生的行为信号,不需要用户额外操作。最典型的包括:点击了哪条结果、在结果页停留了多长时间、是否滚动到页面底部、是否快速返回搜索引擎继续搜下一个词。和显式反馈(打分、点赞、收藏)相比,隐式反馈覆盖面大、获取成本低,但噪声也更多。比如用户误点了一条广告,或者被标题党吸引进去又立刻退出,这些都不能算“喜欢”。

为了综合利用这些信号,可以给不同行为分配不同权重:

隐式反馈的噪声不能硬吞。处理时通常先做清洗:过滤时长小于 2 秒的点击、去除爬虫流量、对极端离群值截断;再按置信度加权,比如长时间停留的点击置信度高,普通点击置信度低。这样,大厨才能从“客人喝了口水”“客人拿纸巾擦嘴”这类动作中,分辨出哪些是真实反馈,哪些只是偶然。

把客人无意间留下的痕迹变成数据,听起来有点玄,但这就是隐式反馈的价值——它不打扰用户,却能让系统悄悄变得更懂人。

Simplicit(u,d)=wc⋅Cu,d+wt⋅Tu,d−wb⋅Bu,dS_{implicit}(u,d) = w_c \cdot C_{u,d} + w_t \cdot T_{u,d} - w_b \cdot B_{u,d}
这个公式像一份“观察清单”:点击一次记一分,停留时间长加两分,快速跳出扣一分。把每个行为换算成分数,系统才知道哪道菜值得端上来。
  1. 点击信号用户是否点击了该文档,是最直接的关注信号。
    wc⋅Cu,dw_c \cdot C_{u,d}
  2. 时长信号停留时间越长,通常意味着内容越符合期待。
    wt⋅Tu,dw_t \cdot T_{u,d}
  3. 跳出惩罚快速返回搜索表示不满意,减去相应权重。
    −wb⋅Bu,d- w_b \cdot B_{u,d}

点击模型:从“位置”里读出真实口味

面馆里的菜单,第一页的“招牌菜”很多人点,不一定是因为它最好吃,而是因为客人翻到第一眼就看到它。搜索结果也一样,排在前面的结果天然容易获得点击,这叫位置偏差。如果你直接把“点击多”当成“喜欢”,就会形成一个死循环:排在前面的永远被点击,点击多的永远排前面,真正优质但排在后面的结果永远没有机会。

点击模型就是为了校正这种偏差,从点击日志中还原用户的真实偏好。一个经典的假设是级联点击模型:用户从上到下逐条检查搜索结果,每看到一个结果,决定是否点击;如果点击了,可能不再往下看,如果没点,就继续看下一个。基于这个假设,第 i 个结果被点击的概率可以拆成两个部分:用户检查到它的概率,和它与查询相关的概率。

点击模型从大量搜索日志中同时估计位置参数和相关性参数。位置参数描述“第一条容易被点、第四条需要滑一下才容易被点”的规律;相关性参数才是我们真正想要的“无偏相关性”。有些系统还会加入更复杂的假设,比如用户点击某条结果后,后面的结果被检查到的概率会下降。这些模型本质上都是试着回答同一个问题:把位置因素拿掉之后,用户还愿意点它吗?

把位置因素拿掉之后,才看得出谁才是真正的“招牌菜”。点击模型就像是服务员学会的读心术——不再把“客人盯着菜单首页”误认为是“客人喜欢那道菜”。

P(Ci=1)=P(Ei=1)⋅P(Ri=1)P(C_i=1) = P(E_i=1) \cdot P(R_i=1)
把点击拆成“我看见了”和“我真心喜欢”两步,就像服务员看到客人盯着菜单第三行看了五秒后终于点单——他先注意到那道菜,然后才决定要点它。
  1. 检查概率用户是否注意到第 i 个位置的结果,由位置决定。
    P(Ei=1)P(E_i=1)
  2. 相关概率该结果是否与查询相关,由内容决定。
    P(Ri=1)P(R_i=1)
  3. 联合事件只有用户既检查了该结果、该结果又相关时,才会产生点击。
    P(Ci=1)=P(Ei=1)⋅P(Ri=1)P(C_i=1) = P(E_i=1) \cdot P(R_i=1)

在线学习:每次反馈都即时微调菜谱

以前的大厨可能一个月才根据销量调整一次菜单,但现在客人越来越多,口味越来越多样,如果等一个月才调整,下个月客人可能都跑光了。搜索系统也一样,如果每天只离线训练一次模型,深夜发生的搜索行为要到第二天才能影响结果,反馈就太滞后了。在线学习让系统在每次用户反馈到来时,立刻对模型参数做一小步更新。

在线学习面临一个经典难题:探索与利用的权衡。如果系统总是展示它认为最合适的结果,它就永远不会知道用户最近有没有新偏好;但如果总是拿不确定的结果去试探用户,又会伤害体验。一个简单实用的策略是 ε-greedy:以大概率选择当前效用最高的结果,以小概率随机探索其他结果。

在线学习还能做到用户自适应。每个用户的反馈会独立更新他自己那部分模型,从而使搜索结果带着“个人色彩”。冷启动时没有用户反馈,就可以先用全局模型顶一阵,再随着反馈积累逐步切换到个性化模型。整个过程中,系统像一位越来越了解常客口味的大厨:你还没开口,他已经知道你今天的辣椒要减半。

时代变了,菜谱不再是一成不变的挂墙牌,而是每端出一碗面就悄悄改一次的电子稿。在线学习让搜索引擎有了当天消化反馈的“好胃口”。

at={arg⁡max⁡aUt(a),以概率 1−ε随机选择一个动作,以概率 εa_t = \begin{cases}\arg\max_a U_t(a), & \text{以概率 } 1-\varepsilon \\\text{随机选择一个动作}, & \text{以概率 } \varepsilon\end{cases}
这就像大厨每天大部分时间按老菜谱做菜,但每隔十桌就主动问一桌客人“要不要试试新口味”,既稳住了老味道,又收集到新反馈。
  1. 利用当前最优用已有反馈估计每个动作的效用,挑效用最高的动作展示。
    arg⁡max⁡aUt(a)\arg\max_a U_t(a)
  2. 随机探索以概率 ε 随机选择一个其他结果,获得平时得不到的反馈。
    随机选择一个动作\text{随机选择一个动作}
  3. 概率门控用参数 ε 控制“守成”和“尝鲜”的比例。
    ε∈(0,1)\varepsilon \in (0,1)

实践挑战:开连锁店时的统筹与底线

面馆越开越大,从一家店变成连锁品牌,问题也跟着来了:不同城市的客人口味不一样,同一个招牌菜有人嫌辣有人嫌淡;店里偶尔因为新招的服务员听错订单上错菜;还有客人开始担心:你们是不是把我的口味记录传得到处都是?搜索引擎做相关性反馈,同样要面对个性化、评估和隐私这三大关。

个性化搜索要求系统不只依赖全局反馈,还要融合每个用户的历史反馈。同一个查询词“苹果”,水果爱好者想看富士苹果,数码玩家想看 iPhone 评测。最常用的做法是把全局相关分和用户个人偏好分做加权融合:

部署时还要建立评估体系:离线用历史点击日志模拟排序效果,上线后用 A/B 测试对比新旧模型。隐私方面尤其敏感——点击日志需要匿名化,不能记录可识别个人的敏感行为。一个负责任的系统,应该在优化相关性之前先守好用户信任这道底线。

大厨开连锁,既要尊重总部的招牌,也要照顾分店的口味,还要保证每一位客人吃得放心。相关性反馈从实验室走向生产系统,考验的正是这种统筹能力。

Sfinal(d,u,q)=(1−λ)⋅Sglobal(d,q)+λ⋅Suser(d,u)S_{final}(d,u,q) = (1-\lambda) \cdot S_{global}(d,q) + \lambda \cdot S_{user}(d,u)
这相当于连锁店大厨先用总部统一配发的基础汤底,再根据本地客人的“口味档案”额外加一勺辣子或一勺糖。
  1. 全局相关分不考虑用户,只由查询和文档内容决定的基础相关度。
    Sglobal(d,q)S_{global}(d,q)
  2. 用户偏好分根据该用户历史反馈学到的个人口味得分。
    Suser(d,u)S_{user}(d,u)
  3. 融合比例用 λ 控制个性化强度,λ=0 时所有人结果一样,λ=1 时完全只认个人偏好。
    λ∈[0,1]\lambda \in [0,1]

AI 应用场景

电商搜索个性化重排

阶段:结果重排阶段

解决的问题:传统电商搜索对同一关键词只给一套排序,用户搜“蓝牙耳机”,运动达人看到“运动款”,通勤族看到“降噪款”,靠猜命中的概率很低。利用用户点击、加购、下单等反馈数据,系统可以实时学习每个人的偏好,在基础相关性排序上叠加个性化重排。

具体案例:某电商平台用户在搜“蓝牙耳机”时,系统记录他过去 30 天内点击过 5 款“运动型”耳机、跳过所有“降噪型”的结果。通过相关性反馈在线更新用户画像,下一次搜索时“运动款”排名明显上升。A/B 测试显示,点击率提升 8%,加购率提升 5%。

资讯推荐冷启动探索

阶段:在线学习阶段

解决的问题:新用户没有任何行为反馈,如果系统只推热点新闻,可能和用户兴趣不匹配;如果随机乱推,又容易让用户立刻流失。借助探索与利用策略,系统先给新用户混合展示多个主题的内容,再根据阅读时长、点击行为快速收敛。

具体案例:某新闻 App 对新用户采用 ε-greedy 策略,前 30 分钟约 10% 的流量探索非热门标签内容,90% 流量利用当前预估点击率最高的内容。随着反馈积累,用户侧模型逐步接管排序,新用户次日留存率提升了 15%。

Python 演示

python61 行
# -*- coding: utf-8 -*-"""Rocchio 相关性反馈演示:根据正负反馈文档调整查询向量。""" # 文档-词项向量(模拟 4 篇文档)docs = [    {"apple": 3, "phone": 2, "battery": 1, "cake": 0, "fruit": 0},    {"apple": 1, "phone": 3, "battery": 2, "cake": 0, "fruit": 0},    {"apple": 2, "cake": 3, "fruit": 1, "phone": 0, "battery": 0},    {"apple": 1, "cake": 2, "fruit": 2, "phone": 0, "battery": 0},] # 用户查询:"苹果手机"query = {"apple": 1.0, "phone": 1.0, "battery": 0.0, "cake": 0.0, "fruit": 0.0} # 正反馈(用户点击/标记相关)和负反馈(点击跳过/不相关)pos_ids = [0, 1]neg_ids = [2, 3] # Rocchio 参数alpha = 1.0beta = 0.75gamma = 0.5  def add_vec(target, src, k=1.0):    for term, value in src.items():        target[term] = target.get(term, 0.0) + k * value  def scale_vec(vec, scale):    return {term: value * scale for term, value in vec.items()}  def centroid(ids):    center = {}    for doc_id in ids:        add_vec(center, docs[doc_id], 1.0)    total = len(ids)    for term in center:        center[term] /= total    return center  def rocchio_update(q, pos, neg, a, b, g):    new_q = scale_vec(q, a)    pos_center = centroid(pos)    neg_center = centroid(neg)    add_vec(new_q, scale_vec(pos_center, b))    add_vec(new_q, scale_vec(neg_center, -g))    return new_q  def main():    new_query = rocchio_update(query, pos_ids, neg_ids, alpha, beta, gamma)    print("更新后的查询向量(正例拉近、负例推远):")    for term in sorted(new_query):        print("  {}: {:.3f}".format(term, new_query[term]))  if __name__ == "__main__":    main()
目的:用最简的词典向量模拟 Rocchio 算法,演示如何根据正负反馈文档把原始查询“苹果手机”拉近电池相关的文档、推远蛋糕相关的文档。
  1. pos_ids = [0, 1]标记文档 0 和 1 为正反馈,算法会将查询向量拉向它们。
  2. neg_ids = [2, 3]文档 2 和 3 为负反馈,算法会将查询向量推离它们。
  3. alpha, beta, gamma = 1.0, 0.75, 0.5分别控制原查询保留、正例吸引、负例排斥的强度。
  4. new_q = scale_vec(q, a)先把原查询向量按 α 缩放,保留初始意图。
  5. pos_center = centroid(pos)计算正反馈文档的平均向量,代表“满意方向”。
  6. add_vec(new_q, scale_vec(neg_center, -g))减去负反馈质心,让查询远离不相关区域。
  7. main()运行更新,并打印每个词项在新查询中的权重,可以看到“battery”从 0 变成了正值。

常见误区

误区用户点击了某条结果,说明用户认为它相关,系统应该把点击最多的结果永远排在最前面。

正解点击行为受到位置偏差、标题党、好奇心等因素干扰。排在第一的结果天然获得更多点击,但未必真的相关。需要用点击模型(如级联模型)估计检查概率和相关概率,才能从日志中剥离位置偏差,得到更真实的“喜欢程度”。就像食客点菜单第一页的菜,可能只是因为显眼,不代表最爱吃。

为何常见:点击结果最容易观察、数据量最大,人们本能地将其与用户满意度画等号,忽略了展示位置对行为的诱导。

误区既然相关性反馈这么有用,那就把所有用户行为都塞进模型,样本越多效果越好。

正解过量的低质量反馈会引入噪声。误点击、极短停留、机器人访问都是垃圾信号;如果权重过高,反而会把查询带偏。需要设计置信度权重:对停留时间长的点击加权,对快速返回的点击降权。就像大厨不会把客人打喷嚏当成“太咸了”的反馈。

为何常见:机器学习里“数据量越大越好”的经验深入人心,但忽略了隐式反馈的信噪比远比显式打分低。

误区执行一次 Rocchio 调整查询向量后,检索就完成了,无需再更新。

正解相关性反馈是持续循环的过程。用户的新点击、新跳过应不断进入反馈,驱动查询向量在线微调。一次更新只面向历史反馈,新反馈到来后要再次更新,并可通过在线学习平滑演进。大厨的菜谱每天都要根据售罄情况微调,而不是挂牌一次不再改。

为何常见:把 Rocchio 当作单轮算法,没有理解它在真实系统中往往跑在在线反馈闭环里。

误区点击、停留时长和星级评分都是反馈,直接用相同方式加权融合即可。

正解显式反馈是用户主动表达,置信度高、但稀疏;隐式反馈是行为副产品,覆盖面大、但噪声大。需要区别建模:隐式反馈通常要做归一化、去偏、设计置信度阈值。将两者直接同等对待会放大噪声,让优质页面被误点淹没。就像客人的一句“好吃”和默默把面吃光,含义相近但力量不同。

为何常见:反馈背后都是用户行为,形式上都是数值,容易忽略其产生机制和心理意图的差异。

面试题

Q1. 相关性反馈的核心目标是什么?

单选题 · easy

  • A.减少搜索引擎索引体积
  • B.提升搜索结果的实时性
  • C.根据用户反馈调整检索结果← 正确答案
  • D.延长用户的停留会话时长

答案:C。相关性反馈专门利用用户点击或标注来修正查询和模型,从而提升检索精度。A 是索引压缩问题,B 与实时性关系不大,D 是体验指标而非核心目标。

Q2. 隐式反馈和显式反馈的关键区别是?

单选题 · easy

  • A.隐式反馈来自用户主动打分
  • B.显式反馈数据量更大
  • C.隐式反馈来自日常行为而非主动表达← 正确答案
  • D.隐式反馈没有噪声

答案:C。隐式反馈是点击、停留等行为副产品,不需要用户主动操作;显式反馈才需要主动打分。A 说反了,B 和 D 都不符合事实,显式反馈通常更稀疏,隐式反馈噪声很大。

Q3. 级联点击模型的核心假设是什么?

单选题 · easy

  • A.用户随机浏览结果列表
  • B.用户从上到下依次检查结果← 正确答案
  • C.用户只看第一屏结果
  • D.用户点击与位置无关

答案:B。级联模型假设用户按顺序扫描结果,检查到当前位置后才会发生点击。A 与假设相反,C 过于绝对,D 违背了模型要校正位置偏差的初衷。

Q4. 在 Rocchio 算法中,正反馈文档的作用是什么?

单选题 · mid

  • A.将查询向量推离正例质心
  • B.使查询向量向正例质心靠近← 正确答案
  • C.减少查询向量的权重
  • D.对负反馈文档进行降权

答案:B。Rocchio 公式中正反馈文档的平均向量以正系数加入新查询,把查询拉向“满意方向”。A 方向相反,C 与算法无关,D 描述的是负反馈的处理方式。

Q5. 点击模型中的“位置偏差”指的是?

单选题 · mid

  • A.用户点击取决于内容相关性与位置无关
  • B.排前面的结果更容易被点击,相关性高低影响小← 正确答案
  • C.移动端手指点不中目标按钮
  • D.搜索结果摘要长度不同导致视觉偏差

答案:B。位置偏差指展示顺序诱导点击,排名越靠前越容易获得点击,必须用点击模型校正。A 与位置偏差相反,C 是交互误差,D 与点击位置无关。

Q6. 在线学习处理反馈的主要优势是什么?

单选题 · mid

  • A.一次性训练全量数据
  • B.利用新反馈即时更新模型← 正确答案
  • C.不需要考虑探索与利用
  • D.完全避免隐私风险

答案:B。在线学习随反馈到达增量更新,延迟低、能快速捕捉用户偏好变化。A 是离线批处理的特点,C 忽略探索与利用是错误,D 在线学习仍需要隐私保护。

Q7. 在相关性反馈中,“探索与利用”的目的是什么?

单选题 · mid

  • A.只使用已有反馈做最优排序
  • B.在利用最优结果的同时探索新结果← 正确答案
  • C.扩大索引容量
  • D.减少用户查询提交次数

答案:B。探索与利用平衡短期最优与长期信息收集,既保证当前体验又不断发现新偏好。A 仅利用,C 与索引无关,D 与查询频率无关。

Q8. 为什么点击日志不能直接当作相关性标注?

单选题 · hard

  • A.因为日志包含位置偏差和误点击← 正确答案
  • B.因为日志存储成本高昂
  • C.因为日志格式不统一
  • D.因为日志只来自付费用户

答案:A。点击日志混合了位置效应、标题党吸引和误操作,直接用会得到有偏模型。存储格式问题可以被工程解决,但不是本质原因,C 和 D 都不成立。

Q9. 下列哪些属于隐式反馈信号?

多选题 · mid

  • A.用户点击了某条搜索结果← 正确答案
  • B.用户在结果页停留了十秒钟← 正确答案
  • C.用户给搜索结果打了五星
  • D.用户快速返回搜索引擎继续搜索← 正确答案

答案:ABD。点击、停留时长、快速返回都来自用户自然行为,属于隐式反馈。给搜索打五星是用户主动表达,属于显式反馈。

Q10. 关于 Rocchio 算法,下列说法正确的有?

多选题 · hard

  • A.基于向量空间模型← 正确答案
  • B.正负反馈文档按质心参与计算← 正确答案
  • C.反馈顺序会影响更新结果
  • D.参数 γ 控制负反馈的影响程度← 正确答案

答案:ABD。Rocchio 在向量空间中运行,正例质心和负例质心分别以正负系数加入,γ 正是负例项权重。算法对反馈集合求平均,与顺序无关,因此 C 错误。