半年前你几乎只玩第一人称射击,最近两周却天天在一款模拟经营游戏里布置咖啡馆。这时如果推荐系统还在给你推狙击枪皮肤和排位赛组队,你大概会觉得它有点“不了解我”。它不是没数据,恰恰相反,它手里有半年前的一大堆数据,只是这些数据已经不太能代表现在的你了。
玩家的兴趣不是一个固定标签,而是一条随时间移动的曲线。爱游戏在设计兴趣模型时,把“怎么发现玩家换了兴趣”当成一个独立问题来处理,而不是默认旧画像永远成立。下面从症状讲起,再谈机制,最后谈边界。
两种失败:固执的旧画像与轻率的新画像
先看两种典型失败。第一种是旧画像固执。系统把玩家早期的行为当作永久的事实:你三个月前买过一款射击游戏,从此所有推荐都围绕射击展开。玩家换了兴趣,系统却慢半拍,甚至一直没有更新。表现出来就是推荐越来越不相关,玩家慢慢不再点开推荐,而系统还把“没人点”当作“兴趣仍然稳定”。
第二种是过度反应。系统发现玩家最近一次玩了一款恐怖游戏,立刻把所有推荐调整成恐怖类型。可实际上那次只是朋友拉着试玩,玩家并不喜欢。一次偶然的行为被放大成新的偏好,推荐变得忽左忽右,玩家反而觉得系统不稳定。
这两种失败看起来是相反的,本质却是同一个问题:没有区分“稳定的偏好”和“暂时的行为”。要解决它,需要把玩家的兴趣拆成不同时间尺度的层次,让每一层按各自的速度变化。
长期偏好与短期兴趣,分开存放
我们的做法是把画像分成两层。长期偏好变化慢,包括大类的游戏类型倾向、玩法风格、沟通方式、语言、常在线的时段等,大多由玩家自己声明加上长时间的行为积累而成。短期兴趣变化快,反映最近几周玩了什么、看了什么、和谁一起玩,它更敏感,也更容易被新行为影响。
两层各司其职:长期偏好像底座,让推荐不至于因为一时的兴趣变化就彻底改变风格;短期兴趣像浮层,让系统能跟上玩家的最近状态。推荐结果是两层结合的产物:长期偏好决定候选的范围,短期兴趣决定排序的先后。
这种分层还有一个好处:当短期兴趣持续了足够长的时间,它可以逐渐“沉淀”进长期偏好。比如一个人连续两三个月都在玩模拟经营,那么这不再是一时兴起,系统应当承认他的偏好已经发生了迁移,并把长期层慢慢调整过去,而不是永远把它当作浮层里的例外。
时间衰减:旧记录该以什么速度淡出
让旧记录淡出,最常用的办法是时间衰减:越久远的行为,权重越小。可以用一条文字描述的曲线来想象它。最近一周的行为权重最高,接近满分;两到四周前的行为,权重逐渐下降,像走下坡;两三个月前的行为,只剩下很小的影响;再久远的记录,基本只作为背景保留。
曲线的形状有几个取舍。衰减太快,系统健忘,玩家偶尔换口味就会让画像大幅摇摆;衰减太慢,系统固执,前面说的旧画像问题依然存在。更合理的做法是让不同类型的信号使用不同的衰减速度:玩家明确声明的偏好几乎不衰减,需要玩家主动改动;游戏类型这样的行为信号衰减中等;某个具体活动、某场限时赛事这类信号衰减得最快。
另外,衰减不应该只依赖“时间”,还应该考虑“强度”。一段持续了很多个小时的投入,和一次只玩了十分钟就退出的尝试,即使发生在同一天,对画像的意义也完全不同。前者可以拿到较高的权重,后者则被视为一次浅尝辄止的试探。
朋友、假期与周末:让变化有原因
兴趣的变化不总是缓慢滑动的,有些是突然发生的。最常见的一种是朋友带来的新游戏:一位好友开始玩某款游戏,并邀请你加入,你试了几局,发现有意思,从此常玩。这种变化在行为记录上表现为一次陡峭的转折,如果系统只看个人行为,很容易把它当作偶然;把社交关系一起考虑,才能看出这是一次有来由的迁移。关于社交关系和时间行为一起用于推荐的趋势,可以参考我们对玩家兴趣预测新变化的观察。
另一类变化来自周期。有些玩家平时忙,只在周末才长时间玩游戏;有些人在假期会尝试新类型,回到工作日又回到原来的习惯。如果系统把周末的行为和工作日的行为混在一起,就可能把“周末的心情”误认为“平时的偏好”。因此,行为记录应该带着时间标签,模型能区分“这是周期性的现象”还是“持续的迁移”。
这一层的核心是给变化找原因。系统不需要知道具体的原因,但需要有能力区分几种可能:偶然试玩、周期变化、社交带动、真正的兴趣转移,并对它们采用不同的更新速度。
模拟场景:从射击到咖啡馆
下面用一个模拟场景走一遍。所有细节均为演示用的假设。
假设一位玩家半年前的记录显示,他玩的几乎都是射击类游戏,常在晚上组队排位。近三周里,他开始玩一款模拟经营游戏,每天登录、每次玩上一两个小时;同时,射击类游戏的登录次数明显减少。这时系统会怎么处理?
第一步,短期兴趣层迅速反映变化:最近两周的行为权重高,经营类的信号立刻变强。第二步,长期偏好层保持谨慎:射击类偏好依然存在,只是被暂时放到了次要位置,因为系统无法确定这次变化是短暂的还是长期的。第三步,推荐层同时给出两类内容:以经营类为主,穿插少量与射击相关的内容,比如他常打的游戏有新版本。
随后系统继续观察。如果接下来两个月他仍然主要玩经营类,长期层逐渐把偏好向经营类靠拢;如果他很快又回到射击,短期层就自动回落,长期层几乎不受影响。在整个过程中,系统会在推荐旁边给出一句简短的解释:“因为你最近两周常玩模拟经营”,并提供一个入口,让他可以选择“继续为我推荐这类”或者“这只是暂时的”。
这个场景里同样有出错的可能。他也许只是在通勤期间玩经营游戏,回到家依然是射击玩家;也许这周正好放假,玩得比平时多。所以模型不应该给出一个绝对的判断,而是保留不确定性,并把选择交回给玩家。
别把人困在自己的过去和现在里
兴趣模型还有一个副作用需要正视:信息茧房。如果系统只根据玩家过去的行为推荐同类内容,玩家会越来越少接触到新东西,画像也会越来越窄。追逐短期兴趣也会带来类似的问题:玩家刚看了一次某类内容,系统就立刻加倍推荐,形成一种自我强化。
缓解的办法并不复杂:在推荐里保留一小部分探索性内容,比如与玩家偏好相邻但不完全相同的类型,并明确标注“探索推荐”,让玩家知道这不是根据他们的习惯,而是系统在试着扩大视野。对这类探索的反馈,也要用较低的权重进入画像,避免一次尝试就改变整体判断。
此外,玩家应该能看到自己的画像,并且能修改。爱游戏的设计取向是:画像里的每一个主要标签都能查看来源,每一条推荐都能看到解释,玩家可以删除某个标签,也可以整体重置。当系统的判断与玩家的自我认知不一致时,以玩家为准。关于兴趣设置在实际使用中的调整方式,可以参考队友与兴趣偏好的设置说明。
画像是一份草稿,不是一份档案
回到开头的问题:AI怎么知道玩家最近换了兴趣?答案是它并不“知道”,只是持续观察、谨慎更新、允许被纠正。它把长期偏好和近期行为分开,让旧记录按合适的速度淡出,把突发的变化和周期性的变化区别对待,同时留下探索的空间,并让玩家可以随时看见和修改。
一份画像更适合被当作草稿,而不是档案。草稿可以被修改,也应该被修改。只有当系统承认自己的判断可能过时,玩家才有理由放心地让它继续学习。