假设一个玩家的游戏库里躺着二十几款游戏,其中一款他买下后只玩了二十分钟,另一款他断断续续玩了几百个小时。推荐系统如果把这两条记录都当成“喜欢”,后面的所有排序都会偏掉。游戏推荐真正麻烦的地方就在这里:信号很多,但每一条都不诚实,也都不完整。
爱游戏智能推荐这一栏讨论的,是怎样把这些含糊的信号拼成对玩家兴趣的合理判断:游戏时长、完成度、最近玩了什么、放弃得有多快、好友在玩什么、类型和机制偏好,以及玩家自己愿意告诉我们的东西。文章不谈“推荐准确率提升了多少”,而是讲每一种信号的边界,以及把它们放在一起时会出现哪些取舍。
购买、点击和时长,各自只说明一部分
购买说明玩家当时有兴趣或者被折扣打动,不说明他后来玩得开心;点击说明标题或封面抓住了眼球,不说明内容合口味。时长看上去更接近真实,却也有陷阱:一款需要长时间挂机或者反复刷取资源的游戏,时长本身就被设计得很高。买了游戏却只玩20分钟到底算不算喜欢这篇把这类隐式反馈拆开看:二十分钟之后是主动退出,还是被设备问题打断;是教程太长,还是玩法不对胃口。不同的原因,需要不同的解读。
更稳妥的做法,是同时看时长、完成度、回访间隔和放弃速度,再决定一条记录应该给正面还是负面的权重,甚至干脆标记为“无法判断”,不参与训练。
长期口味与这一周的心情
一个玩了很久角色扮演游戏的人,很可能已经形成稳定的长期偏好。但他这周连续搜了几次短时长的合作小游戏,也许是在给朋友聚会找点乐子,也许只是想换换脑子。把这两种信号混成一个平均值,就会得到一个谁都不满意的结果。长期兴趣与短期兴趣的区分这一篇说的正是这件事:长期兴趣决定候选池的基本轮廓,短期兴趣决定这一次首页上先看到哪几张卡片,而兴趣漂移又要求长期画像本身随时间缓慢更新。
还有一类容易被忽略的情况:玩家换了设备,或者把一款游戏放了几个月没碰。前者不代表口味改变,后者也不一定是放弃,只是生活节奏变了。系统需要区分“暂停”与“离开”,否则会把一个只是忙碌的老玩家误判成流失用户,一次次推送不相干的内容。
这也意味着推荐不能只做“更像你玩过的”。如果一个人几百小时都在同一类游戏里,系统仍然只给他同类,几个月之后他很可能已经腻了,却连一个离开的理由都没有被系统察觉到。
好友在玩,是线索而不是指令
社交关系是很有价值的输入:朋友们在玩的合作游戏,天然带着“可以一起玩”的意义。但好友最近扎堆玩某款游戏,并不代表这个玩家想玩,他也许偏爱单人体验,也许只是刚好没时间。好友行为该不该排第一讨论了怎样让这个信号参与排序却不压过玩家自己的偏好,以及在多人和单人两种意愿上怎样区别处理。我们倾向于把好友行为当成加分项,并且在界面上说明推荐理由,让玩家知道为什么看到它。
什么都没有的新玩家
新玩家没有历史,冷启动阶段的每一次推荐都在赌。直接推热门有安全感,但会把所有人推向同一批游戏;让玩家一口气填二十个问题,则会让相当一部分人还没开始就离开。新玩家没有历史记录怎么办给出的思路是分步获取:先问最少、最有区分度的问题,例如“正在玩什么”“最近想玩什么”,再用内容特征、类型和机制标签做初始匹配,随后让实际行为迅速接管。手机端的具体交互可以看爱游戏App栏目。
留出一点位置给意外
只按预测得分从高到低排,是最容易做、也最容易让玩家感到无聊的方式。合理的推荐列表会保留少量探索位置,这些位置刻意放入与历史不同的类型或机制,并且要明确标示,让玩家知道这是“试一试”,而不是系统判断错了。探索位置占多少、放在哪里,本身也是需要用实验和玩家反馈来检验的设计,而不是拍脑袋定下来的常数。
如果你在意推荐依据的公开进展,比如把知识图谱与多模态特征放在一起的做法,可以看爱游戏动态里的相关观察;如果想知道玩家状态怎样反过来影响推荐,则可以参考爱游戏玩家AI栏目。