据statista统计,截止到2016年6月,Google Play应用商店有220万个App,超越了苹果的应用商店的200万个App,Windows和Amazon的应用商店则被这两家远远甩在身后。那么,你是不是好奇,在这浩烟如海的应用商店来发现你中意的App,是怎么做到的呢?
今天,我们就来看看Google Play小组的软件工程师Malay Haldar、Matt MacMahon、Neha Jha和Raj Arasu分享的这篇文章,了解到Google Play的应用商店的工作机理。
每个月,超过10亿的用户来在Google Play为他们的移动设备下载App。虽然有些人寻找特定的App,如Snapchat,其他人对他们感兴趣的只有一个粗略的概念,如“恐怖游戏”或“自拍App”。这些按主题进行的宽泛搜索,就占据了应用商店中的查询的将近一半,因此找到最相关的App至关重要。
按主题进行搜索不仅仅需要通过查询字词对App进行索引;他们需要了解与App相关的主题。机器学习方法已经应用于类似的问题,但它的成功,在很大程度上取决于学习一个主题的训练样本的数量。虽然对于一些热门主题,如“社交网络”,我们有许多已贴标签的App来学习,大多数主题只有少数几个例子。我们的挑战是从数量有限的训练样本中学习,并扩展到数千个App的数千个主题,迫使我们去适应机器学习技术。
我们最初的尝试是建立一个深度神经网络(DNN),训练根据App标题和描述的字词和词组预测App的主题。例如,如果App描述提到“可怕”、“非常可怕”和“恐惧”,然后将“恐怖游戏”主题与它相关联。然而,鉴于DNN的学习能力,它完全“记忆”了我们的小型训练数据中提到的App主题,却不能推广到之前未见过的新App。
为了有效地推广,我们需要一个更大的数据集来训练,于是,我们转向研究人们如何学习来寻找灵感。与DNN相反,人类只需少得多的训练数据即可。例如,在学习如何推广和关联新App之前,您可能需要查看非常少的“恐怖游戏”App说明。只要知道描述App的语言,人们甚至可以从少数几个例子就能正确推断出主题。
为了效仿这一点,我们尝试了这种以语言为中心的学习的非常粗略的思路。我们训练了一个神经网络来学习如何使用语言来描述App。我们建立了一个Skip-gram模型,其中神经网络尝试预测给定单词周边的单词,例如给定单词“photo”的“share”。神经网络将其知识编码为浮点数的向量,称为嵌入。这些嵌入用于训练另一个称为分类器的模型,能够区分应用于App的主题。得益于使用Skip-gram模型进行大量的学习,现在我们只需很少的训练数据即可了解App 的主题。
虽然这种架构适用于热门主题,如“社交网络”。我们碰到一个新的问题,就是有更多的小众主题,比如“自拍”。单个分类器内置预测的所有主题大部分都集中在它学过的热门主题,对于不常见的错误则忽略之。为了解决这个问题,我们为每个主题构建了一个单独的分类器,并单独调整它们。
这种架构产生了合理的结果,但仍然有时会过度概括。例如,它可能会将Facebook与“约会”关联,或者将“植物大战僵尸”与“教育游戏”相关联。为了产生更精确的分类器,我们需要高容量、高质量的训练数据。我们将上述系统视为一个粗分类器,它将每个可能的{app,topic}对(编号为数十亿)删除到更易于管理的{app,topic}对的列表中。我们建立了一个管道,让人类评估者来评估分类器的输出,并将共识结果作为训练数据。这个过程允许我们从现有系统中引导,提供稳定地提高分类器性能的途径。
要评估{app,topic}对,我们问问题的形式是:“主题X与应用程序Y有多大程度的关联性?”多个评估者接收相同的问题,对每个App在评定量表上独立选择答案,标识出“重要的”、“有些关系”、或者完全“无关”。我们初步的评估显示了评估者之间存在极大的分歧。
随着深入挖掘,我们发现了引起分歧的几个原因:答案不够明确;评估者培训不足;评估应用于大多数App或游戏的宽泛主题,像“计算机文件”、“游戏物理”那样的。解决这些问题导致评估者一致性的重要利益。要求评估者从策划列表中选择明确的答案,进一步提高可靠性。尽管有所改进,但我们有时仍然必须“同意歧见”,评估者在未能达成共识的情况下放弃作答。
这些App主题分类在Google Play应用商店中启用搜索和发现功能。当前的系统帮助用户提供相关结果,但我们正在不断探索新的方法来改进系统,通过额外的标识、架构的改进和新的算法。
为Google Play应用商店的访问者提供有用且相关的应用推荐是我们应用发现团队的主要目标。然而,对与App相关联的主题的理解仅仅是创建最合适用户服务的系统的一部分。为了创造更好的整体体验,还必须考虑用户的品味并提供个性化的建议。如果没有,“你也可能喜欢”的建议对每个人来说看起来都一样!
发现这些细微差别需要了解App的功能,以及App与用户相关的上下文。例如,对于狂热的科幻游戏者,类似的游戏推荐可能是感兴趣的,但是如果用户安装健身App,则推荐健康食谱App可能比五个以上的健身App更相关。由于用户可能对下载已经安装的App或游戏的补充更感兴趣,除了根据与App(“类似App”)相关的主题提供推荐内容外,我们还会提供基于App相关性的建议(“您可能也喜欢”)。
在决定安装决定之前(左)和当前安装正在进行(右)时,您可能还会看到类似的App和App建议。一个特别强的上下文信号是应用相关性,基于先前的安装次数和搜索查询次数。作为示例,已经搜索并且玩很多图像密集型游戏的用户可能偏好图像密集型的App,而不是更简单的图形应用。所以,当这个用户安装赛车游戏时,“你可能也喜欢”的建议包括与“种子”相关的应用程序(因为它们是图像密集型的赛车游戏),排名高于赛车App和更简单的图像游戏。这允许个性化更为精细,其中App的特性与用户偏好更为匹配。
要在建议中包含这个App的相关性,我们采取双管齐下的方法:(a)离线候选生成,即除了所讨论的App之外,其他用户已经下载的潜在相关App的生成,和(b)在线个性化重排序,其中我们使用个性化ML模型重新排序这些候选。
找到相关App的问题可以被表示为最近邻搜索问题。给定一个App X,我们想找到k个最近的App。在“你可能也喜欢”的情况下,一个简单的方法是基于计数的方式,如果许多人安装App X和Y,那么App Y将被用作App X的候选种子。然而,这种方法很刺手,因为在巨大的问题空间中难以有效地学习和推广。由于Google Play上有超过一百万个App,可能的App对总数超过〜10的12次方。
为解决这个问题,我们训练了一个深层神经网络,以预测用户在安装之前安装的下一个App。在这个深层神经网络的最后层的输出,嵌入通常表示给定用户已经安装的App类型。然后我们应用最近邻算法来找到在训练的嵌入空间中给定的种子App的相关App。因此,我们通过使用嵌入表示App来修剪潜在候选的空间来执行维数降低。
在上一步骤中生成的候选表示沿着多个维度的相关性。目标是向候选分配分数,使得它们可以以个性化的方式重新排名,以便提供被制作成用户的整体兴趣并且仍然保持用户安装给定App的相关性的体验。为了做到这一点,我们采取应用候选人的特点作为输入到单独的深层神经网络,然后使用用户特定上下文特征(区域、语言、应用商店搜索查询等)实时地训练用户以预测相关App与用户特定相关的可能性。
这项工作的一个好处是,重新排序内容,如相关的App,是应用商店实现应用发现的关键方法之一,可以为用户带来巨大的价值,而不影响感知的相关性。与控制(没有重新排名)相比,我们发现App安装率从“您可能也喜欢”的建议中增加了20%。这没有带来用户可察觉的延迟变化。
在后续系列部分中,我们将讨论如何使用机器学习来阻止那些试图操纵我们用于搜索和个性化的信号。
QCon北京2017将于4月16日~18日在北京·国家会议中心举行,精心设计了互联网广告系统实践、大数据实时计算与流处理和金融科技转型与未来等30来个专题,将邀请来自Google、Facebook、阿里巴巴、腾讯、百度、美团点评、爱奇艺等典型互联网公司的技术专家,分享技术领域最新成果。可点击“阅读原文”报名。