一、前言
作为电商网站的核心组成之一,传统的推荐系统算法分为两大类: 协同过滤推荐算法和基于内容的推荐算法 。然而这两类算法在真实数据集上都存在一些局限性。
传统的协同过滤算法 :
基于用户的协同过滤算法 [1]会根据种子用户评论过的项目来发现相似用户,然后选出这些相似用户给出较高评分的项目推荐给种子用户; 基于项目的协同过滤算法 [2]会以种子项目为基础,挑选那些有着相似用户评分的项目。
然而,在 eBay 这类活跃度较高的电商网站上,项目和用户每时每刻都在更新,传统的协同过滤算法会面临数据稀疏性的问题,难以在冷启动场景给出优质的推荐内容。
基于内容的推荐算法 :
这类算法致力于计算种子项目与候选项目在内容方面的相似度(包括点击、评分、语义等),然后挑选出最相似的项目进行推荐。尽管这类算法避免了数据稀疏度的影响,但其对内容的依赖决定了它们难以提供新颖的推荐,不利于挖掘用户的潜在兴趣[3]。
近年来,随着神经网络模型的崛起,推荐系统也开始在深度学习领域进行尝试。本研究以 BERT 模型为基础,结合用户历史行为数据,将 Masked Language Model 和 Next Sentence Prediction 这两个 BERT 模型的训练任务从自然语言领域迁移到电商领域,提出了一种新的基于项目的协同过滤算法。
本研究的优势在于 :
(1)不同于以往用项目 ID 来聚合历史信息的方式,我们以项目标题为输入内容,使得相似的项目获得相似的编码,有效解决传统推荐算法中的冷启动问题。
(2)以用户历史行为数据来训练模型,相较于挖掘项目相似度,本研究能更好地发掘用户的潜在兴趣。
在大规模真实数据集上的实验表明,本研究能显著解决冷启动、内容单一等问题,获得高质量的推荐内容。
二、模型
如上所述,对于一个动态的电子商务平台,商品无时无刻不在更新,这导致用户-项目的交互矩阵极为稀疏。这一特性给传统的推荐系统带来了两点挑战:(1)长尾推荐,即那些非热门的项目难以有机会被推荐;(2)模型需要不断地重新训练和部署,以适应新上架的项目。
为了解决这些问题,我们选择使用标题的 tokens 来表示每个项目,而不是采用唯一的 ID 来表示,并将这些 tokens 进一步映射到连续的向量表示空间中。 由此,两个具有相同标题的项目将被视为同一个项目,它们的用户行为数据可以被汇总共享。对于冷启动的项目,模型可以利用标题来发现与之前观察到的项目的相似性,从而发掘相关的推荐。
本文提出基于项目的协同过滤算法,其目标是对两个项目之间的相关性进行评分,对于任一种子项目,将得分最高的若干项目作为推荐结果。我们以 BERT 模型[4]为基础,实现了这一算法。不同于传统的 RNN / CNN 结构,BERT 模型是以 transformer encoder 为结构的语言模型,采用注意力机制来计算输入和输出之间的关系。BERT 和 transformer 的结构如图 1 所示[4][5]。
BERT 模型的训练可分为两部分:Masked Language Model 和 Next Sentence Prediction。 在本算法中,我们将这些任务迁移到电商推荐任务上:Masked Language Model on Item Titles 和 Next Purchase Prediction。
图 1: BERT & Transformer 结构
Masked Language Model on Item Titles :电商平台上项目标题的 tokens 分布,与 BERT 模型预训练所用的自然语言语料中的 tokens 分布有着很大的不同,为了模型能够更好地理解电商推荐环境中的语义信息,我们将这一任务作为目标之一对模型进行再训练。在训练过程中,我们遵循 Devlin 等人的方案[4],对项目标题中随机 15%的 tokens 做 MASK 处理,则该部分的损失函数为:
Next Purchase Prediction :在 BERT 模型中,Next Sentence Prediction 用来预测一个句子 A 是否是另一个句子 B 的后一句。我们将其转换为推荐问题:给定一个种子项目 A,预测另一个项目 B 是否是用户要点击购买的下一个项目。以项目 A 的标题替换原模型中的句子 A,以项目 B 的标题替换原模型中的句子 B,将标题拼接起来作为模型的输入。我们从用户的历史行为数据中收集模型的训练数据,对于种子项目,以同一个用户会话中被购买的项目为正例,并从 inventory 中随机抽取负例。由此,给定正例集合和负例集合,该部分的 损失函数 为:
故,模型两部分的 联合损失函数 如下:
三、实验
为了验证这一算法在电商推荐系统中的表现,我们收集了 eBay 的真实数据进行实验。共收集了大约对项目作为训练集,其中约 33%为正例(用户在同一会话中购买的项目)。可以看到,项目-项目的交互矩阵非常稀疏,传统的推荐算法难以取得好的效果。我们以同样的方法收集了大约对项目作为验证集,用于防止模型过拟合。
对于测试集,则采用了基于冷启动数据的采样方案,以验证我们的算法在这类传统协同过滤算法无法处理的情景中的表现。共收集了 10,000 对正例,每一对中的种子项目未在训练集中出现过。针对每一对正例,我们随机采样 999 个项目作为负例。由此,每个种子项目会有 1000 个候选项目。在测试时,对这 1000 个候选项目进行排序,并计算 Precision@K、Recall@K、NDCG@K 等指标,据此对算法进行比较。
为了进行比较,我们需要构建一个 baseline 算法。 由于测试集中的种子项目都是全新的项目,在训练集中均未观察到,没有历史数据,所以无法应用传统的协同过滤算法。我们构建了一个双向 LSTM 模型作为 baseline,该模型的输入同样为两个项目标题的拼接,损失函数与我们算法中 Next Purchase Prediction 部分的损失函数一致。
实验结果如表 1 所示。可以观察到,我们提出的算法大大优于 baseline 算法 。当只针对 Next Purchase Prediction 这一任务对 BERT 模型进行再训练时,Precision@1、Precision@10、Recall@10、NDCG@10 分别高出 baseline 算法 310.9%、96.6%、93.9%和 150.3%。当同时加入 Masked Language Model on Item Titles 这一任务时,各项指标进一步提高了 111.0%、38.6%、38.3%和 64.0%。 由此可以看出,我们提出的以 BERT 模型为基础的基于项目的协同过滤算法具有明显的优越性。
表 1: 实验结果
为了直观地检查算法给出的推荐结果的质量,我们在表 2 中给出了一个例子。种子项目为蜘蛛侠主题的 T 恤,推荐的商品为 T 恤、配套服饰、餐具装饰等,且均为漫威主题。从这个例子可以看到,该算法可以自动地发掘推荐商品的选择标准而无需人工指定,并且可以在专注特定类别与挖掘广泛兴趣之间找到平衡点。
表 2: 推荐结果示例
四、总结
我们以 BERT 模型为基础,结合用户历史行为数据,提出了一种基于项目的协同过滤推荐算法。以标题的 tokens 的向量表征取代唯一 ID 来表示项目,能将相似项目的信息汇聚在一起,解决了传统协同过滤推荐算法中的长尾推荐、冷启动等问题。通过在大规模真实数据上进行实验,证明了该算法在理解项目语义信息和学习大量项目之间的关系方面具有显著优势。
参考文献
[1] J Ben Schafer, Dan Frankowski, Jon Herlocker, and Shilad Sen. 2007. Collaborative filtering recommender systems. In , pages 291–324. Springer.
[2] Greg Linden, Brent Smith, and Jeremy York. 2003. Amazon. com recommendations: Item-to-item collaborative filtering. , (1):76–80.
[3] P Castells, S Vargas, and J Wang. 2011. Novelty and diversity metrics for recommender systems: choice, discovery and relevance. In .
[4] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2018. Bert: Pre-training of deep bidirectional transformers for language understanding. .
[5] Vaswani, Ashish, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, and Illia Polosukhin. 2017. Attention is all you need. In (pp. 5998-6008).
原文链接 :
BERT在eBay推荐系统中的实践