十一、Pinterest Recommender System[2017]

  1. 虽然已经有很多关于高级推荐系统及其实际应用的论文发表,但是通常不可能直接构建 state-of-the-art 的推荐系统。最初的产品initial product 必须用一个小的工程团队、有限的计算资源、以及缺乏训练数据来构建,直到推荐系统被启用 bootstrapped 。工业级的推荐系统通常处理包含数十亿个 itemWeb-scale 数据。由于内容是通过用户隐式反馈 implicit user feedback 收集的,因此内容通常标记不佳并且有很大噪音noisy 。因此,很多从业者在构建初始系统时选择使用临时的启发式方法 heuristicstrade-off 。但是,系统的进一步增长grow 会使得系统迅速复杂化,从而难以应对接下来的变化。

    在论文 《Related Pins at Pinterest: The Evolution of a Real-World Recommender System》 中,作者给出了在 Related Pins 背景下以独特的机会在三年的时间范围内观察这些问题。Related Pins 的初始版本是在 2013 年推出的,是 Pinterest 首次进入推荐系统的尝试之一。尽管在改善内容发现 content discovery 取得了成功,但是 Related Pins 最初在工程上受到的关注很少。2014 年,Pinterest 上大约 10%pins saved 是通过 Related Pins 发现discovered 的。2015 年,一个小团队开始迭代并进一步开发 Related Pins。现在,Related Pins 通过多个产品界面product surfaces 推动了超过 40% 的保存save 和曝光 impression ,并且是 Pinterest 上的主要发现机制primary discovery mechanisms 之一。论文通过对 Related Pins 的纵向研究,探索了现实世界中推荐系统的挑战。在描述 Pinterest 系统的逐步演变时,作者提出了应对这些挑战的解决方案、trade-off 的理由、以及学到的关键洞察key insights

    现实世界的推荐系统已经作为音乐推荐 music suggestion、图像搜索 image search 、视频发现video discovery、电影发现 movie discovery 。其中很多论文描述了 final system,然而并没有描述如何逐步增量地incrementally 构建系统。《Hidden technical debt in machine learning systems》 描述了现实世界推荐系统面临的很多挑战,我们提供了在 Related Pins 中这些挑战的具体例子,并提出了独特的解决方案。

    • 对于 Related Pins ,我们首先考虑最简单、性价比最高highest-leverage 的产品,从而达到增量式的里程碑incremental milestones 并证明可行性 viability。我们最初的推荐算法由一个简单的候选生成器candidate generator 以及很多启发式规则 heuristic rules 组成。尽管它仅在三周内建成,但是它利用了 user-curated boards 中的强烈信号strong signal 。我们继续添加更多的候选源candidate sources,因为我们发现了覆盖率 coverage 和召回率recall 之间的gap
    • 随着时间的推移,我们引入了 memorization layer 来提高热门的结果popular resultsMemboost 在工程复杂度和计算强度方面都是轻量级的,但是它能显著地利用大量的用户反馈user feedback 。我们不得不考虑位置偏差 position bias ,并以反馈回路 feedback loops 的形式处理复杂性complexity ,但是发现付出的代价是值得的。
    • 接下来我们添加了一个机器学习的 ranking 组件,因为我们认为它具有最大的影响潜力。我们从只有九个特征的基础线性模型开始。当我们发现模型和训练方法的缺点时,我们开始尝试使用更高级的方法。

    每个组件最初都是在工程和计算资源上有很多限制的情况下构建的,因此我们优先考虑了最简单和最高效的解决方案。我们展示了有机增长organic growth 如何导致一个复杂的系统,以及我们如何管理这种复杂性。

11.1 系统介绍

  1. Pinterest 是用于保存saving 和发现 discovering 内容content 的可视化发现工具visual discovery tool 。用户将他们在 Web 上找到的内容另存为 pins,并在 boards 上创建这些 pins 的集合。

    Related Pins 利用这些人类收藏的human-curated 内容基于给定的 query pin 来提供个性化的 pin 推荐。下图给出了 pin 特写视图pin closeup view

    Pinterest 其它几个部分也包含 Related Pins 推荐,包括主页feedhome feed 、访客(身份未验证的访问者)的 pin page 、相关想法related ideasinstant ideas 按钮、电子邮件email、通知 notification、搜索结果 search result 、浏览选项卡Explore tab

  2. Pinterest 上的用户互动user engagement 通过以下操作来定义:

    • 用户通过点击来查看有关 pin 的更多详细信息从而特写closeup 这个 pin
    • 然后,用户可以点击从而访问关联的 Web 链接。如果用户长时间 off-site,那么被视为长按 long click
    • 最后,用户可以将 pin 保存到自己的 board 上。

    我们对推动相关pin 的保存倾向 Related Pins Save Propensity 很感兴趣,它的定义是:保存 Related Pins 推荐的 pin 的数量除以用户看到的 Related Pins 推荐的 pin 的数量。

  3. Pinterest 数据模型data model 中,每个 pin 都是一个带链接link 和描述文本description的图像实例 image instance ,其中图像是通过一个图像签名 signature 来唯一标识的。尽管每个 pin 位于单个 board 上,但是同一个图像可以用于不同 board 上的很多 pin :当 pin 保持到一个新的 board 上时,会创建该 pin 的拷贝。

    pin 信息通常在image signature level 上进行汇总,从而提供了比单个pin 实例相比更丰富的元数据 meta-data (比如pin 粒度的点击量、保存量)。为方便起见,将来对 query pinresult pin 的引用实际上指的是 pin 的集合,该集合中的pin 具有相同image signature

  4. Related Pins 系统包含以下三个主要组件components 。随着时间的推移,这些组件已经被陆续引入到系统中,并且每个组件以各自的方式发生了巨大的演变 。下图给出了我们体系结构的各种快照snapshots ,说明了整个系统以及三个组件的演变 evolution。本文后续部分将更详细地探讨它们的发展。

    • Candidate Generation组件:我们首先将候选集合candidate set(符合Related Pin 推荐的pin 集合)的范围从数十亿缩小到大约 1000 个可能和 query pin 相关relatedpin

      我们已经开发并迭代了几种不同的候选生成器 candidate generators 来做到这一点。

    • Memboost 组件:我们系统的一部分会记住历史上特定queryresultpair 对上的互动。我们描述了在使用历史数据时,如何通过使用点击除以期望点击的方式来解决位置偏见position bias 问题。

      引入记忆会增加带有反馈回路feedback loops 系统的复杂性,但是会显著提高互动 engagement

    • Ranking 组件:我们应用一个机器学习的 ranking modelpin 上,对这些pin 排序从而最大化我们的 Save Propensity 的目标互动指标 target engagement metric 。该模型结合了query 特征、candidate pins 特征、用户画像特征、session 上下文特征、Memboost 信号等特征的组合。

      我们采用了 learning-to-rank 技术,采用历史用户互动user engagement 来训练系统。

11.2 Candidate Generation 的演变

  1. 最初的 Related Pins 系统仅包含一种形式的候选生成 candidate generation:通过抽取经常共现co-occurringpins 来利用 pin-board graph 。这些候选pins 作为推荐直接显示给用户(上图的 (a) )。

    后来我们引入了 Memboostmachine-learned ranking 时,候选生成的问题从 precision 转移到了 recall:生成和 query pin 相关的各种各样diversepins 集合。由于我们发现了覆盖率 coverage 和召回率 recall 方面的差距,这导致我们添加了新的候选源 candidate sources(上图的 (d) )。

11.2.1 Board 共现

  1. 我们主要的候选生成器candidate generator是基于用户收藏的 user-curated boardspinsgraph ,但是随着时间的推移我们改变了这个方法从而产生更相关relevant 的结果并覆盖更多的 query pins

  2. 启发式候选Heuristic Candidates :原始的 Related pins 是在离线 Hadoop Map/Reduce 作业中计算的。我们输入boards 的集合,输出在同一个 board 上共现的 pin pair 对。由于有太多的 pin pair 对,因此对于每个 pin query 我们随机采样这些 pair 对从而为每个pin query 产生大致相同数量的候选。

    随机采样时,共现次数越高的 pin pair 对被采样到的可能性越高,因此相当于选择 top 共现次数的 pin pair 。但是基于采样的方法避免了对 pin pair 的共现计数、以及对计数结果的排序。

    我们还基于粗略rough 的文本和类目category 匹配来添加启发式的相关性得分heuristic relevance score 。这个相关性得分是通过检查示例结果example results 来手动调优 hand-tuned 的。

    我们选择该方法是因为它很简单。由于工程资源有限,该方法是由两名工程师在短短三周内实现的。另外,由于人类收藏human-curated board graph 已经是非常强烈的信号,因此该方法被证明是一种相当有效的方法。

  3. 在线随机游走Online Random Walk:我们发现:

    • board 共现co-occurrence 越高候选item 质量越好,如下图所示。

      然而,原始的方法主要是基于启发式得分heuristic score,它并没有试图最大化 board 共现。

    • 我们还注意到,罕见rarepin (仅出现在少量board 上)没有太多的候选item

    为了解决这些局限性,我们通过在线遍历 board-to-pin graph ,在 serving time 生成候选 item

    现在我们使用一个叫做 Pixie 的随机游走服务random walk service 来生成候选itemPixie 完整的描述不在本文讨论范围之内,但是从广义上讲,Pixiepins & boards 二部图bipartite graph 加载到一台具有大存储容量的机器上。二部图的边代表一个 board 关联了一个 pin 。我们根据一些启发式规则heuristic rules 裁剪该二部图,从而在 board 上删除 high-degree 节点和 low-relevance 节点。Pixiequery pin 开始在二部图上进行多次随机游走(大约 100,000 步),并在游走的每一步都有 reset 概率,最终汇总 pin 的访问次数。这样可以有效地计算出二部图上 query pinPersonalized PageRank

    该系统可以更有效地利用 board 的共现,因为高度相关联highly connectedpins 更可能被随机游走访问到。它还可以增加罕见pins 的候选覆盖率candidate coverage,因为它可以检索距离 query pin 好几个hops 的候选item

    pins 的共现代表了 pin-board-pin 的二阶邻近性,而随机游走方法可以检索 pin-board-pin-board-pin 这类的高阶邻近性从而提高罕见 pins 的候选覆盖率。

11.2.2 Session 共现

  1. board 共现在生成候选集时提供了良好的召回recall,但是死板 rigid 的、基于 board 的分组具有固有的缺陷inherent disadvantages

    • boards 通常过于宽松broad,因此board 上的任何 pin pair 对可能仅仅是很微弱地相关。对于生命周期很长的 boards 而言尤其如此,因为 board 的主题 topic 会随着用户的兴趣而漂移drift
    • boards 也可能过于狭窄narrow 。例如,威士忌和用威士忌调制的鸡尾酒可能被安排在不同的、但是相邻的 boards 上。

    这两个缺点可以通过结合用户行为的时间维度temporal dimension 来解决:在同一个会话session 期间保存的 pins 通常以某种方式关联。我们建立了一个名为 Pin2Vec 的额外侯选源 candidate source ,从而利用这些 session 共现 co-occurrence 信号。

    Pin2Vec 是在 d 维空间中嵌入 N 个最热门的 pins 的一种学习方法,目标是将同一个 session 中保存的pins 之间的距离最小化。Pin2Vec 神经网络的架构类似于 Word2Vec。学习问题learning problem 被表述为 N 路分类问题,其中输入和输出均为 Npins 之一,如下图所示。

  2. 为了产生训练数据,我们认为同一个用户在特定时间窗口内保存的 pins 是相关的。每个训练样本都是这样的一对 pins

    给定 pin pair 对的其中一个 pin 作为输入,一个 embedding matrixpin ID 映射到 d 维向量,然后一个 softmax layerembedding 向量映射回预测的输出pin ID 。这个 pair 对的另一个 pin 作为预期的输出,然后我们通过最小化网络的交叉熵损失来训练 embedding 。我们还使用负样本采样从而使得训练过程更简单。

    • 模型是通过 TensorFlow 来构建和训练的,结果得到了 Npins 中每个 pindembedding
    • serving 时,当用户queryNpins 中的某个时,我们通过在 embedding 空间中查找 query pin 最近的邻居来生成候选集。
    • 我们发现,session-based 候选集和 board-based 候选集结合起来会大大提高相关性 relevance 。从概念上讲,session-based 方法以紧凑compact 的向量 representation 捕获了大量用户行为。

11.2.3 补充的候选

  1. 在取得上述进展的同时,出于两个原因,我们开始开发新的候选生成技术:

    • 首先,我们想解决冷启动问题:罕见pins 没有很多候选,因为它们没有出现在很多 boards 上。
    • 其次,在添加了 Ranking 模块之后,我们希望在结果的多样性 diversity 带来更多互动 engagement 的情况下扩大我们的候选集。

    出于这些原因,我们开始利用其它的 Pinterest discovery 技术。

  2. 基于搜索的候选search-based candidates:我们利用 Pinteresttext-based search 来生成候选,其中使用 query pin 的注释annotations (来自于 web link 或者描述descriptioin 的单词)作为 query tokens 。每个热门的 search query 都有 Pinterest Search 提供的预计算的 pin 集合来支持。

    这些基于搜索的候选相对于基于board 共现的候选而言相关性较低,但是从探索exploration 的角度来看,这是一个不错的折衷trade-off 方案:基于搜索的候选产生了更多样化diversepin 集合,而且这些 pin 集合仍然和 query pin 具有相关性。

  3. 视觉相似的候选visually similar candidates:我们有两个视觉候选源。

    • 如果某个imagequery image 是几乎重复 near-duplicate 的,那么我们将该image 添加到 Related Pins 推荐结果中。
    • 如果没有和 query image 几乎重复的image,那么我们使用 Visual Search 后端基于 query image embedding 向量的最近邻查找lookup来返回视觉相似的 image

11.2.4 分区的候选

  1. 最后我们要解决内容激活问题content activation problem :罕见的pins 不会作为候选pins 出现,因为它们不会出现在很多 board 上。

    Pinterest 开始专注于国际化时,我们希望向国际用户展示更多的以他们自己语言的结果。大部分内容是来自美国的英语。尽管确实存在本地化内容 local content,但是这些内容不是很热门,也没有链接到热门的 pins ,因此不会被其它侯选源来生成。

    为了解决这个问题,我们为上述许多生成技术生成了按本地化分区 segmented by locale 的附加 additional 候选集。例如,对于 board 共现,我们将 board-pin graph 的输入集合过滤为仅包含本地化 localepins

    这种方法也可以扩展到存在内容激活问题的其它维度,例如特定于性别gender-speci fic 的内容或者新鲜fresh 的内容。

11.3 Memboost 的演变

  1. 最初的 Related Pins 版本已经获得了大量的互动engagement 。作为从大量互动日志中学习的第一步,我们构建了 Memboost 来记住每个query 的最佳 pins 结果。我们选择在尝试全面学习之前实现Memboost,因为它更轻量级 lightweight ,并且我们直觉上相信它会有效。

  2. 我们最初只是想简单地合并每个结果的历史点击率historical click-through rate。但是,日志数据容易受到位置偏见 position bias 的影响:显示在更前面位置的 item 更容易被点击。下图说明了每个平台platform 上不同 rank 的全局点击率的 bias (排名越小则显示越靠前)。为解决这个问题,我们选择了计算 clicks over expected clicks: COEC

  3. COEC:令 result pin rquery pin q 上获得的总点击量。令 为平台 rank result pin rquery pin q 上获得的总曝光量。每个曝光贡献了一定比例的期望点击expected clicksresult pin rquery pin q 上的期望点击量为:

    其中 为平台 rank 的全局先验global prior 的点击率。

    这里面的 是根据统计数据计算而来。上面公式的物理意义为:点击 = 曝光 x ctr ,但是对 platformrank 求积分。

    我们将这些定义扩展到其它互动行为(不仅仅是点击),将这些互动行为的权重设为

    现在 为对所有互动行为泛化的 COEC

  4. Memboost score:为了获得一个 zero-centered score,其中正值和负值分别表示结果比期望多互动多少和少互动多少,我们使用 COEC 的对数。

    另外我们还引入平滑来处理低互动或低曝光的 item 。因此,总体的 Memboost score 为:

    Memboost score 用于调整现有的 pin score,并根据调整后的 score 来排序得到最终结果:

    历史上,Memboost 权重 通过 A/B test 来人工调优hand-tuned ,从而最大化互动engagement 。然而,这种做法会给评分函数带来不良的耦合影响:尝试使用新的 ranker 或者改变评分函数可能会产生更大或更小的初始得分 initial scores,从而无意中改变了 Memboost 权重的相对大小。人工调优的权重对于新的条件condition (系统改变、不同的时间段等等)不再是最优的。

    每次改变 时,都需要重新调优 Memboost 的超参数。

    为了消除这种耦合,我们现在在改变模型时共同训练 Memboost 参数。我们将 Memboost 作为特征, Memboost 的临时变量取值(clicksEclicks 等等)作为特征馈入到基于机器学习的 ranker 中。

  5. Memboost Insertion:有时,已知某些 item 是好的(基于它们的 Memboost scores ),但是由于候选生成器和 ranking sytem 等上游的变化,这些 item 不再出现在候选结果中。

    为了处理这些情况,我们设计了一个 Memboost insertion 算法。该算法将 Memboost score 最高的 top-n item 插入到候选结果中,如果这些item 并未出现在候选结果中。

    Memboost 结果作为一路召回。Memboost 本质上就是记忆性 memorization,它会记住历史上表现好的(query pin q, result pin r) 。由于模型通常综合考虑了 memorizationgenerization ,因此一些历史表现好的 pair 可能会被稀释掉。

  6. Memboost 作为一个整体,通过在系统中添加反馈回路 feedback loops ,显著增加了系统的复杂性。从理论上讲,它可以破坏corrupting 或者稀释diluting 实验结果:例如,实验中的正样本可能被挑选出来并泄漏到控制组和对照组(因为控制组和对照组都收到了反馈回流的 Memboost 数据)。重新评估历史的实验(例如添加了新的模型特征)变得更加困难,因为这些实验的结果可能已经被记住了。

    这些问题存在于任何基于记忆memorization-based 的系统中,但是 Memboost 具有显著的正向效果,因此我们也就接受了这些潜在的不足。

  7. 我们目前正在实验替代 Memboost insertion 的方法。Memboost insertion 会减缓开发速度development velocity ,因为有害harm 结果的实验可能不再显示为负向的 A/B test 结果。而且新的 ranking 方法的试验效果可能被稀释,因为 top 结果可能被Memboost insertion 所主导。 Memboost insertion 也可以无限期地维持候选items ,即使候选生成器不再生成这批候选 items (这批候选 itemsMemboost insertion 产生,并始终在线上生效)。

    一种常见的替代 memorization 方法是将 item id 作为 ranking 特征。但是,这需要一个大的模型(模型规模和被记忆的 item 数量呈线性关系),因此需要大量的训练数据来学习这些参数。这样的大型模型通常需要分布式训练技术。取而代之的是,Memboost 预先聚合了每个result 的互动统计量engagement statistics,这使得我们能够在单台机器上训练主力 ranking 模型。

11.4 Ranking 的演变

  1. 在引入 Ranking 之前,Candidate GenerationMemboost 已经工作了相当长的一段时间。我们假设下一个最大的潜在提升 potential improvement 将来自于我们在系统中添加一个 ranking 组件,并应用 learning-to-rank 技术。

    第一个 learning-to-rank 模型大幅度提升了 Related Pins 的互动engagement ,使得用户保存save 和点击click 结果提升了 30% 以上。

  2. 在我们的application 中,ranker 在特定query 的上下文中对候选 pins 进行重新排序re-order。其中 query 包括 query pin、浏览的用户、以及用户上下文user context 。这些 query 部分和候选 pin 各自贡献了一些异质heterogeneous 的、结构化structured 的原始数据,例如注释annotations、类目categories、或者最近的用户活动user activity 。如下表所示,给出了ranking feature extractor 中样本可用的原始数据。

    我们定义了很多特征抽取器feature extractors ,这些特征抽取器输入原始数据并生成单个特征向量

    • 某些特征抽取器直接将原始数据拷贝到特征向量中,例如topic 向量和 category 向量。
    • 另一些特征抽取器则计算原始数据的变换,如 Memboost 数据的归一化normalized 或者 re-scaled 的版本。
    • 一些特征抽取器将 one-hot encoding 应用于离散字段 categorical fields,例如性别、国家。
    • 最后,一些特征抽取器计算匹配分match scores,例如 query pincandidate pin 之间的类目向量 category vector 的余弦相似度,或者 query imagecandidate image 之间的 embedding 距离。

    ranking 模型 输入特征向量并产生最终的 ranking score。这个 ranking 模型是从训练数据中学习的,其中训练数据在后文中描述。

  3. 我们的第一个 ranking 系统仅使用 pin 原始数据。随着我们获得了额外的工程能力来构建必要的基础架构,我们将更多数据(如 Memboost 数据和用户数据)引入到 ranking 系统。我们还引入了从用户最近活动recent activities 中抽取的个性化特征,如用户最近的search query

11.4.1 选择

  1. 在构建 ranking 系统时,我们面临三个重大largely 的正交orthogonal 的决策:

    • 训练数据集收集方法training data collection method
    • 学习目标函数learning objective
    • 模型类型model type

    正交指的是决策之间互不影响。

  2. 训练数据集收集:我们探索了训练数据的两个主要数据源:

    • Memboost scores 作为训练数据。从概念上讲,在没有足够日志数据来进行可靠的 Memboost 估计 estimate 的情况下,ranker 可以学习预测 query-result pair 对的 Memboost scores

      即,对于无法从日志数据计算 Memboost scoresquery-result pair 对,可以通过模型来预测。

    • 单个 Related Pins session: 会话session 定义为单个用户以单个 query pinRelated Pins 进行交互的结果。我们可以将这些交互直接作为训练数据的样本。

  3. 模型目标函数:在 《Learning to rank for information retrieval》 中,learning-to-rank 方法大致可以分为 point-wise 方法、pair-wise 方法、list-wise 方法。这些方法之间的主要区别在于:损失函数是一次考虑一个候选item 、两个候选item 、还是多个候选item

    在我们的工作中,我们探索了 point-wise 方法和 pair-wise 方法,如下表所示。

  4. 模型形式formulation :模型的精确precise 形式 form 决定了模型来描述特征和score 之间复杂关系的能力。下表比较了我们使用的两种模型类型model types

11.4.2 决策演变

  1. 下表给出了我们在 Related Pins Ranking 中探索的训练数据、目标函数以及模型的各种组合。

  2. 第一版V1Memboost 训练数据、相关性pair 标签relevance pair labelspair-wise 损失函数、线性 RankSVM 模型。

    在我们的第一版中,我们选择使用 Memboost 数据,因为我们发现 Memboost 数据是高质量的信号:它是在很长一段时间内数百万用户行为的聚合。

    我们为每个query 显式采样 pair,其中:

    • 是针对 query pinMemboost scores 最高pin
    • 是针对 query pinMemboost scores 最低 pin
    • 是从 Pinterest 随机采样的一个热门的 pin ,用于稳定排名(如论文 《Optimizing search engines using clickthrough data》 所示)。

    我们认为,由于候选生成器提供了一定程度的相关性relevance ,因此具有较低 Memboost scorespin 仍然比随机 pin 更相关relevant

    当我们从 Memboost 数据中人工检查 pair 对时,我们发现大约 70% 的时间可以猜测哪个 pinMemboost score 更高。这表明训练数据是相当干净clean 的 。相比之下,从每个user session 中采样的 pair 对的噪声很大,我们无法确定用户保存了两个pin 中的哪一个。

    因此,我们可以使用一个小得多的语料库,并且在几分钟之内在单台机器上训练一个模型。

  3. 第二版V2:转向单个individualRelated Pins sessions

    我们希望使用用户特征和上下文特征,但是使用 Memboost 数据固有地inherently会排除个性化,因为 Memboost 数据是在很多用户上聚合的,从而失去了与单个用户以及 session 上下文的关联。此外,我们发现只有热门的内容才具有足够的交互,从而提供可靠的 Memboost 数据。这些局限性促使我们转向单个 Related Pins sessions

    每个记录loggedsession 均由 query pin、浏览的用户、最近的动作上下文 action contextresult pins 列表a list of result pins来组成。每个 result pin 还具有一个对应的互动标签engagement label(可以为以下之一:仅仅曝光impression、特写closeup、点击click、长点击 long click、保存 save)。

    出于训练的目的,我们裁剪记录loggedpin 集合,按照 rank order 取每个互动的 pin 以及紧紧排在它前面的两个前序的 pins 。我们假设用户可能看到了紧紧排在互动pin 之间的前序pins

    V2 版中,我们继续使用 pair-wise 损失,但是pin relevance pairs 由动作的相对顺序来定义:save > long click > click > closeup > impression only

  4. 第三版 V3:转向一个 RankNet GBDT 模型。

    我们发现,简单的线性模型能够从 ranking 中获得大部分的互动增益engagement gain。但是,线性模型有几个缺点:

    • 首先,它迫使 score 和每个特征的依赖关系为线性的。为了让模型表达更复杂的关系,工程师必须人工添加这些特征的转换(分桶 bucketizing、分区间percentile、数学转换mathematical transformations、归一化normalization)。

    • 其次,线性模型无法添加仅依赖于 query pin 而不依赖于候选 pin 的特征。例如,假设特征 代表一个类似于 query category = Art 的特征,每个候选 pin 将具有相同的特征(因为 query 是同一个),所以对于ranking 结果毫无影响。

      query-specific 特征必须和候选pin 的特征进行手动交叉,例如添加一个特征来表示 query pin category + candidate pin category 。设计这些交叉特征费时费力。

    为避免这些缺点,我们转向梯度提升决策树gradient-boosted decision trees: GBDT

    除了允许对单个特征进行非线性响应外,决策树还固有地考虑了特征之间的交互,这对应于树的深度。例如,可以对推理reasoning 进行编码,如 “如果 query pin categoryArt ,那么视觉相似性应该是更强的相关性信号 relevance signal” 。通过自动学习特征交互feature interactions,我们消除了执行人工特征交叉的需要manual feature crosses ,加快了开发速度。

  5. 第四版V4:转向 point-wise 分类损失、二元标签binary label、逻辑回归 GBDT 模型。

    尽管我们最初选择了 pair-wise learning,但是我们也已经在 point-wise learning 中取得了良好的结果。由于我们在线实验的主要目标指标target metric 是用户保存 result pin 的倾向 propensity ,因此使用包含 closeupsclicks 的训练样本似乎会适得其反,因为这些动作可能不会影响保存倾向save propensity

    我们发现给样本提供简单的 binary 标签(saved 或者 not saved ),并且重新加权 reweighting 正样本来对抗类别不平衡,这在增加保存倾向方面被证明是有效的。将来,我们仍然可以使用不同的 pair 采样策略来实验 pair-wise ranking loss

11.4.3 Previous-Model Bias

  1. 在我们努力改进 ranking 的过程中,我们遇到了一个重大的挑战。因为互动日志engagement logs 用于训练,所以我们引入了直接反馈环direct feedback loop,如论文 《Hidden technical debt in machine learning systems》 所述:当前部署currently deployed 的模型极大地影响了为将来模型future models 生成的训练样本。

    我们直接观察到了这个反馈环的负面影响negative impact 。当我们训练第一个 ranking model 时,日志反映了用户对仅由候选生成器排序的结果的互动。所学的模型被用于对这批候选进行排序。在接下来的几个月里,训练数据只反映了现有模型中排序较高的 pins 的互动(如下图(a) 所示)。

    当我们尝试使用相同的特征和最近的互动数据来训练一个模型时,我们无法击败已经部署的模型。我们认为反馈环带来了一个问题,即训练时 pin 分布和 serving 时的 pin 分布不再匹配。

    训练时的 pin 分布:由老模型产生;serving 时的 pin 分布:由新模型产生(由新模型排序并截断)。

  2. 为了缓解训练数据中的 previous-model bias,我们为 unbiased data collection 分配了一小部分流量:对于这些请求,我们显示了来自所有候选来源的随机样本,并且没有 ranking 而随机排序。这将训练数据和之前的模型隔离开来(如上图(b) 所示)。

    虽然未排序unrankedresult 质量较低,但是它们为训练新的 ranking model 提供了有价值的数据。为了避免过多降低任何特定用户的体验,每个用户只在一小部分随机query 中获取未排序的 pins 。尽管训练数据的数量被限制在总流量的这一小部分,但是最终得到的模型要比用有偏的数据biased data 训练的模型表现得更好。

    仅用这 1% 的随机流量来训练模型,会不会因为数据量太低而降低模型效果?一种方法是:将这 1% 流量的样本加权(比如加权 10 倍),然后和剩余 99% 流量的样本一起训练。

11.4.4 衡量指标

  1. 能够探索这些不同选项的一个重要step 是能够快速迭代。测试变更效果的金标准gold standard 是在线 A/B test 实验,其中我们主要根据 save propensity 来评估 ranking

    所有的变更都要经过在线实验,但是在线 A/B test 通常需要几天或者几周的时间来收集数据。我们认为,通过离线评估来马上测试变更效果从而近似approximate 不同模型的性能是有帮助的。在这个过程中,我们重复使用了很多训练数据生成器来采样每个 Related Pins sessions(即,生成训练集),但是选择了一个紧跟着训练日期的不同日期范围、以及一个和训练采样策略稍微不同的采样策略(即,生成测试集)。对于每个session,我们使用被测模型对用户实际看到的pins (即,label )进行重新打分rescore(即,预测),然后评估预测的 score 和记录的用户行为之间的一致性。

  2. 我们已经尝试了多种度量方法,包括 normalized discounted cumulative gain: NDCGPR AUC

    为了确定这些离线指标在多大程度上预测了在线 A/B test 影响,我们检查了我们过去几次 ranking model 变更的结果。我们检查了通过离线评估预测差异(即新模型和 baseline 模型在测试集评估指标上的差异)的方向和大小,并将其与实际实验结果进行比较。我们发现:PR AUC 指标对于 A/B test 实验中的 closeupsclick-throughs 具有极强的预测性,但是我们很难用离线评估来预测 save 行为。

    目前,我们将离线指标用作健全性检查sanity check 和潜在影响potential impact的粗略估计rough estimation

11.4.5 Serving 架构

  1. Related Pins 在峰值负载下每秒可以处理数万个query。为了处理这种规模,我们利用了几个现有的 Pinterest 系统。

  2. 我们的第一版 pin ranking 是在离线的 Map-Reduce 作业中预计算pre-computed的,并由 Terrapin 提供服务(这是一个不可变的 key-valuelookup service )。这需要大量的 Map-Reduce 作业来为每个 querycandidatejoin 原始数据、计算特征、并对 item 进行打分。

    由于集群的限制,我们一次只能对几百万个 query 进行rank,从而覆盖了 50% 的用户 query 。我们通过一次在不同的segments 上运行 reranking 作业并合并结果来 scale up,但是这种方法本质上inherently 无法在合理reasonable 的时间内提供完全覆盖。

    离线排序也显著降低了开发速度:每个变更模型的实验(特征开发、训练数据变更)都需要离线重新排序reranking 所有的 query,这是一个耗时的过程。

  3. 为此,我们转向在线 ranking serving systempin 的原始数据存储在叫做 RealPin 的分片shardedkey-value store 中,通过image signature 作为key

    为了执行ranking,我们将一个请求request 和计算特征和score 所需的候选pins 列表、其它原始数据组装assemble 在一起:query pin 原始数据(从 RealPin 检索到)、离线的用户原始数据(从 Terrapin 而来)、最近的用户活动(从一个叫做 UserContextServiceservice 而来)。

    • RealPin root server 将请求复制到 RealPin leaves server,将合适的候选子集路由到每个leaf server

    • leaf server 在本地检索 pin 原始数据,并调用我们自定义的特征抽取器custom feature extractorscorer

      注意:leaf server 存储了 pin 的原始数据。

    • leaf server 发送 top 候选以及相应的 scoreroot server,然后由root server 收集并返回全局的 top 候选集。

    我们选择了这种 serving 架构来提高数据局部性 data locality 。基于 Hadoop 的系统在每次query 时都需要传输大量的pin 原始数据。我们还看到,由于 pin 原始数据的传输,其它的 online pin scoring 系统受到网络的限制。通过将计算下推到存储候选pin 原始数据的节点,可以避免大量的数据传输。

11.5 挑战

  1. Changing Anything Changes Everything:根据《Hidden technical debt in machine learning systems》,机器学习系统固有地会纠缠信号tangle signals。输入从来都不是真正独立的,这就产生了 Changing Anything Changes Everything: CACE 原则:系统的一个组件可以针对系统的现有状态进行高度优化。改进另一个组件可能会导致整体性能下降。这是一个 system-level 的局部最优点 local optimum,可能会使得进一步的进展变得困难。我们的通用解决方案是为每个实验联合 train/automate 尽可能多的系统。

    我们提供了一些例子,这些例子说明了在我们的简单推荐系统中出现的这一特殊挑战,以及我们的缓解措施。

    • 例子一:在我们的推荐系统 pipeline 的各个阶段中使用了很多超参数。回想一下,我们使用手动调优hand-tuned的权重对 Memboost 进行调优,并通过耗时耗力的 A/B test 来进行优化。随着系统其它部分的改变,这些很快就过时了。联合训练 Memboost 权重避免了这个问题。同样地,ranking learner 也有需要调优的超参数。

      为了避免导致超参数变得次优 sub-optimal的其它变更,我们实现了一个用于自动调参automated hyperparameter tuning 的并行系统。因此,我们现在可以在每次变更模型时调优超参数。

    • 例子二:对原始数据的 “改进” 可能会损害我们的结果,因为我们的下游模型是基于旧的特征定义进行训练的。即使修复了一个 bug(例如在计算 pin 的类目向量时),我们现有的模型将依赖于有缺陷的特征定义,因此这个 fix 可能会对我们的系统产生负面影响。如果变更来自于另一个团队,这尤其会成为问题。在《Hidden technical debt in machine learning systems》中,这被称作不稳定的数据依赖unstable data dependency

      目前,我们必须使用更新后的原始数据手动重新训练我们的模型,同时将新模型和更新后的原始数据部署到生产环境中(因为在线部署时需要获取样本特征,所以要将原始数据部署到线上)。除了耗时之外,这个解决方案也不太理想,因为它需要我们了解上游的变化。理想情况下,我们将自动对我们的模型进行连续的再训练 continual retraining,从而将上游数据upstream data 的任何变化考虑进来。

    • 例子三:最后,我们经历了 candidate generationranking 之间复杂的相互依赖关系。模型变得和训练数据的特点相协调。例如,变更或引入一个 candidate generator 会导致 ranker 的恶化,因为训练数据的分布不再和 serving 时的 ranking 数据的分布相匹配。这是我们在训练数据收集中看到的一个问题。

      如果引入一个 candidate generator 无法提高性能,那么如何确定这是由于 candidate generator 性能较差、还是由于ranker 并没有针对这个 candidate generator 的候选上训练过?

      我们目前的解决方案是:在用新训练的模型运行实验之前,将candidate generator 得到的候选插入训练集一段时间。

      这种方案一次改变一个变量:先固定 ranking 模型,仅改变 candidate generator ;然后固定 candidate generator ,重新训练 ranking 模型。

      这个问题强调了尽可能简化系统的必要性,因为可能的非预期交互unintended interactions 的数量随着系统组件的数量而迅速增加。

  2. 内容激活:有大量的内容没有互动量,但是这些内容可能是潜在相关potentially relevant 的和高质量 high quality 的。每天都有数百万张新图像上传到 Pinterest。此外还有大量的 dark 内容,这些dark 内容是高质量的,但是很少出现。

    平衡fresh or dark 内容和完善的、高质量的内容,这代表了经典的探索和利用问题 explore vs exploit problem 。这是 Pinterest 的一个开放问题。我们深入探讨了如何针对本地化localization 的情况解决内容激活 content activation 问题。

    由于 Pinterest 是一种日益国际化的产品,因此我们特别努力确保国际用户能够看到他们自己语言的内容。出于两个主要原因,使得Related Pins 本地化很困难:

    • 首先,一开始就没有多少本地化的候选,因为这些本地化内容并没有出现在很多 board 上。
    • 其次,本地化内容的历史互动要少得多,这导致我们的模型对本地化内容的排名更低,即使我们确实有本地化的候选。(即数据稀疏导致的冷启动问题)

    我们尝试了几种方法来解决这些问题,最终能够将本地化 result的占比从 9% 增加到 54% ,如下图所示。

    • Local pin swap:对于我们生成的每个相关relatedpin,我们检查是否存在具有相同图像的本地化替代local alternative 。如果存在,那么我们将result pin 换本地化替代的pin

      结果,我们增加了本地化的pin 曝光、以及本地化的 pin save,而不会改变结果的相关性。

    • Local pin boost:当返回的候选集中存在和浏览者相同语言的 pin (即本地化的pin )时,我们试图人为地将本地化的pin 的排名提升到 result set 中更高的位置。

      事实上证明这并不是特别有效,因为此时的候选集并没有包含很多本地化的 pin,因此该解决方案的覆盖率coverage 较低。

    • Localizing candidate sets:我们修改了 board-based 的候选生成方法,从而在 pin 采样之前对语言进行过滤,并生成针对每种语言的 segmented corpus

      此外,为了增加对这些本地化的 pin 的曝光,我们选择以不同的比例将本地化的候选混合到 result 中。

    这些手段都是基于业务策略的方法,而不是基于模型的方法。基于模型的方法是后验的、数据驱动的,基于策略的方法是先验的、规则驱动的。当冷启动或其它数据稀疏场景时,策略方法要优于模型方法。

十二、DLRM[2019]

  1. 个性化personalization 和推荐系统 recommendation systems 目前已经被部署在大型互联网公司的各种任务中,包括广告点击率预估CTR prediction 和排序 ranking。尽管这些方法已经有很长的历史,但是直到最近这些方法才包含神经网络。有两个基本观点primary perspectives 有助于个性化和推荐的深度学习模型的架构设计architectural design

    • 第一种观点来自推荐系统。这些系统最初采用内容过滤content filtering,其中一群专家将产品划分为不同的类目categories,用户选择他们喜欢的类目,而系统根据用户的偏好进行匹配。

      该领域随后发展为使用协同过滤collaborative filtering,其中推荐是基于用户历史的行为,例如对item 的历史评分。

      邻域 neighborhood方法通过将用户和item 一起进行分组grouping 从而提供推荐。

      潜在因子latent factor方法通过矩阵分解技术从而使用某些潜在因子来刻画用户和item

      这些方法后来都取得了成功。

    • 第二种观点来自预测分析 predictive analytics,它依靠统计模型根据给定的数据对事件的概率进行分类classify 或预测predict

      预测模型从简单模型(例如线性模型和逻辑回归)转变为包含深度网络的模型。为了处理离散数据categorical data ,这些模型采用了 embedding 技术从而将 one-hot 向量和 multi-hot 向量转换为抽象空间abstract space 中的稠密表示dense representation 。这个抽象空间可以解释为推荐系统发现的潜在因子空间space of the latent factors

    在论文 《Deep Learning Recommendation Model for Personalization and Recommendation Systems》 中,论文介绍了一个由上述两种观点结合而成的个性化模型。该模型使用 embedding 来处理代表离散数据的稀疏特征sparse features、使用多层感知机multilayer perceptron: MLP 来处理稠密特征 dense features,然后使用 《Factorization machines》 中提出的统计技术显式的交互interacts 这些特征。最后,模型通过另一个 MLP 对交互作用进行后处理post-processing从而找到事件的概率。

    作者将这个模型称作深度学习推荐模型 deep learning recommendation model: DLRM,如下图所示。该模型的 PyTorchCaffe2 的实现已经发布。

    此外,作者还设计了一种特殊的并行化方案,该方案利用 embedding tables 上的模型并行性model parallelism 来缓解内存限制 memory constraints,同时利用数据并行性data parallelism 从全连接层扩展 scale-out 计算。作者将 DLRM 与现有的推荐模型进行了比较,并在 Big Basin AI 平台上实验了 DLRM 的性能,证明了它作为未来算法实验algorithmic experimentation 、以及系统协同设计system co-designbenchmark 的有效性。

12.1 模型设计和架构

  1. 这里我们将描述 DLRM 的设计。我们将从网络的高级组件high level components 开始,并说明如何以及为什么将它们以特定方式组装assembled 在一起,以及对未来的模型设计产生的影响。

    然后我们描述组成模型的低级算子low level operators 和原语primitives ,以及对未来的硬件和系统设计产生的影响。

12.1.1 DLRM 组件

  1. 通过回顾早期模型,我们可以更容易理解 DLRM 的高级组件。我们避免全面的科学文献综述,而将重点几种在早期模型中使用的四种技术上,这些技术可以被解释为 DLRM 的重要高级组件。

  2. Embedding:为了处理离散数据,embedding 将每个类目 category 映射到抽象空间abstract space 中的稠密表示dense representation

    具体而言,每个 embedding lookup 可以被解释为使用一个 one-hot 向量 (第 位为1、其它位为0,索引 代表了第 个类目 )来获得 embedding table 中的相应行向量 row vector

    其中 为类目总数, 为抽象空间的维度。

    在更复杂的场景中,embedding 也可以表示多个item 的加权组合,其中包含一个 multi-hot 向量的权重:

    其中 : 代表对应的 item 代表这些 item 的权重。

    包含 embedding lookupmini-batch 可以写作:

    其中 为一个稀疏矩阵。

    DLRM 利用 embedding tables 将离散特征映射到稠密表示。然而,即使设计了这些有意义的 embedding 之后,如何利用它们来生成准确的预测?为了回答这个问题,我们回到潜在因子方法latent factor methods

  3. 矩阵分解Matrix Factorization:回忆一下,在推荐问题的典型公式中,我们得到了对某些item 进行评分的某些用户的集合 。其中,集合 由元组 索引组成,表示第 个用户在第 item 上已经评分。我们用向量 来表示representitem 、用向量 来表示第 个用户,从而找到所有评分ratings

    矩阵分解方法通过最小化以下公式来求解这个问题:

    其中 为第 个用户在第 item 上的评分。

    ,我们可以将完整的评级矩阵 近似为矩阵乘积:

    其中 为总的 item 数量, 为总的用户数量。

    注意: 可以解释为两个 embedding tables,其中每一行代表潜在因子空间latent factor space 中的 user/item。这些 embedding 向量的内积可以得出对评级有意义的后续预测,这是因子分解机factorization machinesDLRM 设计的关键观察。

  4. 因子分解机Factorization Machine:在分类问题中,我们要定义一个从输入数据点 target label 的预测函数 。例如,我们可以通过定义 来预测点击率click-through rate: CTR,其中 +1 表示点击label-1 表示未点击label

    因子分解机Factorization machines: FM 通过以下定义形式的模型,将二阶交互second-order interactions 融合到带有离散数据的线性模型中:

    其中:

    • 为模型参数,且
    • upper(.) 函数严格选择矩阵的上三角部分。

    FM 和多项式核polynomial kernel 的支持向量机SVM 显著不同,因为FM 像矩阵分解一样将二阶交互矩阵分解为潜在因子latent factor (或 embedding 向量),从而更有效地处理稀疏数据。

    通过仅捕获不同 embedding 向量pair 对之间的交互,FM 显著降低了二阶交互的复杂度,从而产生线性计算复杂度。

    根据原始公式,FM 的算法复杂度为 ,但是经过数学转换之后,计算复杂度降低到

  5. 多层感知机Multilayer Perceptrons:最近机器学习的成功很大程度上归功于深度学习的兴起。其中,最基本的模型是多层感知机multilayer perceptron: MLP ,它是一个由全连接层fully connected layers: FC 和激活函数 交替组成的预测函数prediction function

    其中权重矩阵 bias 向量

    这些方法被用来捕获更复杂的交互interactions 。例如,已经表明:给定足够的参数、具有足够深度depth 和宽度 widthMLP 能够以任何精度precistion 拟合数据。

    这些方法的变体已经广泛应用于各种application ,包括计算机视觉和 NLP。一个具体的例子是神经协同过滤 Neural Collaborative Filtering: NCF 被用作 MLPerf benchmark 的一部分,它使用 MLP 而不是内积来计算矩阵分解中 embedding 之间的交互。

12.1.2 DLRM 架构

  1. 目前为止,我们已经描述了推荐系统和预测分析中使用的不同模型。现在,让我们结合它们的直觉intuitions 来构建 state-of-the-art 的个性化模型。

    令用户和 item 使用很多连续continuous 的、离散categorical 的特征来描述。

    • 为了处理离散特征,每个离散特征将由相同维度的 embedding 向量来表示,从而推广了矩阵分解中潜在因子的概念。
    • 为了处理连续特征,所有的连续特征整体上将被一个 MLP 转换(这个 MLP 我们称之为 bottom MLP 或者 dense MLP),这将产生和 embedding 向量相同维度的 dense representation

    注意:每个离散特征会得到一个 embedding,而所有连续特征整体才能得到一个 embedding

    我们将根据 FM 处理稀疏数据的直觉,通过 MLP 来显式计算不同特征的二阶交互。这是通过获取所有 representation 向量(包括每个离散特征的 embedding 向量、连续特征整体的 representation 向量)之间的 pair 对的内积来实现的。

    这些内积和连续特征 representation (即经过原始连续特征经过 bottom MLP 之后得到的)拼接起来,馈入另一个 MLP(我们称之为 top MLP 或者 output MLP)。最终这个 MLP 的输出馈入到一个 sigmoid 函数从而得到概率。

    我们将这个模型称作 DLRM

    top MLP 的特征有:显式二阶交互特征、连续representation 特征。这里并没有馈入一阶 embedding 特征。

  2. 和早期模型的比较:许多基于深度学习的推荐模型使用类似的基本思想来生成高阶项 term 从而处理稀疏特征。例如:Wide and DeepDeep and CrossDeepFMxDeepFM 网络等等,它们设计了专用网络specialized networks 来系统地构建高阶交互 higher-order interactions 。然后,这些网络将它们专用网络和 MLP 的结果相加,并通过线性层和sigmoid 激活函数产生最终的概率。

    DLRM 特别地模仿因子分解机,以结构化方式与 embedding 交互,从而在最终 MLP 中仅考虑 embedding pair 对之间的内积所产生的的交叉term,从而显著降低了模型的维度。我们认为,在其他网络中发现的、超过二阶的更高阶交互可能不一定值得额外的计算代价和内存代价。

    DLRM 和其它网络之间的主要区别在于:网络如何处理 embedding 特征向量及其交叉项 cross-term 。具体而言:

    • DLRM(以及 xDeepFM)将每个embedding 向量解释为表示单个类目category 的单元unit,交叉项仅在类目之间产生。

    • Deep and Cross 这样的网络将embedding 向量中的每个元素视为单元,交叉项在元素之间产生。

      因此,Deep and Cross 不仅会像 DLRM 那样通过内积在不同embedding 向量的元素之间产生交叉项,而且会在同一个embedding 向量内的元素之间产生交叉项,从而导致更高的维度。

12.2 并行性

  1. 现代的个性化和推荐系统需要大型复杂的模型来利用大量的数据。DLRM 尤其包含大量参数,比其它常见的深度学习模型(例如 CNNRNNGAN)多几个数量级。这导致训练时间长达数周或者更长。因此,更重要的是有效地并行化这些模型,以便在实际数据规模上解决这些问题。

  2. 如前所述,DLRM 以耦合的方式coupled manner 处理离散特征(通过 embedding)和连续特征(通过 bottom MLP)。 embedding 贡献了大部分参数,每个lookup table 都需要超过几个 GB 的内存,使得 DLRM 的内存容量和带宽bandwidth代价昂贵。

    • 由于embedding 太大,因此无法使用数据并行data parallelism ,因为数据并行需要在每个设备上拷贝超大的 embedding。在很多情况下,这种内存限制需要将模型分布在多个设备上,从而满足内存容量要求。
    • 另一方面,MLP 参数在内存中较小,但是却有相当可观的计算量。因此,对于 MLP 而言,数据并行是首选的,因为这样可以在不同的设备上同时处理样本,并且仅在累计更新accumulating updates时才需要通信。

    我们的并行化 DLRM 联合使用模型并行model parallelism和数据并行 data parallelism:针对embedding 使用模型并行、针对 MLP 使用数据并行,从而缓解 embedding 产生的内存瓶颈memory bottleneck,同时并行化 MLP 上的前向传播和反向传播计算。

    由于 DLRM 的体系结构和较大的模型尺寸,因此将模型并行和数据并行相结合是 DLRM 的独特要求。Caffe2PyTorch (以及其它流行的深度学习框架)均不支持这种组合并行性,因此我们设计了一个自定义的实现。我们计划在未来的工作中提供其详细的性能研究。

  3. 在我们的设置setup中,top MLP 和交互算子interaction operator 要求从 bottom MLP 和所有 embedding 中访问部分 mini-batch。由于模型并行已用于在设备之间分布 embedding,因此这需要个性化的 all-to-all 通信。

    embedding lookup 的最后,每个设备都针对 mibi-batch 中的所有样本,将对应的 embedding table 中的embedding 向量驻留在这些设备上。需要驻留的embedding 向量需要沿着 mibi-batch 维度分割,并传送到适当的设备,如下图所示(如黄色embedding 向量都传送到 Device 3 )。

    PyTorchCaffe2 都不提供对模型并行的原生支持,因此我们通过将 embedding 算子显式映射到不同的设备来实现它。然后使用 butterfly shuffle 算子实现个性化的all-to-all 通信,该算子将生成的 embedding 向量适当的分片slice,并将其传输到目标设备 target device 。在当前版本中,这些传输是显式拷贝,但是我们打算使用可用的通信原语(如 all-gathersend-recv)进一步优化这一点。

    下图为用于 all-to-all 通信的butterfly shuffle

    注意,目前 pytorch.distributed package 已经支持模型并行、数据并行,也支持个性化的 all-to-all 通信。

  4. 我们注意到,对于数据并行 MLP,反向传播中的参数更新以 allreduce 进行积累accumulated,并以同步synchronous 的方式应用于每个设备上的拷贝参数replicated parameters ,从而确保每个设备上的更新参数updated parameters 在每次迭代之前都是一致consistent 的。

    • PyTorch 中,通过 nn.DistributedDataParallelnn.DataParallel 模块启用数据并行,这些模块在每个设备上拷贝模型并插入allreduce 以及必要的依赖。
    • Caffe2 中,我们在梯度更新之前人工插入 allreduce

1.3 实验

  1. 为了衡量模型的准确性accuracy、测试模型的整体性能、并描述各个算子operator 的特征,我们需要为DLRM 创建或获取一个数据集。

    我们提供了三种类型的数据集:随机数据集random dataset、人工合成数据集synthetic dataset、公共数据集public dataset 。从系统的角度来看,前两个数据集可用于试验模型。具体而言,它允许我们通过动态生成的数据来试验不同的硬件属性和瓶颈,同时消除对数据存储系统的依赖。后者允许我们对真实数据集进行实验,并度量模型的的准确性accuracy

    • 随机数据集:回忆一下,DLRM 接受连续continuous 特征和离散categorical 特征作为输入。

      • 对于连续特征,可以通过使用 numpy.random packagerand 或者 randn 调用具有默认参数的均匀分布或正态分布(高斯分布)生成随机向量来建模。 然后可以通过生成一个矩阵来获得一个 mini-batch 的输入,其中矩阵的每一行代表 mini-batch 中的一个样本。

      • 对于离散特征,我们需要确定给定的的 multi-hot 向量中有多少个非零元素。benchmark 允许非零元素数量是固定的、或者是 1~k 范围内的一个随机数。

        然后,我们生成相应数量的整数索引,数量范围在 1~m 范围内,其中 membedding 矩阵 的行数。

        最后,为了创建一个 mini-batchlookup,我们拼接上述索引,并用lengthsCaffe 中的 SparseLengthsSum)、或者 offsetsPyTorch 中的nn.EmbeddingBag)来描述每个单独的 lookup

    • 人工合成数据集:有很多理由支持对应于离散特征的索引的自定义生成。例如,如果我们的application 使用一个特定的数据集,但出于隐私的目的我们不愿意共享它,那么我们可以选择通过索引分布来表达离散特征。这可能会替代联邦学习federated learning 等应用于 application 中的隐私保护技术。此外,如果我们想要测试系统组件system components,例如研究内存行为memory behavior,我们可能希望在合成的 trace 中捕获原始 trace 访问的基本局部性fundamental locality

      让我们说明如何使用合成数据集。假设我们有索引的 trace,这些索引对应于某个离散特征的所有 embedding lookup 轨迹。我们可以在这个 trace 中记录去重访问unique accesses 和重复访问repeated accesses 之间的距离频次,然后生成合成 trace。具体生成算法参考原始论文。

    • 公共数据集:Criteo AI Labs Ad KaggleCriteo AI Labs Ad Terabyte 数据集是公开的数据集,由用于广告点击率预测的点击日志组成。

      每个数据集包含 13 个连续特征和 26 个离散特征。通常,连续特征使用简单的对数变换 log(1+x) 进行预处理。离散特征映射到相应的 embedding index,而未标记的离散特征映射到 0 或者 NULL

      • Criteo Ad Kaggle 数据集包含 7 天内的 4500 万个样本,每天的样本量大致相等。在实验中,通常将第 7 天拆分为验证集和测试集,而前面6 天用作训练集。
      • Criteo Ad Terabyte 数据集包含 24 天的样本,其中第 24 天分为验证集和测试集,前面 23 天用作训练集。每天的样本量大致相等。
  2. 模型配置:DLRM 模型在 PyTorchCaffe2 框架中实现,可以在 Github 上获得。模型分别使用 fp32 浮点数作为模型参数,以及 int32(Caffe2)/int64(PyTorch) 作为模型索引。实验是在 BigBasin 平台进行的,该平台具有双路 Intel Xeon 6138 CPU @ 2.00GHz 以及 8Nvidia Tesla V100 16GB GPUs

  3. 我们在 Criteo Ad Kaggle 数据集上评估了模型的准确性accuracy,并将 DLRMDeep and Cross network: DCN 的性能进行了比较,后者没有进行额外的调优。我们和 DCN 进行比较,因为它是在相同数据集上具有综合结果comprehensive results 的少数模型之一。

    • DLRM 既包含用于处理连续特征的 bottom MLP(该 bottom MLP 分别由具有 512/256/64 个节点的三个隐层组成),又包括top MLP (该 top MLP 分别由具有 512/256 个节点的两个隐层组成)。
    • DCN 由六个 cross layer 和一个具有 512/256 个节点的深度网络组成。embedding 的维度为 16

    这样产生的 DLRMDCN 两者都具有大约 540M 的参数。

    我们使用 SGDAdagrad 优化器绘制了两个模型在完整的单个 epoch 内的训练准确率(实线)、验证准确率(虚线)。我们没有使用正则化。

    可以看到:DLRM 获得了稍高的训练准确率和验证准确率,如下图所示。我们强调,这没有对模型的超参数进行大量的调优。

    DLRMDCN 都没有经过超参数调优,因此实验结果的对比没有任何意义。

  4. 为了分析我们模型在单设备上的性能,我们考虑了一个具有8 个离散特征、512 个连续特征的模型。每个离散特征都通过一个包含 1M 个向量的 embedding table (即类目总数有1M )进行处理,向量维度为 64。而连续特征被组装assembled 为一个 512 维的向量。bottom MLP 有两层,而 top MLP 有四层。我们让具有 2048K 个随机生成样本的数据集上分析了该模型,其中 mini-batchbatch size = 1K

    Caffe2 中的这个模型实现在 CPU 上运行大约 256 秒,在 GPU 上运行大约 62 秒,每个算子的分析如下图所示。正如预期所示:大部分时间都花在了执行 embedding lookup 和全连接层上。在 CPU 上,全连接层占了很大一部分计算,而 GPU 上全连接层的计算几乎可以忽略不计。

十三、Applying Deep Learning To Airbnb Search[2018]

  1. Airbnbhome sharing platform 是一个双边市场,其中房东host 可以出租他们的空间(称作listings ),以供来自世界各地的潜在租客guest 预订。典型的预订开始于租客在 airbnb.com 上搜索特定地理位置的房屋。search ranking 任务是从库存中的成千上万个listing 中挑选一个有序的 listing 列表来响应租客。

    search ranking 的第一个实现是手动制作的评分函数scoring function 。用梯度提升决策树gradient boosted decision tree: GBDT 模型代替手动评分函数是 Airbnb 历史上房屋预订量方面最大的改进之一,随后还有多次成功的迭代。在线预订量的收益最终饱和,其中很长一段时间的实验都是中性的(即没有提升)。这为尝试对系统进行全面改造提供了时机。

    从这一背景出发,论文 《Applying Deep Learning To Airbnb Search》讨论了作者将互联网上的一个大规模搜索引擎之一切换为深度学习的经验。本文针对是拥有机器学习系统、并开始考虑神经网络的团队。论文的目的并不是推进前沿的、新的建模技术,而是讲述了如何将神经网络应用于现实产品。

    • 首先,论文对模型体系结构随着时间的演变进行了总结。
    • 然后,论文给出了特征工程feature engineering 和系统工程 system engineering 的注意事项。
    • 最后,论文描述了一些工具和超参数探索。
  2. Airbnbsearch ranking 模型是模型生态系统的一部分,所有这些模型都有助于决定向租客展示哪些listing 。这些模型包括:预测房东接受租客预订请求可能性的模型、预测租客将旅行体验评为五星好评5-star的概率的模型等等。论文目前的讨论集中在这个生态系统中的一个特定模型上,并且被认为是排序难题ranking puzzle 中最复杂的一块。这个模型负责根据租客预订的可能性来对可用的 listing 进行排序。

    典型的租客搜索会话search session 如下图所示。

    • 租客通常会进行多次搜索,点击一些 listing 从而查看它们的详情页。
    • 成功的 session 以租客预订一个listing 而结束。

    租客的搜索以及他们和产品的交互被作为日志而记录下来。在训练期间,新模型可以访问交互日志,也可以访问产品中之前使用的模型。新模型被训练从而学习一个评分函数,该函数将曝光日志中预订 listing 分配到尽可能高的排名。

    然后,新模型在 A/B test 框架中进行在线测试,从而查看新模型和当前模型的对比,看看新模型是否可以实现统计意义上显著的预订量提升。

13.1 模型演变

  1. 我们向深度学习的转变不是原子atomic 操作的结果,而是一系列迭代改进的最终结果。

    • 下图 (a)显示了我们的主要离线指标 normalized discounted cumulative gain: NDCG 的相对提升,其中预订listing 的曝光 impression 被分配为相关性1.0、其它listing 的曝光被分配为相关性 0.0X 轴描述了模型及其投入生产的时间。
    • 下图 (b) 显示了模型在线预订量的相对增长。

    总体而言,这代表了 Airbnb 上最有影响力的机器学习应用之一。以下各节简要描述了每个模型。

  2. Simple NNAndrej Karpathy 对模型架构有一些建议:不要成为英雄don’t be a hero 。在 “我们为什么不能成为英雄?” 的驱动下,我们从一些复杂的自定义架构开始,结果却被它们的复杂性淹没,最终浪费了很多时间。

    我们最终想方设法上线的第一个体系架构是具有ReLU 激活的、简单的单隐层(32 个神经元)神经网络NN 。事实证明该神经网络和 GBDT 相比,预订量指标是中性neutral 的(即效果既不正向、也不负向)。

    NNGBDT 模型具有相同的特征,其训练目标也和 GBDT 保持不变:最小化 L2 回归损失regression loss,其中预订 listing 的效用utility 分配为 1.0、未预订 listing 的效用分配为 0.0

    整个练习exercise的价值在于,它验证了整个 NN pipeline 已经准备就绪,并且能够为实时流量提供服务。稍后在特征工程和系统工程部分讨论该 pipeline 的具体细节。

  3. Lambdarank NN:不是英雄not being a hero 让我们有了一个开始,但没有走很远。最终我们及时的将 Karpathy 的建议调整为:在开始的时候不要成为英雄don’t be a hero, in the beginning

    我们的第一个突破是将Simple NNLambdarank 思想相结合。在离线时,我们使用 NDCG 作为主要指标。Lambdarank 为我们提供了一种直接针对 NDCG 优化 NN 的方法。这涉及为Simple NNregression based 公式的两个关键改进:

    • 转向 pairwise 偏好公式,其中预订者看到的listing 被用于构建 pairwise{booked listing, not-booked listing} ,从而作为训练样本。在训练期间,我们将预订 listing 和未预订listing 之间得分差异的交叉熵损失最小化。

      即:预订 listing 和未预订 listing 之间差异尽可能大。

    • 通过交换组成该pair 对的两个listing 的位置position而导致的 NDCG 差异,从而加权每个 pairwise 损失。这使得预订listing 的排名优化rank optimization 朝向搜索结果列表的头部,而不是底部。例如,把预订listing 的排名从位置2 提升到 1,将优于把预订listing 的排名从位置10 提升到 9

      即:预订 listing 位置尽可能靠前。

    下面给出了 TensorFlow 中的部分实现,尤其是如何对 paiwise loss 进行加权:

  4. Decision Tree/Factorization Machine NN:虽然目前服务于生产流量的主力排序模型是神经网络,但是我们仍然在研究其它模型。值得一提的模型有:

    • GBDT 模型,其中使用使用替代方法对搜索进行采样从而来构建训练数据。
    • 因子分解机factorization machine:FM 模型,它通过将 listingquery 都映射到一个 32 维的空间,从而预测一个 listing 在给定 query 的情况下被预订的概率。

    这些研究search ranking 问题的新方法揭露了一些有趣的东西:尽管这些模型在测试数据上的性能和神经网络相当,但是它们排名靠前uprankedlisting 却大不相同。

    受到 《Deep & Cross Network for Ad Click Predictions》 这样的神经网络体系架构的启发,新模型试图结合所有三种模型(GBDT 模型、FM 模型、NN 模型)的优势:

    • 对于 FM 模型,我们将最终预测作为特征纳入NN 模型。
    • 对于 GBDT 模型,我们将每棵树激活的叶节点的索引作为离散特征纳入 NN 模型。

    下图给出了一个概览。

  5. Deep NNDeep NN 模型的复杂性是惊人的,而且 《Hidden Technical Debt in Machine Learning Systems》 中提到的一些问题开始出现。在我们的最后一次飞跃中,我们能够通过简单地将训练数据扩展 10 倍,并切换到具有两层隐层的 DNN 来消除所有这些复杂性。

    Deep NN 网络的典型配置:

    • 一个输入层input layer。其中,在将离散特征扩展到 embedding 之后,输入一共有 195 个特征。
    • 第一个隐层 hidden layer。其中,该层具有 127 个全连接的 ReLU 激活的神经元。
    • 第二个隐层 hidden layer。其中,该层具有 83 个全连接的 ReLU 激活的神经元。

    馈入 DNN 的特征大部分是简单的 listing 属性,诸如价格、设施amenities、历史预订量等等。这些特征通过最少的特征工程来提供。除此之外,还包括从其它模型输出的特征:

    • 启用了智能定价Smart Pricing 功能的 listing 价格,该特征由专门的模型提供。
    • 候选 listing 和用户历史查看listing 的相似度similarity,这是基于co-view embedding 来计算得到。

    这些模型利用了不直接隶属于 search ranking 训练样本的数据,为 DNN 提供了额外的信息。

    为了更深入地了解 DNN,我们在下图中绘制了它的学习曲线 learning curve。我们在训练集和测试集上对比了 NDCG ,其中训练集有 17 亿的 pair 对。

    可以看到:我们能够弥合close 训练集和测试集之间的泛化距离 generalization gap

  6. 我们能否跳过演变evolution 的所有阶段直接启用 DNN?我们试图在追溯部分中回答这一问题。

    顺便说一句,虽然 DNN 在某些图像应用上取得了人类水平的性能,但我们很难判断我们在类似的比较中处于什么位置。问题的部分原因是,目前尚不清楚在 search ranking 问题中如何定义人类水平的性能。通过浏览日志信息,我们很难准确地判断哪些 listing 将会被预订。我们在日志中找不到客观的事实,只能根据租客的预算budget 和口味 tastes进行tradeoff ,而租客的口味大多数情况下还是看不到的。一些学者指出,即使是对于熟悉的shopping items,也很难进行人工评估。对于我们的 application,由于库存的新颖性novelty,这些困难将进一步加剧。

    说到困难,接下来我们讨论一些鲜为人知的事情:失败的尝试。

13.2 失败的模型

  1. 上一节中介绍的一个成功的 launch 后又接着另一个成功的launch 的叙述并没有讲出完整的故事。现实中失败的尝试比成功的尝试更多。复述每一次失败的尝试比较耗时,所以我们选择了两个特别有趣的失败来讲述。这些模型很有趣,因为它们说明了一些外部非常有效和受欢迎的技术,但是内部使用时可能会失效。

  2. Listing IDAirbnb 上的每个 listing 都有相应的唯一IDNN 提供的一个令人兴奋的新能力是使用这些 listing id 作为特征。想法是使用 listing id 作为 embedding 的索引 index ,这使得我们能够学习每个 listing 的向量 representation,从而编码 listing 独有的属性property

    我们之所以兴奋,是因为其它application 已成功地将如此高基数cardinality 的离散特征映射到 embedding,例如在 NLP application 中学习 word embedding 、在推荐系统中学习 video id embeddinguser id embedding

    但是,在我们尝试的不同变体中,listing id 大多数会导致过拟合。下图绘制了一次这类尝试的学习曲线,我们看到 NDCG 在训练集上有显著提升,但是在测试集上却没有任何改善。

    这种成熟的技术在 Airbnb 上失败的原因是由于底层市场underlying marketplace 的某些独特属性propertyembedding 需要每个 item 有大量数据才能收敛到合理的值。

    • item 可以无限地重复时,例如在线视频或语言中的单词,那么 item 拥有的用户交互数量也没有限制。为 item 兴趣获取大量的数据相对容易。
    • 另一方面,listing 受到物理世界的限制。即使是最受欢迎的 listing,一年最多也就可以预订 365 次。平均每个listing 的预订量要少得多。这一基础限制 fundamental limitation 生成的数据在 listing-level 非常稀疏。过拟合就是这种限制的直接后果。

    如果 item id 频次太少,则很难学到有意义的 embedding

  3. 多任务学习Multi-task Learning :虽然预订有物理限制,但是用户对listing 详情页的查看并没有物理限制。下图显示了 listing 的详情页查看量和预订量的比例的分布,预订量通常比查看量稀疏了几个数量级(横轴为查看量和预订量之比,纵轴为listing 数量)。更进一步,我们发现,不出所料,对listing 详情页的长时间观看long view 和预订相关。

    为了解决 listing id 过拟合的问题,我们建立了一个多任务学习模型。该模型使用两个独立的输出层同时预测预订概率和 long view 的概率:

    • 一个以预订 listing 作为正样本来优化损失,从而预测预订概率。
    • 另一个以 long view listing 作为正样本来优化损失,从而预测 long view 概率。

    两个输出层共享一个公共的隐层,如下图所示。更重要的是,listing id embedding 是共享的。背后的想法是,模型能够将 long view 中学到的知识迁移到预订任务中,从而避免过拟合。

    由于 long view 标签的数量比预订标签的数量多几个数量级,因此对预订损失施加了较高的补偿权重,从而保持对预订目标的关注。

    《Beyond Clicks: Dwell Time for Personalization》 所建议的,每个 long view 标签的损失进一步由 log(view_duration) 进行缩放。

    最终在线listing 评分时,我们仅使用预订预测 booking prediction

    但是当在线测试时,该模型大幅增加了 long view,而预订量保持不变。人工检查了具有较高 long viewlisting,我们发现了可能导致这种gap 的几种原因:

    • 这种 long view 可能是由于高端的、但价格昂贵的listing 所驱动(所以用户会停留一段时间来慎重考虑)。
    • listing 的描述太长,且难以阅读。
    • 极其独特、且有时很幽默的 listing
    • 还有一些其它原因。

    同样,正是 Airbnb 市场的独特性,使得 long view 和预订相关,但是也有很大的正交部分(即不相关的部分),这使得基于 long view 来预测预订具有挑战性。更好地理解 listing view 仍然是我们研究的主题。

    注:笔者在 ctrcvr 多任务建模过程中也发现类似的规律。即希望丰富的点击样本能够有助于迁移学习到转化预估任务。但是结果发现,ctr 预估任务效果很好,但是 cvr 预估任务效果持平或略有下降。

13.3 特征工程

  1. 我们开始的 baseline GBDT pipeline 具有广泛的特征工程。典型的变换包括计算比率ratio、窗口平均等等。这些特征工程技巧是经过多年实验积累的。然而,目前还不清楚这些特征是否是最好的,或者是否随着市场动态变化而更新。

    NN 的一大吸引力在于引入了特征自动化feature automation:馈入原始数据并让特征工程在以数据驱动的 NN 的隐单元中自动进行。

    然而,本节内容是专门针对特征工程的,因为我们发现让NN 有效工作不仅仅是提供原始数据,也需要特征工程。这种特征工程不同于传统的特征工程:在将特征输入到模型之前,无需人工对特征执行数学计算,而是将重点转移到确保特征符合某些属性properties ,以便神经网络可以自己有效地进行数学计算。

  2. 特征归一化Feature Normalization:在我们第一次训练NN 的尝试中,我们简单地将所有用于训练 GBDT 模型的特征输入到神经网络中。这种情况非常糟糕,损失函数在训练过程中达到饱和,后续的step 没有任何效果。我们将问题追溯到以下事实:特征未能正确地归一化。

    • 对于决策树,只要特征的相对顺序有意义,那么特征的确切数值几乎无关紧要。
    • 神经网络对于特征的数值非常敏感。超出正常特征范围的馈入值可能会导致较大梯度的反向传播。由于梯度消失,这可以使得 ReLU 这类激活函数永久死亡。

    为了避免这种情况,我们确保将所有特征限制在较小的取值范围内,并且大部分分布在 [-1,1] 区间、均值映射到 0 。总的来说,这涉及检查特征,并应用以下两种转换中的任何一种:

    • 如果特征分布类似于正态分布,我们将其变换为:

      其中 为特征均值, 为特征标准差。

    • 如果特征分布类似于幂律分布power law distribution,我们将其变换为:

      其中 median 为特征的中位数。

    另一种简单的选择是采用 BN Layer

  3. 特征分布Feature Distribution:除了将特征映射到有限的数值范围,我们还确保大多数特征都具有平滑的分布。为什么要纠结于分布的平滑性smoothness ?以下是我们的一些理由。

    • 发现错误spotting bugs:在处理上亿个特征样本时,如何验证其中一小部分没有 bug?范围检查很有用,但是很有限。我们发现分布的平滑性是发现错误的宝贵工具,因为错误的分布通常和典型的分布形成鲜明对比。

      举个例子,我们在某些地区记录的价格中发现了 bug 。对于超过 28 天的区间,记录的价格是每月价格、而不是每日价格。这些错误在原始分布图上显示为尖峰。

    • 促进泛化facilitating generalization:确切回答为什么 DNN 善于泛化是研究前沿的一个复杂课题。同时,我们的工作知识working knowledge 是基于以下观察:在为我们的 application 构建的 DNN 中,各层的输出在其分布方面变得越来越平滑。下图显示了来自一些样本的最终输出层分布、以及隐层分布。为了绘制隐层的分布,零值被省略,并且应用了 log(1 + relu_output) 转换。

      这些图激发了我们的直觉:为什么 DNN 可以很好地泛化到我们的 application 中。当建立一个基于数百个特征的模型时,所有特征取值的组合空间非常庞大,并且在训练过程中常常会覆盖一定比例特征组合。来自较低层的平滑分布确保了较高层可以正确地对未看过unseen 的值进行插值。将这种直觉一直扩展到输入层,我们尽力确保输入特征具有平滑的分布。

      这里有个平滑性假设:假设相似的特征带来相似的 label

      我们如何测试模型是否在样本上良好地泛化?真正的测试当然是模型的在线性能,但是我们发现以下技术可以作为完整性检查sanity check :将测试集中给定特征上所有的值都缩放(例如将 price 特征缩放为 2 倍或者 3 倍或者 4 倍),然后观察 NDCG 的变化。我们发现,在这些从未见过的price 取值上,该模型的性能是非常稳定的。

      对特征的取值缩放可能会破坏样本的完整性。例如:对于郊区的、单个房间的 listing,如果 price 缩放 4 倍会导致一个奇怪的 listing,看起来应该很便宜的 listing 但是标价很高。

      在调试debugged 并应用适当的归一化之后,大多数特征都获得了平滑分布。但是,有少数几个特征,我们不得不进行专门的特征工程。一个例子是listing 的地理位置geo-location,以经度和纬度来表示。下图 (a)(b) 显示了原始经纬度的分布。为了使得分布更加平滑,我们计算的是距展示给用户的地图的中心点的偏移量。如下图 (c)所示,质量似乎集中在中心,因为地图的尾部被zoomed out 了很多。因此,我们使用经度/纬度偏移量的 log() ,从而得到了下图 (d) 的分布。这使得我们能够构造两个平滑分布的特征,如下图 (e)(f) 所示。

      需要明确的是,原始经度/纬度到地图中心的距离变换是有损的多对一函数many-to-one function。因为它可以将多个经度/纬度转换为相同的偏移量。这使得模型可以基于距离属性而不是特定的地理位置属性来学习全局属性。要学习特定于局部地理位置的属性,我们使用了稍后描述的高基数high cardinali离散特征。

    • 检查特征完整性checking feature completeness:在某些情况下,调查某些特征缺乏平滑性会导致发现模型缺失missing 的特征。

      例如,我们有一个 listing 未来已预订天数占available days 的比例作为一个特征(即占用率occupancy),这个特征是listing 质量的信号。背后的直觉是:高质量的 listing 会提前售罄。但是,由于缺乏平滑性,占用率的分布却令人困惑,如下图 (a) 所示。

      经过调查,我们发现了另一个影响占用率的因素:listing 有不同的最低住宿时间minimum required stay 要求,有的会要求最低住宿几个月。因此这些 listing 得到了不同的占用率。但是,我们没有在模型中添加最低住宿时间作为特征,因为它取决于日历并且被认为过于复杂。但是在查看了占用率分布之后,我们增加了 listing 的平均住宿时间作为一个特征。

      在占用率通过平均住宿时间归一化之后,我们可以看到下图 (b) 中的分布。在一个维度中缺乏平滑性的特征可能在较高维度上变得平滑。这有助于我们思考这些维度是否可以应用在我们的模型中。

  4. 高基数离散特征High Cardinality Categorical Features :过拟合的 listing id 并不是我们尝试的唯一高基数离散特征。还有其它尝试,如 NN 的承诺所言,我们用很少的特征工程就取得了很高的回报。一个具体的例子最能说明这一点。

    租客对于城市各个街区neighborhoods 的偏好是一个重要的位置信号location signal 。对于 GBDT 模型,该信息是由一个精心设计的 pipeline 提供的,该 pipeline 跟踪了各个街区和城市的层级分布 hierarchical distribution 。建立和维护该 pipeline 的工作量很大,而且它也没有考虑诸如预订 listing 价格之类的关键因素。

    NN 的世界中,处理这类信息本身就是简单的。我们基于 query 中指定的城市、以及对应于listinglevel 12 S2 cell 创建的一个新的离散特征,然后使用哈希函数将这二者整体映射到一个整数。例如,给定 query “旧金山” 以及位于 Embarcadero 附近的 listing,我们选择 listing 所在的 S2 cell539058204),然后将将 {"San Francisco", 539058204} 哈希映射到 71829521 从而建立我们的离散特征。然后该离散特征被映射到一个 embedding ,接着馈入 NN 。在训练期间,该模型通过反向传播来学习 embedding,该 embedding 编码了在给定城市query 的情况下由 S2 cell 代表的街区的位置偏好location preference

    即将地域划分为一个个的网格,然后学习每个网格的 grid id embedding

    下图可视化了为 query “旧金山” 学到的各街区的 embedding (通过 t-SNE )。这符合我们对该地区的直觉理解:embedding 值不仅突出了该城市的主要 points of interest: poi ,它还表明了人们更喜欢位于西湾west bay 以南一点的位置,而不是靠近主要交通拥堵桥梁的位置。

13.4 系统工程

  1. 这部分是关于加速训练training 和加速打分scoring 。我们pipeline 的一个quick summary

    • 来自租客的搜索query 命中了一个进行检索retrieval 和评分scoringJava server
    • 这个 server 还生成日志,这些日志存储为序列化的 Thrift 实例。
    • 日志使用 Spark pipeline 来处理从而创建训练数据。
    • 使用 TensorFlow 来训练模型。
    • 使用 ScalaJava 编写的各种工具用于评估模型和计算离线指标。
    • 模型上传到执行检索和评分的 Java server

    所有这些组件都在 AWS 实例上运行。

  2. Protobufs and DatasetsGBDT 模型是以 CSV 格式来提供训练数据的,并且我们重复使用这个pipeline 的大部分,从而使用 feed dict 馈入 TensorFlow 模型。

    乍一看,这似乎不是一个机器学习的问题,并且在我们的优先级清单中是相当低的。但是当我们发现 GPU 利用率接近 25% 时,我们马上警醒了。大部分训练时间都花在解析 CSV 和通过 feed dict 拷贝数据上。我们实际上是在用骡子拖着一辆法拉利。

    重构 pipeline 以产生 Protobufs 训练数据,并使用 Dataset 可以将训练速度提高 17 倍,并将 GPU 利用率提高到大约 90% 。这最终允许我们将训练数据从几周扩展到几个月。

  3. 重构静态特征refactoring static features:我们的很多特征都是很少变化的 listing 属性。例如,地理位置location、卧室数量、便利设施amenities 、租客规则guest fules 等等。将所有这些特征作为训练样本的一部分将产生输入瓶颈input bottleneck

    为了消除这种磁盘流量,我们仅使用 listing id 作为离散特征。所有静态特征都被打包为由 listing id 索引的、不可训练non-trainableembedding 。对于在训练期间发生突变的特征,这需要在少量噪声和训练速度之间进行trade-off

    注意:这个 embedding 就是这些静态特征拼接而成的,因此是不可训练的。是否对这些属性进行 embedding 训练会更好?论文并未讨论这一点。

    这个 embedding 常驻在 GPU 内存,消除了每个训练样本数千KB 的数据,这些数据通常是通过 CPU 从磁盘加载的。这种效率使得探索全新类型的模型成为可能,该模型考虑了用户历史交互的数十个listing 的详细信息。

  4. Java NN library:在 2017 年初,当我们开始将 Tensorflow 模型投入生产时,我们发现没有有效的解决方案可以在 Java stack 中对模型进行评分scoring 。 通常需要在 Java 和另一种语言之间来回转换数据,这个过程中引入的延迟latency 对我们而言是一个障碍。

    为了满足严格的搜索延迟要求,我们在 Java 中创建了一个自定义的神经网络评分库。虽然到目前为止这对我们很有帮助,但是我们希望重新讨论这个问题,看看有没有最新的替代方案。

13.5 超参数

  1. 尽管在 GBDT 世界中有一些超参数,如树的数量、正则化等,但是 NN 却将超参数的规模提升到一个新的高度。在最初的迭代中,我们花了大量时间探索超参数世界。调研所有选项和试验组合上的努力并没有给我们带来任何有意义的改进。但是,这个练习exercise 确实让我们对我们的选择有了一些信息,我们将在下面描述。

  2. dropout:我们最初的印象是,dropout 和神经网络的正则化相对应,因此必不可少。然而对于我们的 application,我们尝试了不同的 dropout 形式,所有这些都会导致离线指标略有下降。

    为了理解dropout 和我们的失败,我们目前对 dropout 的解释更接近于一种数据增强技术。当随机性的引入模拟了有效的场景时,这种技术是有效的。对于我们的情况,随机性只能产生无效的场景。

    作为替代方案,我们在考虑特定特征的分布的情况下,添加了人工制作的噪声,从而使得离线 NDCG 降低了大约 1%。但是我们在在线性能方面没有取得任何统计意思上的显著提升。

  3. 初始化initialization:出于纯粹的习惯,我们通过将所有权重和 embedding 初始化为零来开始我们的第一个模型,结果发现这是开始训练神经网络的最差的方法。在研究了不同的技术之后,我们目前的选择是对网络权重使用 Xavier 初始化,对 embedding 使用 {-1 ~ +1} 范围内的均匀随机初始化。

  4. 学习率 learning rate:这里面临着各种各样的策略,但是对于我们的 application,我们发现很难使用默认的设置来改善 Adam 的性能。当前,我们使用了 LazyAdamOptimizer 变体,我们发现使用 large embedding 训练时该变体会更快。

  5. batch sizebatch size 的变化对于训练速度有着显著影响,但是对于模型本身的确切影响却难以把握。我们发现最有用的指南是《Don’t Decay the Learning Rate, Increase the Batch Size》 。但是我们并没有完全遵守该论文的建议。在 LazyAdamOptimizer 解决了学习率问题之后,我们选择了 200 的固定 batch size,这似乎对当前模型有效。

13.6 特征重要性

  1. 一般来说,特征重要性的估计和模型的可解释性interpretability 是神经网络不擅长的一个领域。评估特征的重要性对于确定工程工作的优先级和指导模型迭代是至关重要的。

    NN 的优势在于找到特征之间的非线性相互作用。当理解特定特征扮演了什么角色时,这也是一个弱点,因为非线性相互作用使得很难孤立地研究任何特征。接下来,我们讲述解释神经网络的一些尝试。

  2. 分数分解 Score Decomposition:在 NN 的世界中,试图了解单个特征的重要性只会导致混乱。我们第一个朴素的尝试是获取网络产生的最终得分,然后尝试将其分解为来自每个输入节点input node 的贡献。

    在查看了结果之后,我们意识到这个想法存在概念上的错误:没有一种干净clean 的方法来区分一个特定的输入节点对像 ReLU 这样的非线性激活的影响。

  3. 消融测试 Ablation Test:这是对这个问题的又一次简单的尝试。这里的想法是一次移除一个特征,重新训练模型并观察性能的差异。然后,我们可以将这些特征的重要性与移除它们所导致的性能下降成正比。

    然而这里的困难在于,通过移除一个特征获得的任何性能差异都类似于在重新训练模型时观察到的离线指标中的典型噪声。这可能是因为我们的特征集合中存在大量的冗余,模型似乎能够从剩余的特征中弥补一个缺失的特征。

    这导致了忒休斯之船悖论Ship-of-Theseus paradox :你能一次从模型中删除一个特征,声称该模型没有显著的性能下降吗?

    忒修斯悖论:如果忒修斯的船上的木头被逐渐替换,直到所有的木头都不是原来的木头,那这艘船还是原来的那艘船吗?

    即:假定某物体的构成要素被置换后,但它依旧是原来的物体吗?

  4. 排列测试Permutation Test:在接下来的尝试中,我们从针对随机森林提出的排列特征重要性permutation feature importance 中得到启发。我们在测试中随机排列了特征在各个样本中的取值之后,在测试集上观察了模型的性能。我们的期望是,特征越重要,扰动它导致的模型退化degradation 就越大。

    但是,该操作会导致有些荒谬的结果。原因是在一次排列permuting 一个特征时,我们假设不同特征之间彼此独立,这是错误的。例如,预测预订概率的最重要特征之一就是 listing 中的房间数。而房间数量和价格、住宿人数、便利设施等特征息息相关。对特征进行独立排列会创建在现实生活中从未发生过的样本,并且特征在无效空间invalid space 中的重要性使我们误入歧途。

    但是,该测试在确定没有发挥作用的特征方面有些用处。如果随机排列特征完全不影响模型性能,则可以很好地表明模型可能不依赖于该特征。

  5. TopBot Analysis:有一个自主开发的工具旨在解释这些特征,并且不会以任何方式干扰它们。这个工具叫做 TopBot,它提供了一些有趣的洞察 insight

    TopBot 是自上而下分析器top-bottom analyzer 的缩写,它将一个测试集作为输入,并使用模型对每个测试querylisting 进行排序。然后它为每个query 从排名在 toplisting 生成特征取值的分布图,并将该分布图和排名在 bottomlisting 生成特征取值的分布图进行比较。这个比较comparison 表明了模型是如何利用不同取值范围内的特征。

    下图显示了一个例子。排名最高的listing 的价格分布偏向于较低的值,这表明模型对于价格的敏感性sensitivity 。但是,当比较排名top 和排名 bottomlisting 的评论数量的分布时,这两个分布看起来非常相似,表明这个版本的模型未按预期使用评论,从而为下一步研究提供了方向。

    还可以细化下:针对不同的细分市场(或者不同类型的 listing)来可视化。

13.7 回顾

  1. 下图总结了目前为止的深度学习之旅。

    • 根据无处不在的深度学习成功案例,我们从乐观主义的顶峰开始,认为深度学习将取代 GBDT 模型,并为我们带来惊人的收益。
    • 许多最初的讨论集中在保持其他一切不变,用神经网络替代当前的模型,看看我们能够得到什么收益。当最初没有实现这些收益时,这让我们陷入了绝望的深渊。
    • 随着时间的推移,我们意识到转向深度学习根本不是一个简单的模型替代,更确切的说这是关于系统扩展sytem scaling 。因此,它需要重新思考围绕模型的整个系统。

    如果仅局限于较小的规模,像 GBDT 这样的模型在性能上可以说是同等水平并且更易于处理,我们继续使用 GBDT 来解决中等规模的问题。那么,我们会向其他人推荐深度学习吗?答案是 Yes。这不仅是因为深度学习模型的在线性能大幅提升。还有部分原因是与深度学习如何改变了我们未来的 roadmap 有关。早期机器学习的重点主要放在特征工程上,但是在转向深度学习之后,试图手动特征工程已经失去了前景。这让我们可以在更高的层次上研究问题。比如,如何改进我们的优化目标?我们是否准确地代表了所有的用户?在迈出将神经网络应用于search ranking 第一步的两年之后,我们觉得我们才刚刚开始。

十四、Improving Deep Learning For Airbnb Search[2020]

  1. Airbnb 是一个双边市场,汇集了拥有出租房屋的房东hosts 、以及来自世界各地的潜在租客guestsAirbnbsearch ranking 问题是对住宿地点(称为 listing )进行排名,从而响应用户的 query。这些 query 通常包括位置location、客人数量、入住/退房日期checkin/checkout dates

    过度到深度学习是 Airbnb search ranking 发展过程中的一个重要里程碑。我们在 《Applying Deep Learning to Airbnb Search》 对旅程(指的是超越之旅journey beyond)的描述让我们和许多行业从业人员进行了交谈,使得我们能够交换见解insights 和批评critiques。此类对话中经常出现的一个问题是:下一步是什么?我们试图在论文 《Improving Deep Learning For Airbnb Search》中回答这个问题。

    用于ranking 的深度学习的推出引起了很多庆祝,不仅因为它带来的预订量增益,还因为它给我们未来的路线图roadmap 带来了变化。最初的看法是,在深度学习上的 Airbnb ranking 使我们能够接触到这个巨大的机器学习思想宝库,这个宝库似乎每天都在增长。我们可以简单地从文献综述中挑选出最好的想法,一个接一个地推出,从此过上幸福的生活。

    但是事实证明,这是乐观情绪的山峰the peak of optimism 。熟悉的、陷入绝望之谷valley of despair 的模式很快就出现了:在其他地方取得了令人印象深刻的、成功的技术在我们自己的application 中证明是非常中性neutral 的。这导致了我们在第一次launch 之后对如何迭代深度学习的策略进行了全面修订。

    在论文 《Improving Deep Learning For Airbnb Search》中,我们描述了在 《Applying Deep Learning to Airbnb Search》 推出之后的主要改进。除了深入研究核心机器学习技术本身,我们还关注导致突破的过程process 和缘由reasoning 。现在从更大的角度来看,我们更重视在如何迭代 DNN 方面的经验教训,而不是任何单独的技术。

    我们希望那些专注于在工业环境中应用深度学习的人会发现我们的经验很有价值。我们通过回顾我们为改进 DNN 架构所作的努力来展开讨论。

    • 对于架构,我们描述了一个新的 ranking 神经网络,重点关注于将我们现有的 DNN 发展到两层全连接网络之外的过程。
    • 在处理 ranking 中的位置偏差positional bias 时,我们描述了一种新颖的方法,该方法在处理库存inventory 方面取得了显著的提升。
    • 为了解决冷启动问题,我们描述了我们对问题的看法,以及我们为改善平台上新 listing 的处理所做的改变。

14.1 架构优化

  1. 什么是深度学习?嗯,添加更多的 layer。至少,在回顾了引领当前深度学习时代的一系列进展之后,这是我们朴素的解读。但是,当我们试图复制 《Revisiting Unreasonable Effectiveness of Data in Deep Learning Era》中总结的 scaling 数据和添加更多layer 的好处时,我们遇到的只是中性的测试结果。

    为了解释为什么增加layer 没有显示任何收益,我们从文献中借用了更多的想法,例如应用残差学习residual learningbatch normalization 等等。尽管如此,NDCG 在离线测试中仍然没有提升。

    我们从这些练习 exercise 中得出的结论是:增加layerconvolutional neural networks: CNN 卷积神经网络中的有效技术,但是不一定适用于所有 DNN 。对于像我们这样的全连接网络fully connected networks: FCN ,两个隐层就足够了,模型容量不是我们的问题。

    如果更深的网络不适合我们的架构,那么我么假设:更专业的网络可能适合我们的架构。因此,我们尝试了可以显式处理 querylisting 之间交互的架构,例如 Deep and Wide ,其中 query-listing 的特征交叉添加到 wide 部分。接下来是 《Attention is All you Need》 中基于 attention 的网络变体。这样做的目的是使得从query 特征派生的隐层将注意力集中在从listing 特征派生的隐层的某些部分上。这些努力的简短总结是,它们也未能改变现状。

    在尝试将成功的深度学习架构引入product application 时,在翻译任务translation 中经常忽略的是:一个体系架构的成功和它的应用上下文application context 有着错综复杂的联系。人们报告的架构性能提升来自于解决与它进行比较的baseline 的某些缺点。由于深度学习普遍缺乏可解释性explainability ,因此很难准确推断出新架构正在解决什么缺点、以及如何解决这些缺点。因此,确定这些缺点是否也同样困扰着自家产品,就变成了一种猜测。

    为了提高我们成功的几率,我们放弃了 “下载论文 --> 实现 --> A/B test ” 的循环。相反,我们决定基于一个非常简单的原则来推动这个过程:用户主导、模型跟随 users lead, model follows

    问题驱动,而不是模型驱动。

  2. 用户主导、模型跟随 Users Lead, Model Follows :这里的想法是:首先量化一个用户问题user problem ,随后调整模型以响应用户问题。

    沿着这些思路,我们观察到 《Applying Deep Learning to Airbnb Search》 中描述的一系列成功的 ranking 模型不仅与预订量的增加有关,而且还与搜索结果的平均 listing 价格降低有关。这表明模型迭代越来越接近租客的价格偏好price preference ,其中每轮迭代时平均价格低于前面模型的平均价格。

    我们怀疑,即使在连续降价之后,模型的价格选择和租客的价格偏好之间也可能存在 gap 。为了量化这种gap,我们观察了每个租客看到的搜索结果的价格中位数、以及该租客预订 listing 的价格之间的 gap 的分布。由于价格服从对数正态分布log-normal distribution ,因此在对价格取对数之后计算差异。下图给出了差异的分布情况。X 轴显示了预订价格和搜索结果中间价median price 的对数偏移,Y 轴是这个对数偏移对应的用户数。

    我们预期的是:预订价格将围绕着搜索结果的中间价对称分布,并且类似于以零点为中心的正态分布。实际上相反,这个分布在负向侧negative side 更大,表明租客更偏好较低的价格。这给了我们一个具体的用户问题来调查:是否需要将更接近租客价格偏好的低价listing 排名更高。

    假设有两个普通的listing,它们除了价格在其它方面都相同,我们的直觉理解是租客更喜欢更便宜的 listing 。我们的ranking 模型是否真正理解了 cheaper is better 的原则?我们并不完全确定。

    cheaper is better 是一个先验知识,因此希望模型能够学到这一先验知识。

  3. Enforcing Cheaper Is Better 强迫cheaper is better :我们不清楚模型如何解释 listing 价格的原因是:模型是一个 DNN。一些熟悉的工具,如检查逻辑回归模型中相应权重、或者 GBDT 模型中的部分依赖图partial dependence graphs,在 DNN 环境中都不再有效。

    为了使得价格更可解释 interpretable ,我们对模型架构进行了以下更改:

    • DNN 的输入特征中移除价格。我们将这个修改的 DNN 模型记作 ,其中 DNN 模型参数, 为用户特征,query 特征, 为移除了价格的 listing 特征。

    • 模型的最终输出修改为:

      其中 为待学习的参数, 定义为:

      其中 price 为原始的价格特征,而 为根据日志的listing 价格的中位数计算得出的常数。

    -tanh(.) 项允许我们通过相对于价格单调递减的output score 来强制执行 cheaper is better 。易于解释的 参数使得我们能够准确描绘出价格的精确影响。

    通过训练数据我们学习到参数取值为: 。我们在下图中绘制了在 ranking 过程中, 遇到的典型取值所对应 tanh(.) 项的结果。X 轴表示归一化的价格( 值),Y 轴表示 tanh(.) 项的结果。

    当对 《Applying Deep Learning to Airbnb Search》 中的带两个隐层的 DNN 进行在线 A/B test 时,搜索结果的平均价格下降了 -5.7%,这与离线分析相一致。但是价格的可解释性付出了沉重的代价,因为预订量下降了 -1.5%

    我们猜想背后的原因是:价格和其它特征密切相关,将价格从模型中分离出来导致欠拟合。NDCG 在训练集和测试集上都下降了,该事实支持这一假设。

  4. 广义单调性Generalized Monotonicity:为了在模型中保留 cheaper is better 的直觉,但是允许价格和其它特征相互作用,我们开始研究在某些输入特征方面是单调monotonicDNN 架构。

    lattice networks 为这个问题提供了一个优雅的解决方案。但是,将我们的整个系统切换到 lattice networks 是一个巨大的挑战,我们寻求一种破坏性较小的机制。因此,我们构建了下图中所示的架构,除Tensorflow 中原生节点之外,该架构不依赖于任何专门的计算节点。

    我们讨论架构的逐步构建,确保从输入价格节点到最终输出的所有路径在价格方面都是单调的:

    • 我们将 作为 DNN 的输入,该输入相对于价格单调递减。

    • input layer,我们没有将 乘以权重参数,而是将它乘以权重参数的平方。因为在任何 参数(都是实数)的情况下, 都是相对于价格单调递减的。因此第一层隐层的输入对于价格也是单调递减的。

    • 对于隐层,我们使用 作为激活函数,该激活函数保持了单调性。

    • 给定相对于 单调递减的两个函数 ,那么 也是相对于 单调递减的。其中 可以为任意实数。

      我们在第二个隐层和输出层使用这个属性,所有权重都是平方的。在下图中,这在第二个隐层和输出层用粗实线表示。即:粗实线表示平方权重,虚线表示常规的权重。

    • 添加一个既没有价格作为输入、也没有任何单调性约束的子网subnet,从而允许其它特征之间的不受约束的交互。

    尽管比 Enforcing Cheaper Is Better 中描述的架构更加灵活,但是在线测试的结果非常相似:预订量下降了 -1.6%

    Enforcing Cheaper Is Better 中描述的架构一样,该架构强制模型在任何情况下的输出都是相对于价格单调递减的。这种架构的失败表明:价格的单调性是一个过于严格的约束。

  5. 软单调性Soft Monotonicity:虽然前面描述的架构揭示了 DNN 在支持模型约束方面的能力,但是它也教会了我们 DNN 的另一个特点:它们的行为就像团队中的一位明星工程师star engineer。给定一个问题,让他自己解决,他通常会想出一个合理的解决方案。但是强迫他往某个方向走,灾难很快就会随之而来。

    所以在我们的下一次迭代中,我们决定通过配置上下文setting context 来管理 DNN ,而不是通过控制control 来管理 DNN 。我们没有强制要求模型的输出是价格的单调函数,而是添加了一个软提示soft hintcheaper was better

    通常,每个训练样本包含一对listing,一个是预订的 listing、另一个是未预订的 listing 。将 DNN 应用于这两个listing 的特征并产生对应的logits,并且定义损失函数为:

    为了添加价格提示price hint,我们为每个训练样本引入了第二个label,指示两个listing 中哪个价格更低、哪个价格更高。然后我们修改损失函数如下:

    alpha 超参数提供了一种方法来控制:结果是按照相关性relevance 排序还是按照价格price 排序。

    将价格约束作为一种正则化,使得模型倾向于选择低价的 listing

    为了测试这个想法,我们将 alpha 超参数调整到最小值,这样在离线测试中,我们得到了和 baseline 模型相同的 NDCG。这使得我们能够在不损害相关性的情况下尽可能地推动 cheaper is better 的直觉,至少在离线指标上是这样的。

    在在线 A/B test 中,我们观察到搜索结果的平均价格下降了 -3.3% ,但是预订量也下降了 -0.67%

    离线分析的局限性在于:它仅对日志中可用的、reranking 中的 top 结果(因为这些日志是reranking 模块胜出的流量)进行评估。在在线测试期间,将新训练的模型应用于整个库存inventory 空间揭示了将价格损失作为训练目标的一部分的真实代价。

    离线评估样本分布和在线样本分布不同,因此即使离线 auc 相同的情况下,在线 a/b test 表现也不相同。

  6. 执行个体条件期望 Putting Some ICE :降价实验带来的灾难让我们处于一种矛盾的状态:搜索结果中的listing 价格似乎高于房客偏好价格,但是压低价格却让房客不高兴。

    为了了解新模型的不足之处,有必要比较 baseline 模型是如何利用价格特征的,但是这被全连接 DNN 缺乏可解释性所掩盖。如前所述,像部分依赖图partial dependence plots 这样的概念没有用,因为这种方式依赖于给定的特征对模型的影响独立于其它特征的假设。试图给出价格的部分依赖图会产生平缓倾斜sloping straight 的直线,这表明 DNN 对价格有一些轻微的线性依赖,这与我们所知道的相矛盾。

    为了取得进展,我们缩小scaled downDNN 可解释性的问题。我们没有试图对价格如何影响DNN 做一般性的陈述statement,而是聚焦于一次解释单个搜索结果。借用《Peeking Inside the Black Box: Visualizing Statistical Learning With Plots of Individual Conditional Expectation》 中的个体条件期望individual conditional expectation:ICEplots 的想法,我们从单个搜索结果中获取listing,在保持所有其它特征不变的情况下对价格选取一定的范围,并构建模型得分的plot

    下面给出了一个示例。图中x 轴为价格、y 轴为模型预估的 listing score。每条曲线代表了单次搜索结果中的一个 lising (在多个价格上的score)。因为单次搜索返回多个 listing 结果,所以下图中有多条曲线。

    该图表明,《Applying Deep Learning to Airbnb Search》 中的两层全连接层 DNN 已经理解了 cheaper was better。对日志中随机选择的搜索集合重复 ICE 分析进一步加强了这个结论。

    失败的架构通过试图进一步压低价格从而影响了模型质量。

  7. 双塔架构Two Tower Architecture :回到下图,租客显然是在通过这个plot 传递一个信息。但是,那些致力于用相关性relevance 换取价格price 的架构错误地解释了这个信息。需要对下图进行重新解释,这个解释必须和价格保持一致,也必须和相关性保持一致。

    即不能用相关性的降低来换取价格的降低,应该在保持相关性的同时降低价格。

    当我们计算租客搜索结果的中间价与其预订价格之间的差异,并计算按城市分组的均值时,就出现了上图的替代解释alternate explanation 。正如预期的那样,各城市之间存在差异。但是和头部城市相比,尾部城市的差异要大得多。尾部城市也通常位于发展中市场developing markets。下图展示了某些选定城市的搜索结果中间价和预订价格之间的差异的平均值。

    这就产生了一个假设,即:搜索结果中间价与其预订价格之间差异plot 背后的 DNN 正遭受多数暴政tyranny of the majority,它聚焦于针对统治了预订量的热门区域调优的 price-quality tradeoff 。将这个 trade-off 推广到长尾的query 效果不佳,并且该模型也不适应本地条件(即长尾城市)。

    该假设与馈入 DNN 特征的另一个观察相吻合。鉴于DNN 是使用 pairwise 损失训练的,pair 对的两个listing 中有差异的特征似乎具有最大影响力。query 特征,这对于pair 对的两个listing 都是公共的,似乎没有什么影响,并且删除query 特征对于 NDCG 的影响非常微小。

    新的想法是,该模型充分理解了 cheaper is better,但它缺少的是合适价格right price 的概念。理解这一概念需要密切关注query 特征,如位置location,而不是纯粹基于listing 特征进行区分。这启发了该架构的下一次修订,新架构由双塔two towers 组成。

    • 第一个塔由query 特征和用户特征馈入,生成了一个 100 维的向量,该向量从概念上代表了 query-user 组合的ideal 理想listing
    • 第二个塔根据listing 特征构建了一个 100 维的向量。两个塔输出向量之间的欧氏距离用于衡量给定listingquery-user 的理想listing 之间的距离。

    训练样本由listing pair 对组成:一个已预订listing、一个未预订listing

    损失函数的定义是:和已预订listing 相比,未预订listing 与理想情况的接近程度。因此,对这个双塔模型进行训练可以使得pair 对中的预订listing 更接近理想listing 、同时将未预订listing 远离理想listing 。这类似于《A Unified Embedding for Face Recognition and Clustering》 中引入的 triplet loss 。这里的主要区别在于:我们没有在三元组triples 上训练,而是只有listing pair ,并且三元组中缺失的anchor listing 是由 query-user 塔来自动学习。

    querylistingpairwise training 如下图所示。

    Tensorflow 代码如下所示,实际实现可能略有不同从而优化训练速度:

  8. 测试结果:当进行线上 A/B test 时,其中 baseline《Applying Deep Learning to Airbnb Search》 中的两层全连接层的 DNN ,双塔架构的预订量增加了 +0.6% 。这一增长是由搜索便利性ease of search 的提高所推动的,因为在线 NDCG 提高了 0.7% 。尽管这个双塔架构的目标不是直接降低价格,但是我们观察到搜索结果的平均价格降低了 -2.3%,这是相关性增加的副作用 side effect。预订量的增加抵消了价格下降对于收入的影响,整体收入增加了 +0.75%

    搜索便利性:搜索结果中,目标listing 排名更靠前因此有利于用户预订。

    除了提高搜索结果的质量之外,双塔架构还允许我们优化在线 DNNscoring 延迟。

    • 对于全连接架构,评估第一个隐层贡献了 scoring 延迟的最大部分。评估第一个隐层的计算复杂度可以表示为 ,其中 是和 listing 无关的 queryuser 特征的数量,listing 特征的数量, 为第一层的隐单元数量。

      为了评估包含 listing 的结果集(该结果集对应于单个 query 的搜索结果),总的算法复杂为

    • 在新架构的双塔中,query 塔独立于 listing。这允许在整个搜索结果集针对该塔仅评分一次,并且仅评估每个listinglisting dependent tower 。第一个隐层的计算复杂度降低到 ,其中 listing 塔和 query 塔的隐层神经元数量。

      当在线测试时,这导致 99th 百分位数的 scoring 延迟降低了 -33%

  9. 架构回顾:就在我们庆祝成功的时候,随着 DNN 迭代的启动,疑虑也悄然而至。架构是否按预期工作?或者 DNN 是否偶然发现了其它意外情况?

    过去,DNN 的不可解释的性质使得回答此类疑问变得极其困难。但是考虑到双塔架构的直觉是针对用户问题user problem 而开发的,我们现在可以使用这些直觉来更好地了解 DNN 的运作方式。

    重温价格的 ICE 图,我们看到了一个显著的变化。如下图所示,我们看到分数在某些价格附近达到峰值,而不是总是向下倾斜(对应于 cheaper is better )。这更接近 right price for the trip(旅行的正确价格) 的解释。

    在这种情况下,一个经常被提出的问题是,低质量的listing 是否可以通过简单地降低价格从而在新模型中提升排名。仔细检查 ICE 曲线发现,某些价格附近的分数峰值仅发生在高质量listing 中,这些listing 通常一开始就排名靠前。对于大多数listing ,该图仍然保持着与价格相关的单调递减曲线。

    正确价格right price 、理想listing 这些概念的核心是query 塔生成的向量,因此自然而然的后续工作是准确地研究这些向量到底是什么样子的。为了进行分析,我们随机采样了一批搜索来运行了双塔 DNN,并收集了 query塔的输出向量。由于 100 维向量对于人类是不可解释的,因此我们应用 t-SNE 将这些向量降维到 2 维空间,如下图所示。图中标出了部分城市对应的 query ,每个点代表一个 query。某些 query 标记有 city/guest-count/trip-length 信息。点的颜色代表query 的预订订单价格,越便宜颜色越绿、越贵颜色越蓝。令人欣慰的是,租客数量guest count 和行程长度trip length 等参数相似的值形成了大的簇clusters 。在大的簇内部,直觉上感觉相似的城市(比如都是发达市场或者发展中市场)被放置在彼此相对接近的地方。

    值得强调的是,簇不仅仅是价格簇price clusters。和query 对应的预订listing 的价格由点的颜色来表示,我们看到簇具有所有范围all range 的颜色。虽然莫斯科通常比巴黎更便宜,但是莫斯科的预订价格很容易超过巴黎的预订价格,这取决于租客数量、停留时间duration of stay 、离旅游景点的距离、周末 vs 工作日、以及许多其他因素。

    价格与所有其它维度有着千丝万缕的联系,掌握旅行的正确价格意味着同时掌握所有其它因素。我们所作的分析都不能作为双塔架构确实发展出这种掌握grasp 的有力证据。但是,针对价格的 ICE 图、query 塔输出的t-SNE 可视化、以及对跨城市price movements的额外分析给了我们足够的信息,让我们相信这一机制正在按预期发挥作用。

    放下一系列的架构操作,接下来我们继续解决ranking 的挑战,该挑战不仅影响房客,也影响 Airbnb 社区的另一半,即房东。

14.2 冷启动改善

  1. 在旅游领域的机器学习application 中,任何时候都有很大一部分用户是新用户,或者在很长一段时间后才使用该产品。此时用户处于连续冷启动状态 continuous cold start

    处理 user level 冷启动是核心排序公式 core ranking formulation 本身的一部分。所以在提到冷启动问题时,我们把注意力集中在 item level 冷启动上(即如何处理新item 的排名)。和前面改进 DNN 架构的情况一样,我们探索的起点不是文献综述,而是对用户问题user problem 的观察。

  2. 使用 NDCG 来量化预订listing 在搜索结果中的位置,这对我们来说是衡量模型性能最可靠的方法。因此,调查用户问题的一个自然的地方是:寻找 NDCG 低于 NDCG 整体水平的细分市场。

    考虑平台上新listing 、老listing 中,预定listing 的在线 NDCG 之间的差异,我们观察到了 -6% 的差距。而模型预估的 NDCG 和在线预定的 NDCG 之间的差异只有 0.7% 。这表明该模型让房客更难发现值得预订的新listing

    为了更好地理解这一点,我们从 DNN 中移除了所有的、listing 上基于房客历史互动生成的输入特征,例如一个listing 的历史预订量。删除这些互动特征engagement features导致离线 NDCG 下降了 -4.5%。显然,DNN 非常依赖于互动特征。由于新listing 没有这些互动特征,因此 DNN 被迫根据剩余特征做出宽泛broad 的判断,从而接近新listing 的平均表现。

  3. 冷启动方法视为 Explore-Exploit:冷启动问题的一个可能的框架是将它视为探索和利用explore-exploit 之间的tradeoff

    排序策略可以通过利用exploiting 当前库存inventory 的知识来短期地专门优化预订量,并且只押注那些有良好记录的listing 。但是为了市场的长期成功,它需要支付一些成本来探索explore 新的库存。

    这种tradeoff 可以作为新listing 的显式排名提升boost 来实现,它为新listing 分配更高的排名(相比较于 DNN 所确定的排名)。这允许新listing 以较低的预订代价cost 收集租客的反馈。这种通用的方式在电商排序application 中很流行,例如在 《Re-ranking results in a search》 中。这种 boost 可以通过曝光次数限制、或者引入时间衰减来进一步细化refined

    即,给新 listing 预估的得分提供一个大于 1 的权重,该权重可以随着时间衰减到 1.0、或者随着新 listing 曝光次数增加而衰减到 1.0

    我们的第一次迭代是为了测试这种 boost 。通过在线 A/B test,与没有 boost 相比,boost 并没有带来新listing 的预订量的提升或下降(效果中性),并且为新listing 带来了 +8.5% 的首页曝光次数。

    但是, explore-exploit 范式带来了严峻的挑战:

    • listingranking boost 被两种相反的力量拉向不同的方向:

      • 由于搜索结果相关性relevance 降低,短期内用户体验user experience 下降。我们可以准确地衡量这一影响(通过点击率或预订量)。
      • 由于库存增加,长期来看用户体验有所改善。我们发现这种影响很难量化。

      缺乏对最佳boost 值的明确和客观的定义导致了激烈的内部辩论,没有一个解决方案让每个团队都满意。

    • 即使能够确定探索exploration 成本的总体预算,很明显,预算的正确使用取决于特定地域location 的供需supply and demand 情况。

      • 当需求量demand 很大时,探索的容忍度就很高。当需求量很少时,探索的容忍度就没那么高。

      即流量充裕的时候,适当的探索可以接受;但是流量稀缺的时候,探索代价较大。

      • 在商品供给受到限制的区域,探索和扩大库存的需求很高。当大量优质listing 空置时,几乎没有动力承担探索成本。

        即供给稀缺的时候,很有必要进行探索;但是供给充裕的时候,没动力进行探索。

      供需反过来又受到位置location 、季节性seasonality 、租客容量capacity 等参数的影响。因此,为了最优地使用全局探索预算,需要数千个局部参数localizing parameters ,这是一项无法手动完成的任务。

  4. 预估将来的用户互动User Engagement:为了让系统更易于管理,我们退了一步,开始问:是什么让一个新的 listing 与众不同?

    答案当然是缺乏用户产生的互动特征engagement features ,例如预订量、点击量、评论量等等。价格、位置location、遍历设施amenities 等其它属性,新listing 和其它listing 一样。理论上,如果我们有一个预言机可以 100% 准确预测新listing 的互动特征,那么它可以最佳地解决冷启动问题。

    因此,我们没有将冷启动视为 explore-exploit tradeoff ,而是将其重新定义为一个评估新listing 互动值 engagement values的问题。问题的重新定义揭示了一些重要的东西:它允许我们为问题定义一个客观的理想 objective ideal ,并不断地朝着它努力。

    为了解决冷启动问题,我们引入了一个新的组件component 来为 DNN 提供数据,该组件在训练和评估时预测新listing 的用户互动特征。为了衡量估计器estimator 的准确性accuracy,我们采用了以下步骤:

    • 从日志中采样 个搜索结果。对于每个搜索结果,从 top 100 个位置随机抽取一个 listing。这些代表了受到租客充分关注的 listing 样本,因此它们的互动特征已经充分融合converged

    • 表示从日志中获取的抽样listing 的排名。我们将排名表示为 real,从而表示listing 的互动特征是真实租客互动的结果。从排名中,我们计算 real discounted rank 为:

      为什么采用这种形式的 DR 指标?论文未给出解释。该指标的性质:真实排名越靠前,指标越大;指标最大值为 1.0 (当真实排第一名时)、最小值趋近于零。

    • 接下来,对于每个抽样的listing,我们删除所有互动特征,并用被estimator 预测的互动特征来代替它们。我们使用预估的互动特征对listing 进行评分,在相应的日志搜索结果中找到它的新排名,然后从中计算 discounted rank 。我们用 来表示。

    • 对于每个抽样的listing,我们计算互动估计中的误差为

    • 为了获取整体误差,我们对所有抽样的listing 的互动估计误差engagement estimation error 进行平均。

    理想的互动估计器会产生零误差。要在两个估计器之间取舍,可以选择误差较小的估计器。

    为了验证,我们对比了两种估计方法:

    • baseline 是生产中使用的系统,它为缺失的特征分配默认值,包括新listing 的互动特征默认值。默认值是通过手动分析相应特征而创建的常量。

    • 我们对比了一个 estimator,这个 estimator 通过新listing 地理位置附近的其它listing 的互动特征均值来估计了新listing 的互动特征。

      为了提高准确性accuracy,它只考虑和新listing 的房客容量capacity 相匹配的相邻listing ,并计算滑动时间窗口的均值从而考虑季节性seasonality

      这本质上是一种缺失值填充策略:使用相似样本在该特征上取值的均值来进行填充。但是这种方式只能填充单值型的缺失值,难以处理序列型的缺失值。

      例如,为了估计一个容纳两人的新listing 的预订量,我们选取了新listing 的很小半径内的、容量为两人的所有listing 的平均预订量。

      这在概念上类似于朴素贝叶斯推荐器Naive Bayes recommender (它使用生成式方法generative method 来估计缺失信息)。

  5. 测试结果:

    • 在离线分析中,与使用默认值相比,上述互动估计器将互动估计误差降低了 -42%
    • 在在线 A/B test 中,我们观察到新listing 的预订量提高了 +14%,同时新listing 的首页曝光量增加了 +14% 。除了对新listing 的影响之外,整体预订量增加了 +0.38%,表明用户体验的整体改善。

14.3 Positional Bias

  1. 我们研究位置偏差positional bias 的出发点是完全不相关unrelated 的。与新listingNDCG 较低的观察结果类似,另一个表现低于预期的细分市场是精品酒店boutique hotels 和传统住宿加早餐酒店traditional bed and breakfasts。这个细分市场作为库存的一部分正在迅速增长。

    从观察中得出的一个假设是:由于位置偏差,在训练数据中未充分表达under-represented的库存没有得到最佳排名。但是和新listing 表现与冷启动之间的联系不同,没有充分理由相信位置偏差是这个case 的唯一罪魁祸首。还有多个其它假设。

    虽然我们发现关注用户问题user problem 要比简单地从文献综述中引入想法要好得多,但是用户问题并不是万灵药。在用户问题和模型缺陷之间建立因果关系远远不是简单直接的。在目前的场景中,我们是在黑暗中射击shooting in the dark

    但是与此同时,我们决定寻找模型中的最大gap 来解释观察结果。文献综述对于确定我们模型中潜在的主要gap 至关重要。

  2. 相关工作:给定用户 发出的 query ,用户从搜索结果中预订 listing 的概率可以分解为两个因素:

    • listing 和用户相关relevant 的概率。这个概率可以表示为 ,从而明确它和 listing、用户、query 的依赖关系。

    • 给定listing 在搜索结果中的位置 的条件下,用户检查examinedlisting 的概率。这可能取决于用户(例如,移动设备上的用户可能对 top 结果有更高的bias )或query (例如,提前期lead days 较短的用户可能不太关注底部结果)。

      我们将这个概率表示为 ,它独立于 listing

      即,用户看到这个 listing 的概率,它和设备相关(如,PC 端还是手机端,以及手机型号)、和用户紧迫程度有关(如,是今天就想入住,还是三个月之后入住)。

    使用 《Click Models for Web Search》 中描述的position based 模型的简化建设,我们将用户预订listing 的概率简单地表示为两个分解概率的乘积:

    通过直接训练一个模型来预测预订,该模型学会预测了依赖于 。这反过来又取决于位置 ,这是先前previousranking 模型做出的决定。因此,当前的模型变得依赖于先前的模型(指的是模型的前一个版本)。

    理想情况下,我们希望模型专注于 ,并仅按照相关性relevancelisting 进行排序。为了实现这一点, 《Unbiased Learning-to-Rank with Biased Feedback》描述了一种具有两个关键概念的方法:

    • 一个预测 的倾向性模型propensity model
    • 用预测的倾向的倒数来加权每个训练样本。

    虽然构建倾向性模型通常涉及扰乱perturbing 搜索结果从而收集反事实counterfactuals 的样本,但是 《Estimating Position Bias Without Intrusive Interventions》 描述了在没有额外干扰的情况下构建倾向模型的方法。

  3. 位置作为控制变量Position As Control Variable:我们的解决方案有两个关键亮点。

    • 首先,它是非侵入式non-intrusive 的,不需要对搜索结果进行任何随机化。

      我们依赖 Airbnb 搜索结果的一些独特属性,这些属性使得listing 即使在排序分不变的情况下也可能出现在不同的位置:

      • listing 代表给定日期范围内只能预订一次的物理实体physical entities 。随着listing 被预订并从搜索结果中消失,这会改变剩余listingposition

        Airbnb 中,每个 item 的库存只有一个,这和电商(每个item 库存很多个)、新闻(每个 item 库存无限)不同。

      • 每个listing 都有自己独特的日历可用性unique calendar availability,因此对于跨日期范围的相似query ,不同的listing 会出现在不同的position

    • 其次,我们没有明确建立一个倾向模型。相反,我们在 DNN 中引入位置position 作为特征,并通过dropout 进行正则化。在评分过程中,我们将position 特征设置为零。

    接下来我们描述为什么这种方法有效的直觉intuition 。我们以前面描述的 DNN 为基础,将query特征、用户特征、listing 特征作为输入。利用符号 query 特征)、 (用户特征)、listing 特征)、DNN 参数),我们将 DNN 的输出表示为:

    这反映了《Click Models for Web Search》position based 模型所作的假设,其中:

    • 估计了 ,我们称之为相关性预测relevance prediction
    • 预估 ,我们称之为位置偏差预测positional bias prediction

    很明显 缺少listing 的位置 作为输入,而它试图估计的量依赖于 。因此,我们的第一步是将 作为输入特征添加到 DNN。因为相关性预测和位置偏差预测都是由 DNN 的输入馈送fed的,因此向输入中添加 会将我们的 DNN 变为:

    假设 独立于 listing ,位置偏差预测对 的任何依赖性dependence 都可以被视为误差error 。我们假设有足够数量的训练数据,待学习的参数 能够最小化该误差。我们将这个假设理解为:

    其中从 中移除

    评分时,我们将位置特征 设置为零。在给定的query 中,DNN 评分的 listing 中是不变的。我们使用 来表示给定搜索的 query 特征和用户特征。因此,位置偏差预测变为 ,它是对给定搜索结果中所有listing 不变invariant 的,我们将其记作 。那么DNN 的评分变为:

    这使得两个listing 得分的比较独立于位置偏差positional bias ,并且仅依赖于listing 相关性relevance 。本质上,我们在排序模型中添加了position 作为控制变量control variable

    对于给定的 (因此 是固定的),我们需要对所有的 listing 进行位置无关的排序。则 的排序等价于 的排序。

  4. Position Dropout:在 position based 模型的假设下,增加position 作为控制变量有效地消除了listing 排序中的位置偏差预测,但是它引入了一个新的问题:相关性预测现在依赖于位置特征position feature 。这使得 DNN 在训练期间依赖位置特征来预测相关性,但是在评分期间无法利用学到的、位置相关的知识(因为评分期间位置特征总是为零)。

    将具有位置特征的 DNN 和没有位置特征的baseline 进行比较,我们可以看到离线 NDCG 下降了大约 -1.3% 。因此,直接将位置作为控制变量引入模型似乎会损害相关性预测。为了减少相关性预测对于位置特征的依赖项,我们使用 dropout 对其进行正则化。在训练期间,我们随机性地将listingposition 设为0,这个概率由 dropout rate 来控制。

    dropout rate 在无噪声noise-free 地访问位置特征从而准确地推断位置偏差 vs 有噪声noisy地访问位置特征从而远离相关性预测之间进行tradeoff。我们尝试通过以下步骤找到平衡的 tradeoff

    • 扫描一个范围内的 dropout rate ,并在测试集上计算两种 NDCG

      • 第一个是在测试期间将position 为零,这衡量了相关性预测并表示为
      • 第二个通过保留位置特征来衡量相关性和位置偏差组合在一起的预测,记作
    • 从而获得位置偏差预测。这里的直觉是:通过比较有位置输入和没有位置输入的排序质量,我们可以估计位置对于排序的贡献。

      我们得到了 针对位置偏差预测的曲线,如下图所示。Y 轴为 X 轴为位置偏差预测。

    • 为了在相关性预测和位置偏差预测之间取得平衡,我们在曲线上选择一个点,该点在 X 轴上的位置偏差预测足够先进advanced,而且不会导致Y 轴上的相关性预测下降太多。

    通过这个练习exercise,我们最终选择了 0.15dropout rate

  5. 测试结果:我们通过在线 A/B test 测试了这个想法,其中:对照组是没有位置偏差的 DNN;实验组是相同的 DNN,但是使用位置作为特征进行训练,并以 0.15dropout rate 进行正则化。在在线测试中,我们观察到预订量增加了 0.7%

    除了预订量增加之外,收入增长 1.8% 也是一个惊喜。收入增长这个副作用说明了位置偏差是如何在模型的多次迭代中累计起来的。

    对于排序模型来说,了解价格的影响相对容易,因为价格是一个非常清晰的特征,并且数据强烈表明人们更喜欢较低的价格。质量quality、地域location 等平衡力量balancing forces 更难学习。因此,最初的简单模型严重依赖较低的价格。

    经过多次模型迭代,我们提高了对质量和地域的理解,但那时对更便宜的价格的bias 已经在训练数据中根深蒂固。这种黏性使得接下来的模型高估了对较低价格的偏好。消除positional bias使得模型更接近客人的真实偏好,并在价格、质量、地域之间取得更好的平衡。观察到的收入增长是其直接后果。

    最后,我们观察到精品酒店的预订量增加了 1.1%

十五、HOP-Rec[2018]

  1. 推荐系统在现代无处不在,并且已经广泛应用于推荐音乐、书籍、电影等 item 的服务。真实世界的推荐系统包括很多有利于推荐的 user-item 交互,包括播放时间、喜欢、分享、以及贴标签 tag 。协同过滤collaborative filtering: CF 通常用于利用这种交互数据进行推荐,因为CF 在各种推荐策略之间性能表现较好,并且不需要领域知识domain knowledge

    有两种主流的 CF 模型:潜在因子模型latent factor model 和基于图的模型graph-based model

    • 潜在因子模型通过分解 user-item 矩阵来发现 user-item 交互背后的共享潜在因子shared latent factor 。矩阵分解matrix factorization: MF 是此类方法的典型代表。

      此外,最近的文献更多地关注从隐式数据优化 item 排序,而不是预测显式的item score 。大多数此类方法假设用户对未观察到的 item 不太感兴趣,因此这些方法旨在区分观察到的itempositive)和未观察到的 itemnegative)。

      总而言之,潜在因子模型通过分解观察到的用户和 item 之间的直接交互来捕获用户偏好。

    • 基于图的模型探索了由用户、item、及其交互构建的简单 user-item 二部图bipartite graph 中固有的inherent 、顶点之间的高阶邻近性high-order proximity

      在某种程度上,这种基于图的方法放松了基于因子分解的模型所做出的假设(即:假设用户对未观察到的 item 不太感兴趣),因为它们显式地对user-item 交互二部图中的用户和 item 之间的高阶邻近性进行建模。

      总而言之,基于图的模型从由 user-item 交互构建的图中捕获用户间接偏好。

    在论文 《HOP-Rec: High-Order Proximity for Implicit Recommendation》中,作者提出了高阶临近性增强推荐模型 high-order proximity augmented recommendation: HOP-Rec,这是一个结合了这两种隐式推荐方法(潜在因子模型和基于图的模型)的、统一而有效的方法。HOP-Rec 通过在user-item 二部图上进行随机游走,从而为每个用户发现邻域item 的高阶间接信息high-order indirect information 。通过对游走路径中不同阶数使用置信参数confidence parameterHOP-Rec 在分解用户偏好的潜在因子时同时考虑item 的不同阶数。

    下图说明了在观察到的交互中对用户和 item 之间的高阶邻近性建模的思想。

    • (a) 表示由观察到的 user-item 交互构建的二部图。
    • (b) 给出了一条从源顶点 到目标顶点 的路径。
    • (c) 以矩阵的形式记录了用户和 item 之间的直接交互(一阶邻近性)。
    • (d) 以矩阵的形式显示了用户和 item 之间的高阶关系(高阶邻近性)。

    具体而言,用户 的潜在偏好item 按照它们在图 (b) 中的路径中出现的阶数进行排序。例如,观察到的item 和用户 具有一阶关系,未观察到的 item 和用户 具有二阶关系。HOP-Rec 显式地建模这种高阶间接偏好信息high-order indirect preference information

    在真实世界四个大规模数据集上的实验结果表明,HOP-Rec 显著优于几种state-of-the-art 的推荐算法,并表明将高阶邻近性和因子分解模型相结合对于一般的 top-N 隐式推荐问题很有帮助。

15.1 模型

15.1.1 因子分解模型和图模型

  1. 交互图Interaction Graph 的定义:user-item 交互由一个二元邻接矩阵 来表示,二部交互图bipartite interaction graph 基于二元邻接矩阵 来构建。其中:

    • 为用户集合,item 集合, 为顶点集合。
    • 表示是否存在交互,边集合
  2. k 阶邻近性k-order Proximity 的定义:给定一个交互图 ,顶点 之间的k 阶邻近性由它们在图上随机游走生成的序列中的转移概率来定义,其中

    具体而言,令 表示从源顶点 开始的随机游走序列,其中 分别表示顶点 的第 个邻居用户和第 个邻居item 。源顶点 与其第 个邻居item 之间的 k 阶邻近性定义为 ,其中:

    • 表示从 k 阶转移概率。
    • k 阶衰减因子decay factor。例如

    如果从 不存在可行的路径,则 k 阶邻近性为零。

  3. Factorization Model: FM 模型:因子分解模型的目标是估计以下两个潜在因子集合:,其中:

    • 为用户潜在因子集合,item 潜在因子集合, 为潜在因子空间的维度。
    • 的超集,由我们模型中的所有参数组成。

    表示用户 中的行向量, 表示 item 中的行向量,则 MF 针对隐式反馈数据集的目标函数为:

    其中:

    • 为置信度水平confidence level。通常选择 ,即观察到交互的 user-item 置信度高于未观察到交互的 user-item
    • 为二元变量表示在邻接矩阵 中观察到的用户 item 是否有交互。
    • 正则化参数 是防止观测值过拟合的超参数。

    在各种基于因子分解的模型中,基于排序ranking-based 的模型在top-N 推荐问题中表现突出。基于排序的模型如 BPRWARP 已经从传统的point-wise 方法(绝对关系)转变为 pairwise 方法(相对关系),其中排序损失ranking loss 可以定义为:

    其中:

    • 表示用户 观察到的itempositive), 表示用户 未观察到的 itemnegative),
    • 函数 表示item 排序问题的通用目标函数。具体而言,在 BPR 中, 是由logistic sigmoid 函数、对数函数、示性函数组成的排序函数。在 WARP 中, 由权重近似的排序函数和一个示性函数组成。

    基于排序的模型假设用户更喜欢观察到的 item 而不是未观察到的 item,因此其目标是从每对item pair 中区分出偏好的 item

  4. Graph Model 模型:除了通常研究的基于因子分解的模型之外,人们还提出了几个基于图的模型,这些模型利用随机游走来对推荐的 item 进行排序。具体而言,这类模型的主要思想是将 user-item 交互矩阵 视为交互图,并在图上使用随机游走从而引入间接偏好信息来提供推荐。

15.1.2 HOP-Rec 模型

  1. 尽管基于因子分解的模型隐式地推断用户对未观测item 的偏好,但是最近的研究表明显式地建模此类潜在偏好potential preference 可以提高推荐系统的性能。受到因子分解模型和图模型的启发,我们提出了 HOP-Rec。这是一个统一的框架:

    • HOP-Rec 在给定的 user-item 交互矩阵中捕获高阶偏好信息。
    • HOP-Rec 通过在相应的交互图上使用随机游走来扩展scale 到大规模的真实世界数据集。
  2. HOP-Rec 的目标函数定义为:

    其中:

    • 表示从随机游走序列 中采样itemk 阶概率分布(即前面定义的 )。
    • 表示从所有item 的集合中采样 item 的均匀分布。
    • 表示在我们的方法中建模的最大阶数。

    上述物理含义是:以概率 随机采样 k 阶邻居item 作为正样本、以均匀随机采样item 作为负样本,然后对它们的 pairwise loss 进行衰减降权(由 指定衰减因子)。注意:每个正样本采样 个负样本, 为超参数。

    从另一个角度来看,我们通过从 user-item 交互中推断高阶邻近性来丰富最初的稀疏图。

    它的本质是:数据集增强技术。即利用二部图来增强正样本(同时对每个正样本负采样 个负样本),另外对增强的样本赋予一个小于 1 的权重。

  3. HOP-Rec 方法背后的主要思想是:通过随机游走来近似高阶概率矩阵分解,其中随机游走具有一个置信权重confidence weighting 的衰减因子, 。引入置信度加权参数 来区分不同邻近性之间的强度。具体而言,我们选择 作为衰减因子。

    注意,我们没有通过矩阵运算直接分解转移概率矩阵矩阵,这对于大规模数据集是不可行的。而随机游走近似矩阵分解已经被证明是有效和准确的。

    通过这种方式,我们不仅通过引入高阶偏好信息来平滑观察的item 和未观察的 item 之间的严格边界(“非此即彼”的边界),而且使得我们的方法可以扩展到大规模的现实世界数据集。

    具体而言,我们首先引入随机游走从而为每个用户 在交互图上探索。给定从 开始的随机游走序列 ,我们采样用户 k 阶潜在偏好的 item (即用户 k 阶邻居item )。

    此外,在现实世界的数据集中,用户集合 item 集合 degree 分布通常呈现幂律分布power-law distribution 。如果我们使用均匀采样,那么大多数采样路径都是低 degree 的用户顶点和 item 顶点。考虑到这一点,我们在随机游走过程中使用了 degree 采样,即:对于随机游走采样的每一个step,我们分别以正比于 deg(u) 的概率对用户 采样、以正比于 deg(i) 的概率对item 采样。

    如何采样正样本很关键,不同的采样方式产生不同的结果。

  4. 我们定义 函数为:

    其中:

    • 为示性函数,当条件 B 为真时返回 1、为假时返回 0。上式中仅当 才考虑损失(即负样本的偏好分更高)。
    • 为阶数相关的阈值参数,设置为 。这是因为阶数越高, 的偏好分越低,则阈值也需要越小。

    注意,item 是从所有 item 的集合中均匀采样的,因为我们对用户不喜欢的 item 采用假设的均匀分布 。这个假设是合理的,因为在很多真实场景中,对每个用户来讲,喜欢的item(观察到的 item)通常远远少于不喜欢的 item (未观察到的 item)。

  5. HOP-Rec 模型的目标函数可以通过异步随机梯度下降 asynchronous stochastic gradient descent: ASGD 来优化。

15.2 实验

  1. 数据集:为了验证 HOP-Rec 的能力和可扩展性,我们在四个公共数据集上进行了实验,这些数据集在领域domain、规模、稀疏性方面各不相同,如下表所示。

    对于每个数据集,我们丢弃那些交互少于5 个的用户和 item。此外,我们对每个数据集的交互记录进行预处理,从而模拟用户的隐式二元反馈:

    • 对于包含显式评分记录的Amazon-bookMovieLens 数据集,我们将所有>=4 分的评分记录转换为 label = 1、将<4分的评分记录转换为 label = 0
    • 对于 CiteUlike 数据集,不进行任何转换,因为它本身就是一个二元偏好数据集。

  2. baseline 方法:

    • 矩阵分解 Matrix Factorization: MFMF 是一种成熟且常用的 user-item 推荐技术。在实验中我们使用implicit library,它用交替最小二乘法alternating least-square: ALS 实现了 MF

    • 贝叶斯个性化排序Bayesian Personalized Ranking: BPRBPR 扩展了MFpointwise 方法,并引入 pairwise ranking loss 来进行个性化推荐。

    • Weighted Approximate-Rank Pairwise: WARP 损失:WARP 是一种有效估计排序函数的近似方法,其主要思想是根据它们在排序列表中的位置来加权 pairwise 违规violation

    • K-Order Statistic: K-OS 损失:K-OS 通过在优化过程中考虑正样本集合来扩展 WARP,其中 K 表示考虑的正样本数量。注意,当 K=1K-OS 退化为 WARP

      对于BPR, WARP, K-OS 三种方法,我们使用 lightfm library 进行实验。

    • Popularity-based Re-ranking: RP3(β):该方法作为各种graph-based 方法的一个强基线。该方法通过调节热门 item 的权重重新加权 ranking score,这个 ranking score 是基于随机游走而得到。该方法的评估时用原始作者提供的 library 进行的。

  3. 实验配置:

    • 对于 top-N 推荐,我们使用了以下三个常见的评估指标:precision@Nrecall@NMAP@N
    • 对于每个数据集,我们将二元交互矩阵随机分为两个部分:80% 作为训练集、20% 作为测试集。报告的性能取20 次实验的测试集均值。
    • 所有基于分解的方法以及提出的 HOP-Rec 都使用两个潜在因子的内积作为评分函数。
    • 除了 RP3(β) 这种以转移概率为排序分的纯图方法之外,其它方法的潜在因子 的维度固定为 120 。除了 之外,所有其它超参数都是在第一次评估时使用网格搜索和测试集基于 MAP 来选择。
    • 对于 HOP-Rec,我们搜索了从 1 ~3 的最佳阶数 K,以及针对不同规模数据集的采样倍数 N (对于 CiteUlike/MovieLens- 1M/MovieLens-20M/Amazon-Book 数据集,最佳采样倍数分别为 90/60/300/800)。
    • 对于 HOP-Rec 都是在 范围内随机均匀初始化,并且
  4. HOP-Rec 和其它五种 baseline 方法的性能比较如下表所示,其中: * 表示相对于所有 baseline 方法在 (成对 t 检验)时的统计显著性;%Improv 表示相对于最佳baseline 的性能提升比例。注意,原始library 的资源限制阻碍了我们在 Amazon-Book 上进行 PR3(β) 实验。

    可以看到:

    • WARP,K-OS,PR3(β) 是很强的 baseline 方法,因为它们和其它两种方法 MF,BPR 之间存在显著的性能差距。
    • HOP-Rec 通常产生优于或者相当与五种 baseline 方法的性能。

  5. 为进一步检查 HOP-Rec 中建模高阶邻近性的有效性,我们评估了关于参数 K 的性能,结果如下图所示。可以看到:融合高阶邻近性可以提升 HOP-Rec 的性能,但是对于最大的数据集 Amazon-Book,当 K=3 时性能下降。

十六、NCF[2017]

  1. 在信息爆炸的时代,推荐系统在缓解信息过载information overload 方面发挥着举足轻重的作用,并且已经被许多在线服务广泛采用,包括电商、在线新闻、社交媒体网站。个性化推荐系统的关键在于根据用户历史交互(例如评分、点击)对user-item 的偏好进行建模,这就是所谓的协同过滤collaborative filtering

    在各种协同过滤技术中,矩阵分解matrix factorization: MF 是最流行的一种,它将用户和 item 投影到共享的潜在空间latent space 中,使用潜在特征向量来表示用户和 item。此后,用户对 item 的交互被建模为它们潜在向量latent vector 的内积。通过Netflix Prize 的推广,MF 已经成为基于潜在因子模型latent factor model-based 的推荐的事实上的方法。

    许多研究工作致力于增强 MF,例如将其与基于邻域的模型neighbor-based model 相结合、将其与item 内容的主题模型topic model 相结合、将其扩展到分解机factorization machine 从而进行特征的通用建模。

    尽管 MF 对于协同过滤很有效,但是众所周知,它的性能可能会受到简单选择“内积” 作为交互函数的阻碍。例如,对于基于显式反馈的评分预测任务,众所周知,可以通过将 user bias 项和 item bias 项添加到交互函数中从而提高 MF 模型的性能。虽然这对于内积算子而言似乎只是一个微不足道的调整,但是它指出了设计一个更好的、专用的交互函数来建模用户和 item 之间潜在特征交互的积极效果。内积算子,它仅仅简单地线性组合多个潜在特征latent feature 的乘法,可能不足以捕获用户交互数据的复杂结构。

    在论文 《Neural Collaborative Filtering》 中,作者探讨了使用深度神经网络从数据中学习交互函数,而不是像以前许多工作那样人工设计交互函数。神经网络已经被证明能够逼近任何连续函数,而且最近发现神经网络deep neural networks: DNNs 在多个领域都有效 ,从计算机视觉、语音识别到文本处理。然而,与大量关于 MF 方法的文献相比,使用 DNN 进行推荐的工作相对较少。尽管最近的一些进展已经将 DNN 应用于推荐任务并显示出有希望的结果,但是它们主要使用 DNN 来建模辅助信息auxiliary information,例如item 的文本描述、音乐的音频特征、图像的视觉特征。在建模关键的协同过滤效果方面,他们仍然采用 MF,使用内积来结合用户潜在特征和 item 潜在特征。论文通过形式化formalize 用于协同过滤的神经网络建模方法来解决上述研究问题(利用神经网络来建模交互函数)。通过采用可以从数据中学习任意函数的神经网络架构代替内积,论文提出了一个名为 Neural Network-based Collaborative Filtering: NCF 的通用框架。

    论文聚焦于隐式反馈implicit feedback,隐式反馈通过视频观看、商品购买、item 点击等行为间接反映了用户的偏好。和显式反馈explicit feedback (即显式评分rating和评论review)相比,隐式反馈可以自动跟踪,因此更容易被内容提供商content provider 所收集。然而,隐式反馈的使用更具有挑战性,因为无法观察到用户满意度user satisfaction,并且负反馈negative feedback 天然的稀疏性。在本文中,作者探讨了如何利用DNN 对包含噪音的隐式反馈信号进行建模。

    论文的主要贡献:

    • 论文提出了一个神经网络架构来对用户和 item 的潜在特征进行建模,并设计了一个基于神经网络的协同过滤通用框架 NCF
    • 论文表明: MF 可以被解释为 NCF 的特殊情况,并利用多层感知机赋予 NCF 模型高度的非线性。
    • 论文在两个真实数据集上进行了大量的实验,从而证明 NCF 方法的有效性,以及深度学习在协同过滤方面的前景。
  2. 相关工作:

    • 隐式反馈:虽然关于推荐的早期文献主要集中在显式反馈,但最近人们越来越关注隐式数据。具有隐式反馈的协同过滤 collaborative filtering: CF 任务通常被形式化为 item 推荐问题,其目的是向用户推荐一个简短的 item 列表。和显式反馈工作广泛解决的评分预测相比,解决 item 推荐问题更实用但更具有挑战性。一个关键的洞察 insight 是对缺失数据进行建模,而这些缺失数据总是被显式反馈的工作所忽略。

      为了使用隐式反馈为 item 推荐定制tailor 潜在因子模型,早期工作应用了两种均匀加权策略:将所有缺失数据视为负样本,或者从缺失数据中均匀采样负样本。最近,《Fast matrix factorization for online recommendation with implicit feedback》《Modeling user exposure in recommendation》 提出了专门的模型来对缺失数据进行加权。 《A generic coordinate descent framework for learning from implicit feedback》 为基于特征的分解模型开发了一种隐式坐标下降implicit coordinate descent: iCD 解决方案,实现了 state-of-the-artitem 推荐性能。

    • 基于神经网络的推荐:早期先驱工作 《Restricted boltzmann machines for collaborative filtering》 提出了一种两层受限玻尔兹曼机 Restricted Boltzmann Machine: RBM 来建模用户对 item 的显式评分。《Ordinal boltzmann machines for collaborative filtering》 扩展了该工作从而对评分的保序性质ordinal nature 进行建模。

      最近,自编码器已经成为构建推荐系统的流行选择。《Autorec: Autoencoders meet collaborative filtering》 提出了基于用户的 AutoRec,其思想是学习隐藏的结构 hidden structure,这些结构可以根据用户的历史评分作为输入从而重构用户的评分。在用户个性化方面,该方法与 item-item 模型(将用户表示为他/她的历史评分 item )具有相似的精神。

      为了避免自编码器学习恒等函数 identity function 从而无法泛化到未见unseen 的数据,降噪自编码器 denoising autoencoder: DAE 应用于从故意损坏的输入中学习。

      最近 《A neural autoregressive approach to collaborative fi ltering》 提出了一种用于 CF 的神经自回归方法。

      虽然这些工作为神经网络解决 CF 的有效性提供了支持,但是其中大多数都专注于显式评分,并仅对观察到的数据进行建模。结果,对于从只有正样本的隐式数据中学习的任务,它们很容易失败。

    • 神经网络用于隐式反馈的推荐:最近的一些工作探索了基于隐式反馈的深度学习模型来进行推荐,但是他们主要使用 DNN 对辅助信息进行建模,例如item 的文本描述、音乐的声学特征、用户的跨域行为、以及知识库中的丰富信息。然后,将 DNN 学到的特征与用于协同过滤的 MF 集成。

      与我们的工作最相关的工作是 《Collaborative denoising auto-encoders for top-n recommender systems》 ,它为 CF 提供了一个带有隐式反馈的协同降噪自编码器 collaborative denoising autoencoder: CDAE。 和 DAE-based CF 相比,CDAE 额外地将一个用户节点插入到自编码器的输入中从而重建用户的评分。如作者所示,当应用恒等映射作为 CDAE 的隐层激活函数时,CDAE 等效于 SVD++ 模型。这意味着虽然 CDAE 是一种用于 CF 的神经网络建模方法,但是它仍然应用线性核linear kernel (即内积)来对 user-item 交互进行建模。这可以部分解释为什么 CDAE 使用更深的层不会提高性能。

      CDAE 不同,我们的 NCF 采用双路架构,使用多层前馈神经网络对 user-item 交互进行建模。这允许 NCF 从数据中学习任意函数,比固定的内积函数更强大、更具表达能力。

    • 其它工作:沿着类似的路线,在知识图谱文献中已经深入研究了学习两个实体之间的关系。已有很多关系型机器学习relational machine learning method 方法被提出。与我们的方法最相似的一个是神经张量网络 Neural Tensor Network: NTN ,它使用神经网络来学习两个实体的交互并展示层强大的性能。在这里,我们关注协同过滤的不同 problem setting 。虽然将 MFMLP 相结合的 NeuMF 的思想部分受到 NTN 的启发,但是在允许 MFMLP 学习不同的 embedding 集合方面,我们的 NeuMFNTN 更灵活、更通用。

      最近,谷歌公布了他们用于 App 推荐的 Wide & Deep 方法。Deep 组件同样在特征 embedding 之上使用 MLP,据报道它具有很强的泛化能力。虽然他们的工作重点是结合用户和 item 的各种特征,但是我们的目标是探索纯协同过滤系统的 DNN 。我们表明,DNN 是对 user-item 交互建模的一个很有前景的选择。据我们所知,以前从未有工作对此进行研究过。

16.1 模型

16.1.1 基本概念

  1. 我们首先将问题形式化并讨论现有的带隐式反馈的协同过滤解决方案。然后我们简短地概括了广泛使用的 MF 模型,并强调其内积造成的局限性。

  2. 从隐式数据中学习Learning from Implicit Data :令 表示用户数量、 表示item 数量。定义从用户隐式反馈implicit feedback 得到的 user-item 交互矩阵 为:

    注意:

    • 表示用户 item 之间存在交互,然而这并不意味着用户 真的喜欢 item
    • 表示用户 item 之间不存在交互,这也并不意味着用户 真的不喜欢 item ,可能是因为用户 没注意到 item

    这给从隐式数据中学习带来了挑战,因为隐式数据仅提供了关于用户偏好users' preference 的带噪音的信号noisy signals 。虽然观察到的 item 至少反映了用户对item 的兴趣,但是未观察到的 item 可能只是缺失的数据missing data,并且天然natural 缺乏负反馈negative feedback

    带隐式反馈的推荐问题被表述为估计 中未观察到的 item 的得分score 的问题,其中这些score 用于对 item 进行排序。model-based 方法假设数据可以由底层模型生成(或描述)。形式上, 模型可以抽象为学习:

    其中:

    • 表示对交互 的预估分predicted score
    • 表示模型参数; 表示将模型参数映射到预估分的函数,我们称之为交互函数interaction function

    为了估计参数 ,现有方法通常遵循优化目标函数的机器学习范式。文献中最常用的目标函数有两种:point-wise losspair-wise loss

    • 作为显式反馈explicit feedback 大量工作的自然延伸,point-wise loss 通常定义为最小化 和目标值 之间的平方损失。为了处理negative data 的缺失,他们要么将所有未观察到的item 视为负样本、要么从未观察到的 item 中采样负样本。
    • pair-wise loss 的思想是:观察到的 item 应该比未观察到的 item 的排名更高。因此,它不是最小化 和目标值 之间的损失,而是pair-wise learning 最大化观察到的 item 和未观察到的 item 之间的边距 margin

    更进一步地,我们的 NCF 框架使用神经网络参数化交互函数 从而估计 。因此,NCF 自然支持 point-wise learningpair-wise learning

  3. 矩阵分解Matrix Factorization: MFMF 将每个用户、每个 item 都和潜在特征向量latent feature vector相关联。令 表示用户 的潜在特征向量, 表示用户 的潜在特征向量。MF 估计estimate 交互 的内积:

    其中 为潜在空间latent space 的维度。

    正如我们所看到的,MF 对用户潜在因子latent factoritem 潜在因子的双向交互two-way interaction 进行建模,假设潜在空间的每个维度彼此独立,并以相同的权重线性组合它们。因此,MF 可以视为潜在因子的线性模型。

    下图说明了内积函数如何限制 MF 的表达能力。为了更好地理解示例,有两个设置settings 需要事先说明。

    • 首先,因为 MF 将用户和 item 都映射到相同的潜在空间,所以两个用户之间的相似性也可以用内积来衡量(或者它们潜在向量之间的余弦相似度来衡量)。
    • 其次,不失一般性,我们使用 Jaccard 系数(用户A 观察到的item 集合与用户B 观察到的 item 集合之间的 Jaccard 系数)作为 MF 需要恢复的、两个用户之间的真实相似度ground-truth similarity

    我们首先关注图 (a) 中的前三行(用户)。很容易有 。因此, 在潜在空间中的几何关系可以如图 (b) 所示绘制。

    现在,让我们考虑一个新的用户 ,其输入如图 (a) 中的虚线所示。所以我们有 ,这意味着 最类似于 、其次是 、最后是 。但是,如果 MF 模型将 放置在最接近 的位置(图 (b) 中用虚线显示的两个选择),则会导致 更靠近 而不是更靠近 ,而这会导致更大的排序损失ranking loss

    这个例子显示了MF 使用简单的、且固定的内积来估计低维潜在空间中复杂的 user-item 交互的限制。在这个例子中,我们注意到解决该问题的一种方法是使用更大的潜在因子数量 (即更高维的潜在空间)。 然而,这种方法可能会对模型的泛化能力产生不利影响(如,过拟合),尤其是在数据稀疏的环境中。

  4. 在本文中,我们通过从数据中使用 DNN 学习交互函数来解决MF 的这个限制。

    • 我们首先介绍了通用的 NCF 框架,详细说明了如何学习 NCF 的概率模型,该模型强调了隐式数据的二元属性binary property
    • 然后我们证明了 MF 可以在 NCF 下表达和推广。
    • 为了探索用于协同过滤的 DNN,我们接着提出 NCF 的实例化,使用多层感知机multi-layer perceptron: MLP 来学习 user-item 交互函数。
    • 最后,我们提出了一个新的神经矩阵分解模型,它在 NCF 框架下集成了 MFMLP,从而统一了 MF 的线性和 MLP 的优势来建模 user-item 潜在结构latent structures

16.1.2 NCF 通用框架

  1. 为了允许全full 神经网络来处理协同过滤, 我们采用 multi-layer representation 来建模 user-item 交互 ,如下图所示。其中前一层的输出作为后一层的输入。

    • 底部输入层由两个特征向量 组成,分别表示用户 输入特征和item 输入特征。

      输入特征向量可以自定义customized 从而支持广泛的用户建模和 item 建模,例如上下文感知context-aware 建模、content-based 建模、neighbor-based 建模。由于这项工作聚焦于纯粹pure 的协同过滤设置setting,我们仅采用user iditem id 作为输入特征,并将其转换为稀疏的 one-hot 向量。

      基于输入的这种通用特征表示generic feature representation ,我们的方法可以通过使用内容特征来表示用户和 item,从而轻松地解决冷启动问题cold-start problem

    • 输入层之上是 embedding 层,它是一个全连接层,将稀疏表示sparse representation 投影到稠密向量dense vector 。得到的 user embeddingitem embedding )可以视为潜在因子模型背景下的用户潜在向量(item 潜在向量)。

    • 然后,用户 embeddingitem embedding 被馈入多层神经架构,我们称之为神经协同过滤层neural collaborative filtering layers ,从而将潜在向量映射为预估分。

      神经CF 层的每一层都可以自定义,从而发现 user-item 交互的某些潜在结构。最后一个隐层 X 的维度决定了模型的能力。

    • 最终的输出层是预估分 ,并通过最小化 和目标值 之间的 point-wise loss 来进行训练。

      我们注意到训练模型的另一种方法是执行 pair-wise learning,例如使用 Bayesian Personalized Rankingmargin-based loss 。由于本文的重点是神经网络建模部分,我们将扩展 NCFpair-wise learning 作为未来的工作。

  2. 我们形式化 NCF 预测模型为:

    其中:

    • 分别表示用户和item 的潜在因子矩阵latent factor matrix
    • 表示交互函数 的模型参数。

    由于交互函数 定义为一个多层神经网络,因此它可以被形式化为:

    其中 为输出层的映射函数, 为第 层神经协同过滤层的映射函数,并且一共有 层神经协同过滤层。

  3. 为了学习模型参数,现有的 point-wise 方法主要使用平方损失进行回归:

    其中:

    • 表示 中观测交互的集合。

    • 表示负样本的集合,它们是所有未观测交互,或者从未观测交互中采样而来。

    • 表示训练样本 的权重超参数。通常选择 ,即观察到交互的 user-item 权重高于未观察到交互的 user-item

      这里 表示未观察到交互的样本。

    虽然平方损失可以通过假设观测值observations 由高斯分布产生来解释,但是我们指出这可能与隐式数据不符。这是因为对于隐式数据,目标值 是二元的 1 或者 0,表示用户 是否和item 进行了交互。这里我们提出了一种用于学习 point-wise NCF 的概率方法,该方法特别关注隐式数据的二元属性binary property

    考虑到隐式反馈的one-class 特性,我们可以将 的值视为一个label1 表示item 和用户 相关,0 表示item 和用户 不相关。预估分 表示item 和用户 的相关程度。为了赋予 NCF 这样的概率解释,我们需要将输出 限制在 [0.0, 1.0] 之间。这可以通过使用概率函数(例如 LogisticProbit 函数)作为输出层 的激活函数轻松实现。通过这种setting,我们将似然函数定义为:

    使用负的对数似然,我们得到:

    这是 NCF 方法需要最小化的目标函数,其优化可以通过执行随机梯度下降stochastic gradient descent: SGD 来完成。细心的读者可能已经意识到它与二元交叉熵损失binary cross-entropy loss (也称作对数损失log loss )相同。

    通过对NCF 进行概率处理,我们将带有隐式反馈的推荐作为二元分类问题来解决。由于分类感知classification-awarelog loss 在推荐文献中很少被研究,我们在这项工作中对其进行了探索,并在实验中证明了其有效性。

    对于负样本集合 ,我们在每次迭代中从未观察的交互中均匀随机采样,并控制采样比例sampling ratio (这个比例是相对于观察到的交互数量)。虽然非均匀采样策略(例如,item popularity-biased )可能会进一步提高性能,但是我们将这个探索留作未来的工作。

16.1.3 广义矩阵分解 GMF

  1. 我们现在展示如何把 MF 解释为我们 NCF 框架的一个特例。由于 MF 是最流行的推荐模型,并在文献中进行了广泛的研究,因此能够复原 MF 使得 NCF 可以模拟一大族因子分解模型。

  2. 由于NCF 输入层的 user ID (或者 item ID)是 one-hot 编码,因此得到的 embedding 向量可以视为 user (或者 item)的隐向量。令用户 的潜在向量 item 的潜在向量 。我们将第一层神经协同过滤层的映射函数定义为:

    其中 为向量之间的逐元素乘积。

    然后我们将结果向量投影到输出层:

    其中 为激活函数, 为输出层的权重向量。

    直观地讲,如果我们选择 为恒等映射、并且令 为全1 的向量,那么我们就可以准确地复原 MF 模型。

  3. NCF 框架下,MF 可以很容易地推广和扩展。例如:

    • 如果我们允许 可以从数据中学习(而不是固定的常量),那么它将导致MF 的一个变体,这个变体允许MF 模型学习各潜在维度的不同重要性。

    • 如果我们对 使用非线性函数,那么它将导致 MF 的一个变体,这个变体是一个非线性模型,并且可能比线性 MF 模型更具有表达能力。

    • 在这项工作中,我们在 NCF 框架下实现了一个广义版本的 MF,它使用 sigmoid 函数作为 ,并且以对数损失为目标从数据中学习 。其中:

      我们称这个模型为广义矩阵分解 Generalized Matrix Factorization: GMF

16.1.4 多层感知机

  1. 由于 NCF 使用两路分别对用户和 item 进行建模,因此通过将这两路特征拼接起来从而组合它们的特征是很直观的。这种设计已经在多模态multimodal 深度学习工作中广泛采用。 然而,简单的向量拼接并没有考虑用户潜在特征和 item 潜在特征之间的任何交互,这不足以建模协同过滤效果。为了解决这个问题,我们提出在拼接向量上添加隐层,使用标准 MLP 来学习用户潜在特征和 item 潜在特征之间的交互。从这个意义上讲,我们可以赋予模型很大程度的灵活性和非线性从而学习 之间的交互,而不是像 GMF 那样只使用一个固定的逐元素乘积。

    具体而言,我们的 NCF 框架下的 MLP 模型定义为:

    其中 分别为第 层感知机的权重矩阵、偏置向量、激活函数。

  2. 对于 MLP 层的激活函数,可以自由选择 sigmoidtanhReLU 等。

    • sigmoid 函数将每个神经元限制在 (0.0,1.0) 之间,这可能会限制模型的性能。众所周知,sigmoid 受到饱和saturation 的影响:当神经元的输出接近 01 时,神经元就会停止学习。

    • 尽管 tanh 是更好的选择并且已经被广泛采用,但是它只能一定程度上缓解 sigmoid 的问题。因为tanh 可以视作 sigmoidrescale 版本:

    • 最终我们选择 ReLU,它在生物学上更合理,并且被证明是非饱和non-saturated 的。此外,它鼓励稀疏激活sparse activations (即大多数神经元是非激活的) ,非常适合稀疏数据并使得模型不太可能过拟合。我们的实验结果表明:ReLU 的性能略优于 tanh,而 tanh 又明显优于 sigmoid

  3. 对于网络结构的设计,最常见的解决方案是采用塔式模式tower pattern ,其中底层最宽、接下来每一层的神经元数量依次减少。基本假设是:对更高层使用更少的隐单元,使得更高层能够学习数据的更抽象的特征。

    我们根据经验实现了塔式结果,将每个连续层的神经元数量减半。

16.1.5 融合 GMF 和 MLP

  1. 到目前为止,我们已经开发了NCF 的两个实例:

    • GMF 应用一个linear kernel 来建模潜在特征交互。
    • MLP 使用一个non-linear kernel 来从数据中学习非线性交互。

    那么接下来的问题是:我们如何在 NCF 框架下融合 GMFMLP,以便它们可以相互加强从而更好地建模复杂的 user-item 交互?

    一个简单的解决方案是:让 GMFMLP 共享相同的 embedding 层,然后组合combine 它们交互函数的输出。这种方式与著名的神经张量网络 Neural Tensor Network: NTN 有着相似的精神。

    具体而言,将 GMFone-layer MLP 相结合的模型可以表述为:

    然而,共享 GMFMLPembedding 可能会限制模型的性能。这意味着 GMFMLP 使用相同大小的 embedding。对于两个子模型最佳 embedding 大小差异很大的数据集,该解决方案可能无法获得最佳的集成ensemble

    为了给融合模型fused model 提供更大的灵活性,我们允许 GMFMLP 学习单独的 embedding,并通过拼接它们最后一个隐层来组合这两个模型。下图给出了我们的方案,其公式如下:

    其中:

    • 分别表示 GMFMLP 部分的 user embedding
    • 分别表示 GMFMLP 部分的 item embedding
    • 如前所述,我们使用 ReLU 作为 MLP layer 的激活函数。

    该模型结合了 MF 的线性和 DNN 的非线性,从而对 user-item 潜在结构进行建模。我们将该模型称作神经矩阵分解 Neural Matrix Factorization: NeuMF

    模型相对于每个参数的导数可以用标准的反向传播来计算,由于空间限制这里省略了标准反向传播的描述。

    NeuMF 类似于 DeepFM,它们相同点在于:都使用线性部分来直接捕获特征交互;都使用非线性 DNN 来捕获非线性交互;都通过拼接两部分来同时捕获线性和非线性交互。

    区别在于:

    • NeuMF 的线性部分仅捕获 useritem 之间的二阶交互,而 DeepFM 捕获所有特征之间的二阶交互。但是这里 NeuMF 只有 user iditem id 特征,因此它们之间的二阶交互也意味着所有特征的二阶交互。
    • NeuMF 的两个组件独立使用 embedding,而 DeepFM 使用共享的 embedding

  2. 预训练:由于 NeuMF 目标函数的非凸性non-convexity ,基于梯度的优化方法只能找到局部最优解。据报道,初始化对深度学习模型的收敛和性能起着重要作用。由于 NeuMFGMFMLP 的集成ensemble,我们提出使用 GMFMLP 的预训练模型初始化 NeuMF

    • 我们首先使用随机初始化来训练 GMFMLP,直到收敛。

    • 然后我们使用 GMFMLP 模型的参数作为 NeuMF 相应参数部分的初始化。唯一的调整是在输出层,我们将两个模型的权重拼接起来作为初始化:

      其中:

      • 分别表示预训练的 GMF 模型和 MLP 模型的 向量。
      • 是决定两个预训练模型之间 tradeoff 的超参数。

    为了从头开始训练 GMFMLP ,我们采用 Adaptive Moment Estimation: Adam 优化器,它通过对频繁参数frequent parameters 执行较小的更新、对不频繁参数infrequent parameters执行较大的更新,从而调整每个参数的学习率。和普通 SGD 相比,Adam 方法为两种模型都产生了更快的收敛速度,并缓解了调整学习率的痛苦。

    在将预训练参数输入 NeuMF 之后,我们使用普通 SGD 而不是 Adam 进行优化。这是因为 Adam 需要保存动量信息momentum information 以正确更新参数。由于我们仅使用预训练模型的参数来初始化 NeuMF 并放弃保存动量信息,因此不适合使用基于动量的方法进一步优化 NeuMF

16.2 实验

  1. 我们进行实验以回答以下三个问题:

    • RQ1:我们提出的 NCF 方法是否优于 state-of-the-art 的隐式协同过滤方法?
    • RQ2:我们提出的优化框架(带负采样的 log loss)如何用于推荐任务?
    • RQ3:更深层的网络是否有助于从 user-item 交互数据中学习?

    接下来,我们首先介绍实验配置,然后回答上述三个问题。

  2. 数据集:我们在两个公共数据集上进行实验。

    • MovieLens:一个电影评分数据集,该数据集已经被广泛用于评估协同过滤算法。我们使用包含100 万个评分的版本,其中每个用户至少有 20 个评分。

      虽然它是一个显式反馈数据集,但是我们有意选择它来研究从显式反馈的隐式信号中学习的性能。为此,我们将其转换为隐式数据,其中每一项被标记为 01,表明用户是否对该 item 进行了评分。

    • Pinterest:一个基于内容的图像推荐数据集。原始数据非常大,但是非常稀疏。例如超过 20% 的用户只有一个 pin,这使得评估协同过滤算法变得困难。因此,我们以与 MovieLens 数据相同的方式过滤数据集,仅保留至少有 20 次交互的用户。结果我们得到一个包含 55,187 个用户、1,500,809 个互动的子集。每个互动都表示用户是否将图片钉到用户的 board 上。

    这些数据集的统计信息如下表所示。Sparsity 表示未观测到互动的 user-item pair 占比。

  3. 评估方式:为了评估item 推荐的性能,我们采用了广泛使用的 leave-one-out 评估。对于每个用户,我们将 hold-out 其最近的交互作为测试集,并使用剩余的数据进行训练。

    由于在评估过程中,每个用户对所有的 item 进行排序太耗时,因此我们遵循了常见的策略:随机抽取 100 个用户未交互的 item ,然后在 100item 中对测试 item 进行排序。

    ranked list 的性能由 Hit Ratio: HRNormalized Discounted Cumulative Gain: NDCG 来判断。在没有特别说明的情况下,我们将这两个指标的 ranked list 长度截断为 10。因此:

    • HR 直观地衡量测试 item 是否出现在列表的 top-10 中。
    • NDCG 通过为排名靠前的 hit 分配更高的分数来说明 hitposition

    我们为每个测试用户计算这两个指标并报告了平均得分。

  4. baseline 方法:我们将 NCF 方法(GMF/MLP/NeuMF)和以下方法进行比较:

    • ItemPop:根据互动数量来判断item 的流行度popularity 从而对 item 进行排序。这是一种对推荐性能进行基准测试benchmark 的非个性化方法。
    • ItemKNN:这是标准的基于item 的协同过滤方法。我们遵循 《Collaborative fi ltering for implicit feedback datasets》 的设置从而使其适应隐式数据。
    • BRP:该方法使用 pairwise ranking loss 来优化 MF 模型,使得模型适合从隐式反馈中学习。这是一个极具竞争力的item 推荐 baseline。我们使用固定的学习率并报告最佳性能。
    • eALS:这是 item 推荐的 state-of-the-art MF 方法。它优化了平方损失,将所有未观察到的交互视为负样本,并通过item 流行度对它们进行非均匀加权。由于 eALS 显示出优于均匀加权方法 WMF 的性能,因此我们不会进一步报告 WMF 的性能。

    由于我们提出的方法旨在对用户和 item 之间的关系进行建模,因此我们主要与 user-item 模型进行比较。我们省略了与 item-item 模型的比较,如 SLIM, CDAE,因为性能差异可能是由于使用个性化的用户模型引起的(因为 SLIM, CDAE 这些模型是 item-item 模型)。

  5. 实验配置:

    • 我们基于 Keras 实现了我们的方法。

    • 为了确定 NCF 方法的超参数,我们为每个用户随机抽取了一个交互作为验证集,并在其上调优了超参数。

      我们测试了 batch size[128, 256, 512, 1024]learning rate[0.0001, 0.0005, 0.001, 0.005]

    • 所有 NCF 模型都是通过优化 log loss 来学习的,其中我们为每个正样本采样了四个负样本。

    • 对于从头开始训练的 NCF 模型,我们使用高斯分布(均值为0、标准差为 0.01)来随机初始化模型参数,并使用 mini-batchAdam 优化器来优化模型。

    • 由于 NCF 的最后一个隐层决定了模型的能力(因为 NCF 的隐层维度采用逐层减半的策略),我们将其称为预测因子predictive factors ,并评估了维度为 [8, 16, 32, 64]

      值得注意的是,维度较高的预测因子可能会导致过拟合并降低性能。

    • 如果没有特别说明,那么我们为 MLP 使用三层的隐层。例如,如果预测因子维度为 8,那么神经 CF 层的架构为 32 -> 16 -> 8embedding size16

    • 对于预训练的 NeuMF ,从而允许预训练的 GMFMLPNeuMF 的初始化做出同等的贡献。

16.2.1 RQ1 性能比较

  1. 下图显示了 HR@10NDCG@10 在不同预测因子维度方面的性能。

    对于 MF 方法 BPReALS,预测因子的维度等于潜在因子的维度。对于 ItemKNN,我们测试了不同邻域大小并报告了最佳性能。由于 ItemPop 性能较弱,因此下图中省略了 ItemPop 从而更好地突出个性化方法的性能差异。

    • 首先,我们可以看到 NeuMF 在两个数据集上都实现了最佳性能,明显优于 state-of-the-arteALSBPR(平均而言,相对于 eALSBPR 的提升为 4.5%4.9%)。

      对于 Pinterest 数据集,NeuMF 使用 8 维预测因子也大大超越了64 维预测因子的 eALSBPR 。这表明 NeuMF 通过融合线性MF 和非线性 MLP 模型从而具有高的表达能力。

    • 其次,另外两种 NCF 方法(GMFMLP)也表现出相当强劲的性能。在它们之间,MLP 的表现略差于 GMF。注意,可以通过添加更多隐层来进一步提升 MLP 的性能(参考下面的实验),这里我们仅展示三层隐层的 MLP 性能。

      对于小的预测因子维度,GMF 在两个数据集上均优于 eALS。尽管 GMF 在大的预测因子为维度上过拟合,但是它的最佳性能优于eALS 或者与 eALS 相当。

      GMF 使用自动学习的加权权重,而 eALS 根据item 流行度来加权。

    • 最后,GMF 显示出对 BPR 的持续改进,表明分类感知classification-awarelog loss 对推荐任务的有效性。因为 GMFBPR 是学习相同的 MF 模型、但是具有不同的目标函数。

  2. 下图显示了 Top-K 推荐列表的性能,其中排序位置 K 的范围从 1 ~ 10 。为了使图更加清晰,我们展示了 NeuMF 的性能,而不是所有三种 NCF 方法。可以看到:

    • 和其它方法相比,NeuMF 在不同位置上表现出一致的提升。我们进一步进行了one-sample pairedt 检验,验证所有提升对于 具有统计显著性。
    • 在所有的 baseline 方法中,eALSMovieLens 上的性能优于 BPR(相对提升约 5.1%),而在 Pinterest 方面的性能低于 BPR 。这与 《Fast matrix factorization for online recommendation with implicit feedback》 的发现一致,即 BPR 由于其 pairwise ranking-aware learner 而可以成为强大的排序器。
    • 基于邻域的 ItemKNN 表现不如基于模型的方法。
    • Item Pop 表现最差,说明有必要对用户的个性化偏好进行建模,而不是仅仅向用户推荐热门item

  3. 预训练的效用 utility :为了证明预训练对 NeuMF 的效用,我们比较了两个版本的 NeuMF 的性能--有预训练、没有预训练。对于没有预训练的 NeuMF,我们使用 Adam 通过随机初始化来学习。结果如下表所示。

    可以看到:

    • 经过预训练的 NeuMF 在大多数情况下取得了更好的性能,仅在预测因子维度为8MovieLens时预训练方法的性能稍差。
    • MovieLensPinterest 数据集上,使用预训练的 NeuMF 的相对提升分别为 2.2%1.1%。这一结果证明了我们预训练方法对初始化 NeuMF 的有效性。

16.2.2 RQ2 负采样的 Log Loss

  1. 为了处理隐式反馈的 one-class 性质,我们将推荐转换为二元分类任务。通过将 NCF 视为概率模型,我们使用 log loss 对其进行了优化。

    下图显示了在 MovieLensNCF 方法每次迭代的训练损失(所有训练样本的均值)和推荐性能,其中预测因子维度为 8Pinterest 上的结果也显示了相同的趋势,由于篇幅所限,这里没有给出 Pinterest 上的结果。

    • 首先,可以看到随着迭代次数的增加,NCF 模型的训练损失逐渐减少,推荐性能得到提升。

      最有效的更新发生在前 10 次迭代中,更多的迭代可能会使模型发生过拟合(例如,尽管 NeuMF 的训练损失在10 次迭代之后不断减少,但是推荐性能实际上会下降)。

    • 其次,在三种 NCF 方法中,NeuMF 的训练损失最低、其次是 MLP、最次是 GMF。推荐性能也呈现同样的趋势,即 NeuMF > MLP > GMF

    上述发现为优化 log loss 以从隐式数据中学习的合理性rationality 和有效性effectiveness 提供了经验证据。

  2. pointwise log loss 相对于 pairwise 目标函数的一个优势是负样本的灵活采样比例。虽然 pairwise 目标函数只能将一个采样的负样本和一个正样本配对,但是在 pointwise log loss 中我们可以灵活控制采样比例。

    为了说明负采样比例对 NCF 方法的影响,我们在下图中展示了 NCF 方法在不同负采样比例下的性能。其中预测因子维度为 16。注意:BPR 对于每个正样本采样一个负样本从而构成 pair 对,因此它的表现是一条直线。

    可以看到:

    • NCF 中,每个正样本仅一个负样本不足以实现最佳性能,采样更多的负样本是有利的。
    • GMFBPR 进行比较,我们可以看到:采样比例为 1GMF 的性能与 BPR 相当,而较大采样比例的 GMF 的性能明显优于 BPR 。这显示了 pointwise log loss 相对于 pairwise BPR loss 的优势。
    • 在这两个数据集上,最佳采样比例约为 3 ~ 6 。在 Pinterest 数据集上,我们发现采样比例大于 7 时,NCF 方法的性能开始下降。这表明:过于激进地设置采样比例可能会对性能产生不利影响。

16.2.3 RQ3 网络深度

  1. 由于用神经网络学习 user-item 交互函数的工作很少,所以很好奇使用深层的网络结构是否有利于推荐任务。为此,我们进一步研究了具有不同隐层数量的 MLP ,结果总结在下表中。MLP-3 表示具有三层隐层(除了embedding 层和输出层)的 MLP 方法,其它符号类似。可以看到:

    • 即使对于具有相同能力的模型,堆叠更多的层也有利于性能。这一结果非常令人振奋,表明使用深层模型进行协同推荐的有效性。

      我们将性能提升归因于堆叠更多非线性层带来的高度非线性。为了验证这一点,我们进一步尝试堆叠线性层,使用恒等映射作为激活函数,结果其性能比使用 ReLU 非线性激活函数差得多。

    • 对于没有隐层的 MLP-0(即 embedding 层直接投影到预测),性能非常弱,并不比非个性化的 Item-Pop 好。这验证了我们前面的论点:即简单地拼接用户潜在向量和 item 潜在向量,不足以对特征交互进行建模,因此需要用隐层来进行转换。

十七、NGCF[2019]

  1. 个性化推荐无处不在,已广泛应用于电商、广告、社交媒体等众多在线服务。个性化推荐的核心是根据购买和点击等历史交互historical interaction 来估计用户接受某个 item 的可能性。

    协同过滤collaborative filtering: CF 通过假设行为相似的用户对 item 表现出相似的偏好来解决这个问题。为了实现这个假设,一个常见的范式paradigm 是参数化parameterize 用户和 item 以重建历史交互,并根据参数parameter 来预估用户偏好。

    一般而言,可学习的 CF 模型有两个关键组件key component

    • embedding:将用户和 item 转换为向量化的 representation
    • 交互建模:基于 embedding 重建历史交互。

    例如:

    • 矩阵分解 matrix factorization: MF 直接将 user id / item id 映射到 embedding 向量,并使用内积对 user-item 交互进行建模。
    • 协同深度学习collaborative deep learning 通过整合从 item 的丰富的辅助信息side information 中学到的 deep representation来扩展 MF embedding function
    • 神经协同过滤模型neural collaborative filtering model 用非线性神经网络代替 MF的内积交互函数。
    • translation-based CF model 使用欧氏距离作为交互函数。

    尽管这些方法很有效,但是我们认为它们不足以为 CF 产生令人满意的 embedding。关键原因是embedding 函数缺乏关键协同信号collaborative signal 的显式编码,这种编码隐藏在user-item 交互中从而揭示用户(或 item)之间的行为相似性。更具体而言,大多数现有方法仅使用描述性特征(例如 ID 和属性)来构建 embedding 函数,而没有考虑 user-item 交互。因此,由此产生的 embedding 可能不足以捕获协同过滤效果effectuser-item 交互仅用于定义模型训练的目标函数。因此,当 embedding 不足以捕获 CF 时,这些方法必须依靠交互函数来弥补次优 suboptimalembedding 的不足。

    虽然将 user-item 交互集成到 embedding 函数中在直观上很有用,但是要做好并非易事。特别是在实际应用中,user-item交互的规模很容易达到数百万甚至更大,这使得提取所需要的的协同信号变得困难。在论文 《Neural Graph Collaborative Filtering》 中,作者通过利用来自 user-item 交互的高阶连通性high-order connectivity来应对这一挑战,这是一种在交互图结构interaction graph structure 中编码协同信号的自然方式。

    下图说明了高阶连通性的概念。待推荐的用户是 ,在user-item 交互图的左子图中用双圆圈来标记。右子图显示了从 扩展的树结构。高阶连通性表示从任何节点到达 的、路径长度 的路径。这种高阶连通性通常包含丰富的语义,而这些语义携带了协同信号。例如:

    • 路径 表示 之间的行为相似度,因为这两个用户都和item 进行了交互。
    • 更长的路径 表明 很可能接受 ,因为 相似的用户 之前已经消费过item
    • 此外,从 的整体视角来看,item item 更可能引起 的兴趣,因为有两条路径连接 ,而只有一条路径连接

    论文提出对 embedding 函数中的高阶连通性信息进行建模。论文没有将交互图扩展为实现起来很复杂的树,而是设计了一种神经网络方法在图上递归地传播 embedding 。这是受到图神经网络最近发展的启发,可以将其视为在 embedding 空间中构建信息流information flow 。具体而言,作者设计了一个 embedding propagation layer ,它通过聚合交互的item (或者user)的 embedding 来改进refine 用户(或者 item)的 embedding 。通过堆叠多个 embedding propagation layer ,模型可以显式强制 embedding 来捕获高阶连通性中的协同信号。以上图为例,堆叠两层可以捕获 的行为相似性,堆叠三层可以捕获 的潜在推荐。信息流的强度(层之间的可训练权重来估计的)决定了 的推荐优先级。

    论文在三个公共benchmark 上进行了广泛的实验,验证了神经图协同过滤 Neural Graph Collaborative Filtering: NGCF 方法的合理性和有效性。

    最后值得一提的是,尽管在最近的一种名叫 HOP-Rec 的方法中已经考虑了高阶连通性信息,但是它仅用于丰富训练数据。具体而言,HOPRec 的预测模型仍然是 MF,而且它是通过优化用高阶连通性增强的损失函数来训练的。和 HOP-Rec 不同,NGCF 贡献了一种新技术将高阶连通性集成到预测模型中,从经验上讲,它比 HOP-Rec 更好地嵌入 CF

    总而言之,论文的主要贡献:

    • 论文强调在基于模型的 CF 方法的 embedding 函数中利用协同信号的重要性。
    • 论文提出了 NGCF,这是一种基于图神经网络的新推荐框架,它通过执行 embedding 传播,以高阶连通性的形式对协同信号进行显式编码。
    • 论文对三个百万规模的数据集进行实证研究。大量结果证明了 NGCFstate-of-the-art 性能,以及通过神经embedding 传播来提高 embedding 质量方面的有效性。
  2. 论文回顾了现有的 model-based CFgraph-based CF、基于图神经网络的方法的现有工作,这些方法和本文的工作最为相关。这里,论文强调这些方法和 NGCF 的不同之处。

    • Model-Based CF 方法:现代推荐系统通过向量化表示vectorized representation 来参数化 parameterize 用户和 item ,并基于模型参数重建 user-item 交互数据。例如,MF 将每个 user IDitem ID 投影为 embedding 向量,并在它们之间进行内积以预测交互。为了增强 embedding 函数,已经付出了很多努力来融合诸如 item content、社交关系、item 关系、用户评论、外部知识图谱等辅助信息side information

      虽然内积可以迫使观察到的、交互的 user embeddingitem embedding 彼此接近,但是其线性不足以揭示用户和 item 之间复杂的非线性关系。为此,最近的努力侧重于利用深度学习技术来增强交互函数,从而捕获用户和 item 之间的非线性特征交互。例如,神经协同模型(如 NeuMF)采用非线性神经网络作为交互函数。同时,基于翻译的 CF 模型,例如 LRML 用欧氏距离来建模交互强度 interaction strength

      尽管取得了巨大的成功,但我们认为 embedding 函数的设计不足以为协同过滤产生最佳的 embedding ,因为协同过滤信号只能被隐式 implicitly 地捕获。总结这些方法,embedding 函数将描述性特征descriptive feature(如 ID 特征和属性特征)转换为向量,而交互函数作为向量上的相似性度量。理想情况下,当 user-item 交互被完美重建时,行为相似性的传递特性transitivity property 可以被捕获。然而,前面示例(高阶连通性概念的示例)中显示的这种传递效应transitivity effect 并没有被显式地编码,因此无法保证间接连接的用户和 itemembedding 空间中也是接近的。如果没有对协同信号进行显式编码,就很难获得满足所有特性的 embedding

      即,传统的方法仅优化了 user-item 的一阶邻近性,并没有优化高阶邻近性。另外这种邻近性并不是在模型结构中显式编码的,而是通过目标函数来优化的。

    • Graph-Based CF 方法:另一个研究方向利用 user-item interaction graph 来推断用户偏好。

      早期的努力,如 ItemRankBiRank 采用标签传播的思想来捕获协同效应CF effect 。为了给一个用户在所有item 上打分,这些方法将用户历史交互的item打上label ,然后在图上传播标签。由于推荐分是基于历史互动item 和目标 item 之间的结构可达性structural reachness(可以视为一种相似性)而获得的,因此这些方法本质上属于基于邻域neighbor-based 的方法。然而,这些方法在概念上不如基于模型的协同过滤方法,因为它们缺乏模型参数来优化推荐目标函数(既没有模型参数、又没有目标函数、更没有优化过程)。

      最近提出的 HOP-Rec 方法通过将基于图的方法和基于 embedding 的方法相结合来缓解这个问题(缺乏模型参数来优化推荐目标函数的问题)。该方法首先执行随机游走以丰富用户和 multi-hop 连接的 item 之间的交互。然后它基于丰富的user-item 交互数据(通过高阶连通性增强的正样本)训练具有 BPR 目标函数的 MF 从而构建推荐模型。HOP-Rec 优于 MF 的性能证明,结合连通性信息有利于在捕获CF 效应时获得更好的 embedding 。然而,我们认为 HOP-Rec 没有充分探索高阶连通性,它仅仅用于丰富训练数据,而不是直接有助于模型的 embedding 函数(因为推断时不会用到正样本增强技术,而是用到 embedding 函数)。此外,HOP-Rec 的性能在很大程度上取决于随机游走,这需要仔细地调优,例如设置合适的衰减因子。

    • 图卷积网络Graph Convolutional Network:通过在 user-item 交互图上设计专门的图卷积运算,我们使 NGCF 有效地利用高阶连通性中的 CF 信号。这里我们讨论现有的、也采用图卷积运算的方法。

      • GC-MCuser-item 交互图上应用了图卷积网络graph convolution network: GCN,但是它仅使用一个卷积层来利用 user-item 之间的直接连接。因此,它无法揭示高阶连通性中的协同信号。
      • PinSage 是一个工业解决方案,它在 item-item 图中采用了多个图卷积层从而进行 Pinterest 图像推荐。因此,CF 效应是在 item 关系的层面上捕获的,而不是在集体collective 的用户行为的层面上。
      • Spectral CF 提出了一种谱卷积操作来发现谱域中用户和 item 之间的所有可能的连接。通过图邻接矩阵的特征分解,可以发现 user-item pair 对之间的连接。然而,特征分解导致了很高的计算复杂度,非常耗时并且难以支持大规模的推荐场景。

17.1 模型

  1. NGCF 模型的架构如下图所示(给出了用户 item 之间的affinity score ),其中包含三个组件components

    • 一个 embedding 层:提供 user embeddingitem embedding
    • 多个 embedding 传播层:通过注入高阶连通性关系来refine embedding
    • 一个prediction 层: 聚合来自不同传播层的 refined embedding 并输出 user-item 的相似性得分 affinity score

17.1.1 Embedding Layer

  1. 遵循主流推荐模型,我们用 embedding 向量 来描述用户 ,用embedding 向量 来描述 item ,其中 embedding 维度。这可以看做是将参数矩阵 parameter matrix 构建为 embedding look-up table

    其中 为用户数量,item 数量。

    值得注意的是,这个 embedding table 作为 user embeddingitem embedding 的初始状态(refine 之前的状态),并以端到端的方式进行优化。

  2. 在传统的推荐模型如 MF 和神经协同过滤中,这些 ID embedding 直接输入一个交互层interaction layer 来实现分数预估。

    相比之下,在我们的 NGCF 框架中,我们通过在 user-item 交互图上传播 embeddingrefine embedding。这导致了对推荐更有效的 embedding ,因为 embeddingrefinement 步骤显式地将协同信号注入到 embedding 中。

17.1.2 Embedding Propagation

  1. 接下来我们基于 GNN 的消息传递框架,沿着图结构捕获协同信号并优化 user embeddingitem embedding。我们首先说明单层embedding 传播层Embedding Propagation Layer 的设计,然后将其推广到多个连续传播层。

  2. 一阶传播 First-order Propagation:直观地,交互的item 提供了关于用户偏好的直接证据。类似地,消耗一个item 的用户可以被视为item 的特征,并用于度量两个item 的协同相似性collaborative similarity 。我们在此基础上在连接connected 的用户和 item 之间执行 embedding 传播,用两个主要操作来形式化formulating 流程:消息构建message construction 和消息聚合message aggregation

    • 消息构建:对一个连接的 user-item pair,我们定义从 的消息为:

      其中:

      • message embedding
      • message encoding 函数,函数的输入为 item embedding user embedding 、系数
      • 系数 控制了edge 上传播的衰减系数 decay factor

      在本文中,我们定义 为:

      其中:

      • 为可训练的权重参数从而为传播提取有用的信息, 为变换后的维度。
      • 为逐元素乘积。
    • 为用户 的邻域大小(即直接连接的 item 数量),item 的邻域大小(即直接连接的用户数量)。

    与仅考虑 贡献的传统图卷积网络graph convolution network 不同,这里我们额外将 之间的交互通过 编码到被传递的消息中。这使得消息依赖于 之间的相似度 affinity ,例如从相似的item 传递更多消息。这不仅提高了模型的表示能力representation ability ,还提高了推荐性能。

    遵循图卷积网络,我们将 设置为图拉普拉斯范数 graph Laplacian norm ,其中 为用户 的一阶邻居集合、item 的一阶邻居集合。

    • representation learning 的角度来看, 反映了历史互动 item 对用户偏好的贡献程度。

    • 从消息传递的角度来看,考虑到被传播的消息应该随着路径长度path length 衰减, 可以解释为折扣系数 discount factor

    • 消息聚合:在这一阶段,我们聚合从用户 的邻居传播的消息来 refine 用户 representation 。具体而言,我们定义聚合函数为:

      其中:

      • 表示在第一个 embedding 传播层之后获得的用户 representation

      • LeakyReLU 激活函数允许消息对正positive 信号和小负 negative 信号进行编码。

      • 除了从邻域 传播的消息之外,我们还考虑了 的自连接 self-connection

        这个自连接保留了 的原始特征信息。

        注意:这里的 定义中的共享。即对于 我们都用 来映射、对于交叉特征 我们用 来映射。也可以使用独立的映射矩阵来分别映射

    类似地,我们可以通过与item 连接的用户传播的消息来获得 item representation

    总而言之,embedding 传播层的优势在于显式利用一阶连通性信息来关联user representationitem representation

    在广告和推荐场景中,item 的直接邻域(和 item 有互动的用户集合)可能高达百万甚至千万级别,而用户 的直接邻域(用户 互动的历史 item 集合)通常都比较小。如何处理这种非对称的、庞大的邻域是一个难点。

  3. 高阶传播 High-order Propagation:基于一阶连通性first-order connectivity 建模来增强representation ,我们可以堆叠更多 embedding 传播层来探索高阶连通性high-order connectivity 信息。这种高阶连通性对于编码协同信号以估计用户和 item 之间的相关性分数relevance score 至关重要。通过堆叠 embedding 传播层,用户(或者 item)能够接收来自 L-hop 邻居传播的消息。

    在第 步中(),用户 representation 被递归地表示为:

    其中被传播的消息定义为:

    其中:

    • 为可训练的参数矩阵, 为变换后的维度。

      注意:这里对于 我们都用 来映射、对于交叉特征 我们用 来映射。也可以使用独立的映射矩阵来分别映射

    • 为前一层的 item representation,它记住了 (l-1) - hop 邻域的消息。

    • 为前一层的 user representation,它也也记住了 (l-1) - hop 邻域的消息。

    类似地,我们也可以得到item 在第 层的 representation

    如下图所示为针对用户 的三阶embedding 传播,像 这样的协同信号可以在 embedding 传播过程中捕获。即,来自 的消息被显式编码在 中(由红线标识)。因此,堆叠多个 embedding 传播层无缝地将协同信号注入到 representation learning 过程。

  4. 矩阵形式的传播规则Propagation Rule in Matrix Form :为了提供embedding 传播的整体视图holistic view,并便于batch 实现,我们提供了 layer-wise 传播规则的矩阵形式:

    其中:

    • 为第 embedding 传播层得到的用户 representationitem representation 为初始的representation ,即

    • 为单位矩阵,user-item graph 的拉普拉斯矩阵:

      其中 user-item 交互矩阵, 为全零矩阵; 为邻接矩阵, 为对角的 degree matrix)。

      因此 的非对角线元素为:

      它就是

    通过实现矩阵形式的传播规则,我们可以用一种相当有效的方式同时更新所有用户和所有 itemrepresentation。这种方式允许我们抛弃节点采样过程(这个节点采样过程通常用于图卷积网络,使得图卷积网络可以应用于大规模的graph)。

    对于工业场景海量用户(如十亿级)和海量 item (如亿级),那么矩阵形式是不可行的,因为现有的计算资源无法处理如此规模的矩阵。

17.1.3 Model Prediction

  1. 经过 层传播,我们得到了用户 的多个 representation ,即 。由于在不同层中获得的 representation 强调通过不同连通性传递的消息,因此它们在反映用户偏好方面有不同的贡献。因此,我们将这些 representation 拼接起来,构成用户 的最终 representation

    对于item ,我们也进行同样的操作,即将不同层学到的 item representaiton 拼接起来得到item 的最终 representation 。最终我们得到 user representationitem representation 为:

    其中 || 表示向量拼接。

    通过这种方式,我们不仅用 embedding 传播层丰富了initial embeddings (即 embedding 层得到的初始 embedding ),还允许通过调整 来控制传播范围。

    注意,除了拼接之外,还可以应用其它聚合方式,如加权平均、最大池化、LSTM 等,这意味着在组合不同阶次的连通性时有不同的假设。使用拼接聚合的优势在于它的简单性,因为它不需要学习额外的参数,并且它已经在最近的图神经网络中证明非常有效。

  2. 最后,我们使用内积来估计用户 对目标 item 的偏好:

    在这项工作中,我们强调embedding 函数的学习,因此仅使用内积这种简单的交互函数。其它更复杂的选择,如基于神经网络的交互函数,留待未来的研究工作。

17.1.4 Optimization

  1. 为了学习模型参数,我们优化了在推荐系统中广泛应用的 pairwise BPR loss 。该损失函数考虑了观察到的和未观察到的 user-item 交互之间的相对顺序。

    具体而言,BPR 假设观察到的 user-item 交互更能够反映用户的偏好,因此应该比未观察到的交互分配更高的预测值。因此目标函数为:

    其中:

    • 表示 pairwise 训练数据。 为观察到的交互的集合, 为未观察到的交互的集合。
    • sigmoid 函数。
    • 为所有的训练参数集合,L2 正则化系数。

    我们使用 mini-batchAdam 优化算法来优化预估模型。具体而言,对于一个 batch 的随机采样的三元组 ,我们在 L 步传播之后建立它们的 representation ,然后利用损失函数的梯度来更新模型参数。

  2. 模型大小Model Size:值得指出的是,尽管 NGCF 在每个传播层 获得了一个 embedding 矩阵 ,但是它只引入了很少的参数:两个规模为 的权重矩阵。具体而言,这些 embedding 矩阵来自于 embedding look-up table ,并基于 user-item 图结构和权重矩阵转换而来。

    因此,和最简单的、基于 embedding 的推荐模型 MF 相比,我们的 NGCF 只是多了 个参数。考虑到 通常是小于 5 的数,并且 通常设置为 embedding size(远小于用户数量和 item 数量),因此这个额外的参数规模几乎可以忽略不计。

    例如,在我们实验的 Gowalla 数据集(20k 用户和 40k item )上,当 embedding size = 64并且我们使用3 个尺寸为 64 x 64 的传播层时,MF450 万参数,而我们的 NGCF 仅使用了 2.4 万额外的参数。

    总之,NGCF 使用很少的额外参数来实现高阶连通性建模。

  3. Message and Node Dropout:虽然深度学习模型具有很强的表示能力,但通常会出现过拟合现象。Dropout 是防止神经网络过拟合的有效解决方案。遵从图卷积网络的前期工作,我们提出在 NGCF 中采用两种 dropout 技术:message dropoutnode dropout

    • message dropout:随机丢弃传出的消息outgoing message。具体而言,我们以概率 丢弃 。因此在第 个传播层中,只有部分消息可用于 refine representation
    • node dropout:随机阻塞一个节点并丢弃该节点传出的所有消息。对于第 个传播层,我们随机丢弃 个节点,其中 dropout ratio

    注意,dropout 仅用于训练并且必须在测试期间禁用。

    message dropout 使得 representaion 对于 user-item 之间单个连接具有更强的鲁棒性,而node dropout 则侧重于减少特定用户或特定 item 的影响。我们在实验中研究 message dropoutnode dropout 对于 NGCF 的影响。

17.1.5 讨论

  1. 这里我们首先展示 NGCF 如何推广 SVD++,然后我们分析 NGCF 的时间复杂度。

  2. NGCFSVD++SVD++ 可以看做是没有高阶传播层的 NGCF 的特例。

    具体而言,我们将 设置为 1。在传播层中,我们禁用了转换矩阵和非线性激活函数。然后, 分别被视为用户 item 的最终 representation 。我们把这个简化模型称作 NGCF-SVD,它可以表述为:

    显然,通过分别设置 以及 ,我们可以准确地恢复 SVD++ 模型。

    此外,另一个广泛使用的 item-based CF 模型 FISM 也可以被视为 NGCF 的特例,其中上式中

  3. 时间复杂度:我们可以看到,逐层layer-wise 传播规则是主要的操作。

    • 对于第 个传播层,矩阵乘法的计算复杂度为 ,其中 为拉普拉斯矩阵中的非零项数量, 为当前层的维度, 为前一层的维度。
    • 对于预测层只涉及内积,它的时间复杂度为

    因此,NGCF 的整体复杂度为 。根据经验,在相同的实验设置下,MFNGCFGowalla 数据集上的训练成本分别为 20 秒左右和 80 秒左右,在推断期间MFNGCF 的时间成本分别为 80 秒和 260 秒。

17.2 实验

  1. 我们在真实世界的三个数据集上进行实验,从而评估我们提出的方法,尤其是 embedding 传播层。我们旨在回答以下研究问题:

    • RQ1:和 state-of-the-artCF 方法相比,NGCF 的表现如何?
    • RQ2:不同的超参数setting (如,层的深度、embedding 传播层、layer-aggregation 机制、message dropoutnode dropout )如何影响 NGCF
    • RQ3:如何从高阶连通性中受益?
  2. 数据集:我们选择三个 benchmark 数据集GowallaYelp2018Amazon-book。这些数据集可公开访问,并且在领域、规模、稀疏性等方面各不相同。

    • Gowalla 数据集:这是从 Gowalla 获得的 check-in 数据集,用户通过 checking-in 来共享他们的位置location 。为了确保数据集的质量,我们使用 10-core setting,即保留至少有十次交互的用户和 item
    • Yelp2018:来自2018 年的 Yelp 挑战赛的数据集,其中餐馆、酒吧等当地企业被视为 item 。为了确保数据质量,我们也使用 10-core setting
    • Amazon-bookAmazon-review 是一个广泛使用的产品推荐数据集,这里我们从中选择了 Amazon-book 。同样地,我们使用 10-core setting 来确保每个用户和每个 item 至少有十次交互。

    对于每个数据集,我们随机选择每个用户 80% 的历史交互构成训练集,其余的 20% 历史交互作为测试集。在训练集中,我们随机选择 10% 的交互作为验证集来调整超参数。

    对于每个观察到的 user-item 交互,我们将其视为一个正样本,然后进行负采样策略:将用户和历史没有互动的负item 构建 pair 对。

    这些数据集的统计信息如下表所示。

  3. 评估指标:对于测试集中的每个用户,我们将用户未交互的所有 item 视为负item。然后每个方法输出用户对所有 item (除了训练集中的正item )的偏好分。为了评估 top-K 推荐和偏好排序preference ranking,我们采用了两种广泛使用的评估指标:recall@Kndcg@K ,默认情况下 K=20 。我们报告测试集中所有用户的平均指标。

  4. baseline 方法:为了证明有效性,我们将 NGCF 方法和以下方法进行比较:

    • MF:这是通过贝叶斯个性化排名Bayesian personalized ranking: BPR 损失函数优化的矩阵分解方法,它仅利用 user-item 直接交互作为交互函数的目标值target value
    • NeuMF:这是state-of-the-art 的神经网络协同过滤模型。该方法拼接 user embeddingitem embedding ,然后使用多个隐层从而捕获用户和 item 的非线性特征交互。具体而言,我们采用两层的普通架构,其中每个隐层的维度保持不变。
    • CMN:这是state-of-the-artmemory-based 模型,其中user representation 通过memory layer 有意地组合相邻用户的 memory slot 。注意,一阶连接用于查找和相同item 交互的相似用户。
    • HOP-Rec:这是一个state-of-the-artgraph-based 模型。该方法利用从随机游走得到的高阶邻居来丰富 user-item 交互数据。
    • PinSage:该方法在 item-item graph 上应用 GraphSAGE。在这里,我们将该方法应用于 user-item 交互图。具体而言,我们采用了两层图卷积层,并且隐层维度设为 embedding size
    • GC-MC:该模型采用 GCN encoder 来生成 user representationsitem representation ,其中仅考虑一阶邻居。具体而言,我们使用一层图卷积层,并且隐层维度设为 embedding size

    我们也尝试了 Spectral CF,但是发现特征分解导致很高的时间成本和资源成本,尤其是当用户数量和 item 数量很大时。因此,尽管该方法在小数据集上取得了不错的性能,但是我们没有选择和它进行比较。

    为了公平地比较,所有方法都优化了 BPR loss

  5. 参数配置:我们在 Tensorflow 中实现了我们的 NGCF 模型。

    • 所有模型的 embedding size 固定为 64

    • 对于 HOP-Rec,我们选择随机游走 step 的调优集合为 {1,2,3},学习率的调优集合为 {0.025, 0.020, 0.015, 0.010}

    • 我们使用 Adam 优化器优化除了 HOP-Rec 之外的所有模型,其中 batch size 固定为 1024

    • 在超参数方面,我们对超参数应用网格搜索:学习率搜索范围 {0.0001, 0.0005, 0.001, 0.005}L2 正则化系数搜索范围 dropout ratio 搜索范围 {0.0, 0.1, ... , 0.8}

      此外,我们对 GC-MCNGCF 应用node dropout 技术,其中 dropout ratio 搜索范围为 {0.0, 0.1, ... , 0.8}

    • 我们使用 Xavier 初始化器来初始化模型参数。

    • 我们执行早停策略:如果在连续 50epoch 中,验证集的 recall@20 指标没有提升,则提前停止训练。

    • 为了建模三阶连通性,我们将 NGCF L 的深度设置为 3 。在没有特殊说明的情况下,我们给出了三层embedding 传播层的结果,node dropout ratio = 0.0message dropout ratio = 0.1

17.2.1 RQ1 性能比较

  1. 我们从比较所有方法的性能开始,然后探索高阶连通性建模如何提升稀疏环境下的性能。

  2. 下表报告了所有方法性能比较的结果。可以看到:

    • MF 在三个数据集上的表现不佳。这表明内积不足以捕获用户和 item 之间的复杂关系,从而限制了模型性能。

    • NeuMF 在所有情况下始终优于 MF,证明了user embeddingitem embedding 之间非线性特征交互的重要性。

      然而,MFNeuMF 都没有显式地对 embedding 学习过程中的连通性进行建模,这很容易导致次优suboptimalrepresentation

    • MFNeuMF 相比,GC-MC 的性能验证了融合一阶邻居可以改善 representation learning

      然而,在 Gowalla 中, GC-MCndcg@20 指标行不如 NeuMF。原因可能是 GC-MC 未能充分探索用户和 item 之间的非线性特征交互。

    • 大多数情况下,CMN 通常比 GC-MC 得到更好的性能。这种改进可能归因于神经注意力机制neural attention mechanism ,它可以指定每个相邻用户的注意力权重,而不是 GC-MC 中使用的相同权重、或者启发式权重。

    • PinSageGowallaAmazon-Book 中的表现略逊于 CMN,但是在 Yelp2018 中的表现要好得多。同时 HOP-Rec 在大多数情况下总体上取得了显著的提升。

      这是讲得通的,因为 PinSageembedding 函数中引入了高阶连通性, HOP-Rec 利用高阶邻居来丰富训练数据,而 CMN 只考虑相似的用户。因此,这表明了对高阶连通性或高阶邻居建模的积极影响。

    • NGCF 始终在所有数据集上产生最佳性能。具体而言,NGCFGowalla、Yelp2018、Amazon-Book 数据集中在 recall@20 方面比最强baseline 分别提高了 11.68%、11.97%、9.61%

      • 通过堆叠多个 embedding 传播层,NGCF 能够显式探索高阶连通性,而 CMNGC-MC 仅利用一阶邻居来指导 representation learning 。这验证了在 embedding 函数中捕获协同信号的重要性。

      • 此外,和 PinSage 相比,NGCF 考虑多粒度表示multi-grained representation 来推断用户偏好,而 PinSage 仅使用最后一层的输出。这表明不同的传播层在 representation 中编码不同的信息。

      • 并且,对 HOP-Rec 的改进表明 embedding 函数中的显式编码 CF 可以获得更好的representation

        HOP-Rec 效果也不错,而且计算复杂度不高、简单易于实现。

    我们进行 one-samplet-testp-value < 0.05 表明 NGCF 对最强baseline(下划线标明)的改进在统计上是显著的。

  3. 稀疏性问题通常限制了推荐系统的表达能力,因为不活跃用户的少量交互不足以生成高质量的 representation 。我们考察利用连通性信息connectivity information 是否有助于缓解稀疏性问题。为此,我们对不同稀疏性水平的用户组user group 进行了实验。

    具体而言,基于每个用户的交互次数,我们将测试集分为四组,每组的用户具有相同的交互次数。以 Gowalla 数据集为例,每个用户的交互次数分别小于 24、50、117、1014

    下图展示了 Gowalla、Yelp 2018、Amazon-Book 数据集的不同用户组中关于 ndcg@20 的结果。背景的直方图表示每个分组中的用户量,曲线表示 ndcg@20 指标。我们在 recall@20 方面看到了类似的性能趋势,但是由于空间限制而省略了该部分。

    可以看到:

    • NGCFHOP-Rec 始终优于所有用户组的所有其它 baseline 。这表明利用高阶连通性可以极大地促进非活跃用户的 representation learning,因为可以有效地捕获协同信号。因此,解决推荐系统中的稀疏性问题可能是有希望的,我们将其留待未来的工作中。
    • 联合分析图 (a),(b),(c) ,我们观察到前两组取得的提升(例如,在 Gowalla 数据集中NGCF对于 < 24< 50 的最佳 baseline 上分别提高了 8.49%7.79%)比其它组更为显著(例如,在 Gowalla 数据集中NGCF对于 < 1014 的最佳 baseline 提高了 1.29% )。这验证了 embedding 传播有利于相对不活跃的用户。

17.2.2 RQ2 NGCF 研究

  1. 由于 embedding 传播层在 NGCF 中起着举足轻重的作用,因此我们研究了它对于性能的影响。

    • 我们首先探索层数的影响,然后我们研究拉普拉斯矩阵(即用户 item 之间的折扣因子 ) 如何影响性能。
    • 此外,我们分析了关键因素的影响,例如 node dropoutmessage dropout
    • 最后,我们还研究了 NGCF 的训练过程。
  2. 层数的影响:为了研究 NGCF 是否可以从多个 embedding 传播层中受益,我们改变了模型深度。具体而言,我们探索了层数为 {1,2,3,4} 。下表给出了实验结果,其中 NGCF-3 表示具有三层 embedding 传播层的模型,其它符号类似。联合下表和上表(所有方法性能比较结果表)可以看到:

    • 增加 NGCF 的深度可以大大提升推荐效果。显然,NGCF-2NGCF-3 在所有方面都比 NGCF-1 实现了一致的提升,因为 NGCF-1 仅考虑了一阶邻居。

      我们将所有提升归因于 CF 效应的有效建模:协同用户相似性collaborative user similarity 和协同信号collaborative signal 分别由二阶连通性和三阶连通性承载carried

    • 当在 NGCF-3 之后进一步堆叠传播层时,我们发现 NGCF-4Yelp 2018 数据集上过拟合。这可能是因为太深的架构会给 representation learning 带来噪音。

      而其它两个数据集上的边际提升证明了三层传播层足以捕获 CF 信号。

    • 当传播层数变化时,NGCF 在三个数据集上始终优于其它方法。这再次验证了 NGCF 的有效性,从而表明显式建模高阶连通性可以极大地促进推荐任务。

  3. embedding 传播层的效果和 Layer-Aggregation 机制:为了研究 embedding 传播层(即图卷积层)如何影响性能,我们考虑了使用使用不同layerNGCF-1 变体。

    具体而言,我们从消息传递函数中删除了节点及其邻居之间的representation 交互,并将其设置为 PinSageGC-MCrepresentation 交互,分别称为

    • 对于

      其中 为非线性激活函数。

      缺少 的交互,也缺少图拉普拉斯范数。

    • 对于

      其中: 为节点 的第 阶邻域(每个节点和 的路径距离为 ); 为非线性激活函数。

    此外,基于 NGCF-SVD ,我们得到 NGCF 的关于SVD++ 的变体,称作

    我们在下表中显示了实验结果,并且可以发现:

    • NGCF-1 始终优于所有变体。我们将改进归因于 representation 交互(即 ),这使得消息的传播依赖于 之间的 affinity 以及注意力机制等等函数。

      同时,所有变体仅考虑线性变换。因此,这验证了我们 embedding 传播函数的合理性和有效性。

    • 在大多数情况下, 的性能不如 。这表明节点本身传递的消息( 没有item 到用户的消息传递、只有用户到 item 的消息传递)和非线性变换的重要性。

    • 联合下表和上表(所有方法性能比较结果表)可以看到:当将所有层的输出拼接在一起时, 分别比 PinSageGC-MC 获得更好的性能。这表明 layer-aggregation 机制的重要性。

  4. dropout 效果:遵从 GC-MC 的工作,我们采用了 node dropoutmessage dropout 技术来防止 NGCF 过拟合。下图给出了 message dropout rate node dropout rate 在不同数据集上对评估指标的影响。

    在两种 dropout 策略之间,node dropout 提供了更好的性能。以 Gowalla 为例,设置 将导致最好的 recall@200.1514),这优于 message dropout 得到最好的 recall@200.1506) 。

    一个可能的原因是:丢弃来自特定用户和特定 item 的所有 outgoing message 使得 representation 不仅可以抵抗特定边的影响,还可以抵抗节点的影响。因此,node dropoutmessage dropout 更有效,这和 GC-MC 工作的发现相一致。

    我们认为这是一个有趣的发现,这意味着 node dropout 可以成为解决图神经网络过拟合的有效策略。

  5. Epoch 对测试性能影响:下图给出了 MFNGCF 在每个 epoch 的测试性能(recall@20)。由于空间限制,我们省略了 ndcg@20 指标,因为该指标的性能趋势和 recall@20 是类似的。

    可以看到:NGCF 在三个数据集上表现出比 MF 更快的收敛速度。

    这是合理的,因为在 mini-batch 中优化交互 pair 对时,涉及间接相连的用户和 item 。这样的观察证明了 NGCF 具有更好的模型容量,以及在 embedding 空间中执行 embedding 传播的有效性。

17.2.3 RQ3 高阶连通性的效果

  1. 这里我们试图了解 embedding 传播层如何促进 embedding 空间中的 representation learning 。为此,我们从 Gowalla 数据集中随机选择了 6 个用户及其相关的 item。我们观察他们的 representation 如何受到 NGCF 深度的影响。

    下图 (a)(b) 分别显示了来自 MF(即 NGCF-0)和 NGCF-3representation 的可视化(通过 t-SNE)。每个星星代表Gowalla 数据集中的一个用户,和星星相同颜色的点代表相关的 item

    注意,这些 item 来自测试集,并且这些 item 和用户构成的 pair 对不会出现在训练过程中。

    可以看到:

    • 用户和 item 的连通性很好地反映在 embedding 空间中,即它们嵌入到空间中相近的位置。

      具体而言,NGCF-3representation 表现出可识别的聚类,这意味着具有相同颜色的点(即相同用户消费的 item)倾向于形成聚类。

    • 联合分析图 (a) 和图 (b) 中的相同用户(例如 12201 黄色星星和 6880蓝色星星),我们发现:当堆叠三层 embedding 传播层时,他们历史itemembedding 往往更加靠近。这定性地验证了所提出的 embedding 传播层能够将显式的协同信号(通过 NGCF-3 )注入到 representation 中。

  2. 将来的工作:

    • 结合注意力机制进一步改进 NGCF,从而在 embedding 传播过程中学习邻居的可变权重,以及不同阶连接性的可变权重。这将有利于模型的泛化和可解释性。
    • 探索关于 user/item embedding 和图结构的对抗学习,从而增强 NGCF 的鲁棒性。这项工作代表了在基于模型的 CF 中利用消息传递机制开发结构知识的初步尝试,并开辟了新的研究可能性。

十八、LightGCN[2020]

  1. 为减轻网上的信息过载,推荐系统已被广泛部署以执行个性化的信息过滤。推荐系统的核心是预测用户是否会和 item 进行交互,例如点击、评论、购买、以及其它形式的交互。因此,协同过滤collaborative filtering: CF 仍然是用于个性化推荐的基础fundamental 任务。其中, CF 专注于利用历史 user-item 交互来实现预测。

    CF 最常见的范式是学习潜在特征(也称为 embedding )来表示用户和 item ,并基于 embedding 向量进行预测。

    • 矩阵分解是一种早期的此类模型,它直接将 user ID 直接映射到 user embedding

      后来一些研究发现,利用用户的历史交互作为输入来增强augmenting user ID 可以提高 embedding 的质量。例如:

      • SVD++ 展示了用户历史交互在预测用户评分方面的好处。
      • Neural Attentive Item Similarity: NAIS 区分了历史交互中 item 的重要性,并显示了在预测 item ranking 方面的改进。

      user-item 交互图interaction graph 来看,这些改进可以视为来自于用户子图结构user subgraph structure (更具体而言,这子图结构就是用户的直接邻居)来改进 embedding learning

    • 为了深化高阶邻居子图结构的使用,人们提出了 NGCF 从而为 CF 实现了state-of-the-art 的性能。NGCF 从图卷积网络 Graph Convolution Network: GCN 中汲取灵感,遵循相同的传播propagation 规则来 refine embedding :特征变换feature transformation 、邻域聚合neighborhood aggregation 、非线性激活nonlinear activation

    尽管 NGCF 已经显示出有希望的结果,但是LightGCN 的作者认为NGCF 的设计相当沉重heavy 和冗余burdensome :很多操作毫无理由地直接从 GCN 继承下来(而并没有对 GCN 进行彻底的理论研究和消融分析)。因此,这些操作不一定对 CF 任务有用。具体而言,GCN 最初是针对属性图attributed graph 上的节点分类node classification 任务提出的,其中每个节点都有丰富的属性作为输入特征。而在 CFuser-item 交互图中,每个节点(user 或者 item)仅由一个 one-hot ID 来描述,除了作为标识符之外没有任何具体的语义。在这种情况下,给定 ID embedding 作为输入,执行多层非线性特征变换(这是现代神经网络成功的关键)不会带来任何好处,反而会增加模型训练的难度。

    为了验证这一想法(即NGCF 中的这些操作不一定对 CF 任务有用),在论文 《LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation》 中,作者对 NGCF 进行了广泛的消融研究。通过严格的控制实验(在相同的数据集拆分和评估协议上),作者得出结论:从 GCN 继承的两个操作,特征转换和非线性激活,对 NGCF 的有效性effectiveness 没有贡献。更令人惊讶的是,删除这两个操作会显著提高准确性accuracy 。这反映了在图神经网络中添加对目标任务无用useless 操作的问题:不仅没有带来任何好处,反而降低了模型的有效性。

    受到这些经验发现的启发,作者提出了一个名为 LightGCN 的新模型,其中仅包括 GCN 最重要的组件component用于协同过滤 ,即:邻域聚合。具体而言:

    • 在将每个用户(item)和 ID embedding 关联之后,模型在 user-item 交互图上传播 embeddingrefine 这些 embedding
    • 然后,模型将不同传播层propagation layer 学习的 embedding 以加权和的方式聚合,从而获得用于预测的最终 embedding

    整个模型简单而优雅,不仅更容易训练,而且比 NGCF 和其它 state-of-the-art 方法(如 Mult-VAE)获得了更好的实验性能。

    总而言之,论文的主要贡献如下:

    • 经验表明:GCN 两种常见设计,特征变换和非线性激活,对协同过滤的有效性没有正面影响。

    • 论文提出了 LightGCN,它通过仅包含 GCN 中最重要的组件进行推荐,从而在很大程度上简化了模型设计。

    • 论文通过遵循相同的实验setting,在实验中对比了 LightGCNNGCF,并展示了实质性的提升。

      论文还从技术和经验两个角度对 LightGCN 的合理性进行了深入分析。

  2. 相关工作:

    • 协同过滤:协同过滤 Collaborative Filtering: CF 是现代推荐系统中的一种流行技术。

      CF 模型的一种常见范式是将用户和 item 参数化为 embedding,并通过重建历史 user-item 交互来学习 embedding 参数。早期的 CF 模型,如矩阵分解matrix factorization: MF将用户(或 item )的 ID 映射到 embedding 向量中。最近的神经推荐模型如 NCFLRML 使用相同的 embedding 组件,但是同时增强了基于神经网络的交互建模 interaction modeling

      除了仅使用 ID 信息之外,另一种类型的 CF 方法将历史 item 视为用户已经存在pre-existing 的特征,从而实现更好的 user representation 。例如,FISMSVD++ 使用历史 itemID embedding 的加权均值作为目标用户的 embedding 。最近,研究人员意识到历史 item 对塑造个人兴趣有不同的贡献。为此,人们引入了注意力机制来捕获不同的贡献,如 ACFNAIS,从而自动学习每个历史 item 的重要性。当以 user-item 二部图的形式重新审视历史交互时,性能的提高可以归因于局部邻域(一阶邻域)的编码,这可以改进 embedding learning

      即,将历史 item 视为用户行为特征,这是一种二部图上的局部邻域编码技术。

    • 用于推荐的图方法:另一个相关的研究方向是利用 user-item 图结构进行推荐。

      之前的工作,如 ItemRank,使用标签传播机制label propagation mechanism 在图上直接传播用户偏好分 user preference score ,即鼓励相连的节点具有相似的 label。最近出现的图神经网络 graph neural network: GNN 揭示了图结构建模,尤其是高阶邻居,从而指导 embedding learning

      • 早期的研究定义了谱域spectral domain 上的图卷积,例如拉普拉斯特征分解Laplacian eigen-decomposition《Spectral Networks and Locally Connected Networks on Graphs 》)和切比雪夫多项式Chebyshev polynomial《Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering》),但是它们的计算成本很高。
      • 后来,GraphSageGCN 重新定义了空域spatial domain 中的图卷积,即聚合邻域的 embedding 从而 refine 目标节点的 embedding。由于其可解释性interpretability 和效率efficiency ,它们很快成为 GNN 的流行公式并被广泛使用。
      • 受图卷积力量的推动,NGCFGC-MCPinSage 等最近的努力使得 GCN 适应于 user-item 交互图,并捕获高阶邻域中的 CF 信号从而进行推荐。

      值得一提的是,最近的一些努力提供了对 GNN 的深入洞察insight,这激发了我们开发 LightGCN。具体而言,《Simplifying Graph Convolutional Networks》 认为 GCN 不必要的复杂性,通过移除非线性、并将多个权重矩阵融合为一个从而开发简化的 GCNsimplified GCN: SGCN )模型。LightGCNSGCN 的一个主要区别是:它们是针对不同的任务开发的,因此模型简化的合理性是不同的。具体而言:

      • SGCN 用于节点分类,对模型的可解释性和效率进行了简化。
      • 相比之下,LightGCN 用于协同过滤,其中每个节点只有一个 ID 特征。因此,我们执行简化的理由更充分:非线性和权重矩阵对于 CF 毫无用处,甚至会损害模型训练。

      对于节点分类准确性,SGCNGCN 相当(有时弱于)。对于 CF 准确性,LightGCN 的性能大大优于 GCN (比 NGCF 提高了 15% 以上)。

      最后,同时进行的另一项工作 《Revisiting Graph based Collaborative Filtering: A Linear Residual Graph Convolutional Network Approach》 也发现非线性在 NGCF 中是不必要的,并为 CF 开发了线性 GCN 模型。相比之下,我们的 LightGCN 更进了一步:我们删除了所有冗余参数,仅保留了 ID embedding,使模型像 MF 一样简单。

18.1 模型

18.1.1 NGCF

  1. 我们首先介绍 NGCF,这是一个具有代表性的、state-of-the-artGCN 推荐模型。然后我们对 NGCF 进行消融研究,以判断 NGCF 中每个操作的有效性。本节的贡献是表明 GCN 中的两种常见操作,特征转换和非线性激活,对协同过滤没有正面影响。
a. NGCF 介绍
  1. 首先每个用户和每个 item 都关联一个 ID embedding。令 表示用户 ID embedding 表示item ID embeddingNGCF 利用 user-item 交互图来传播 embedding,即:

    其中:

    • 分别为用户 item 在第 层的 refined embedding
    • 为非线性激活函数。
    • 为用户 直接交互的 item 集合, 为与 item 直接交互的 user 集合。
    • 为第 层可训练的权重矩阵,用于执行特征变换。

    通过传播 层,NGCF 得到了 embedding 来描述一个用户、得到了 embedding 来描述一个item

    然后 NGCF 拼接这 embedding 从而获得最终的 user embeddingitem embedding,并使用内积来生成预估分。

  2. NGCF 很大程度上遵循了标准的 GCN,包括使用非线性激活函数 和特征变换矩阵 。然而,我们认为这两种操作对于协同过滤不是太有用。

    • 在半监督节点分类任务中,每个节点都有丰富的语义特征作为输入,例如一篇文章的标题和关键词。因此,执行多层非线性变换有利于特征学习。

    • 然而在协同过滤中, user-item 交互图的每个节点只有一个id 作为输入,没有具体的语义。在这种情况下,执行多层非线性变换无助于学习更好的特征。

      更糟糕的是,执行多层非线性可能会增加训练的难度。接下来我们将提供实验的证据。

b. NGCF 实验探索
  1. 我们对 NGCF 进行消融研究,从而探索非线性激活和特征变换的影响。我们使用 NGCF 作者发布的代码,在相同的数据集拆分和评估协议上运行实验,以保持尽可能公平地比较。

  2. 由于 GCN 的核心是通过传播来 refine embedding,因此我们对相同 embedding size 下的 embedding 质量更感兴趣。因此,我们将获得最终 embedding 的方式从拼接(即 )改为求和(即 )。注意,这种变更对于 NGCF 的性能影响不大,但是使得以下消融研究更能够表明 GCNrefined embedding 质量。

    我们实现了 NGCF 的三个简化的变体:

    • NGCF-f:删除特征变换矩阵
    • NGCF-n:删除非线性激活函数
    • NGCF-fn:同时删除特征变换矩阵和非线性激活函数。

    对于这三个变体,我们保持所有超参数(例如学习率、正则化系数、dropout rate 等等)和 NGCF 的最佳配置相同。

    我们在下表中报告了 GowallaAmazon-Book 数据集上 2-layer setting 的结果。可以看到:

    • 删除特征变换(即 NGCF-f)导致在所有三个数据集上对 NGCF 的持续提升。
    • 相比之下,删除非线性激活函数(即 NGCF-n )不会对准确性accuracy 产生太大影响。
    • 如果我们同时删除特征变换矩阵和非线性激活函数(即 NGCF-fn),那么性能会得到显著提高。

    根据这些观察,我们得出以下结论:

    • 添加特征变换对 NGCF 产生负面影响,因为在 NGCFNGCF-n 这两个模型中删除特征变换(即 NGCF-fNGCF-fn)显著提高了性能。
    • 添加非线性激活函数在包含特征变换时影响很小(NGCF vs NGCF-n),但是在禁用特征变换时会产生负面影响(NGCF-f vs NGCF-fn)。
    • 总体而言,特征变换和非线性激活函数对 NGCF 产生了相当负面的影响。因为通过同时移除它们,NGCF-fn 表现出比 NGCF 的巨大提升(召回率相对提高 9.57% )。

  3. 为了更深入地了解表中获得的分数,以及理解为什么 NGCF 在这两种操作下(特征变换和非线性激活)恶化,我们在下图中绘制了训练损失和测试 recall

    可以看到:

    • 在整个训练过程中,NGCF-fn 的训练损失要比 NGCF, NGCF-f, NGCF-n 低得多。

      NGCF-fn 的训练损失和测试的 recall 曲线保持一致,并且这种较低的训练损失成功地转化为更好的推荐准确性。

    • NGCFNGCF-f 之间的比较显式了类似的趋势,只是提升幅度较小。

  4. 从上述证据中我们可以得出结论:NGCF 的性能恶化源于训练难度,而不是过拟合。

    从理论上讲,NGCFNGCF-f 具有更强的表示能力,因为将权重矩阵 设置为单位矩阵 可以完全恢复 NGCF-f 模型。然而在实践中,NGCF 表现出比 NGCF-f 更高的训练损失和更差的泛化性能。非线性激活的加入进一步加剧了表示能力和泛化性能之间的差异。

    NGCF 相比 NGCF-f 更高的训练损失,这就是训练难度的表现。理论上 NGCF 的模型容量更大,那么训练损失应该更低。假如 NGCF 模型的训练损失更低、但是测试 auc 反而更差,那么就是过拟合的表现。

  5. 为了完善这一部分内容,我们主张在设计推荐模型时,进行严格的消融研究以明确每个操作的影响是非常重要的。否则,包含不太有用的操作会使得模型不必要地复杂化、增加模型训练难度、甚至降低模型的有效性。

18.1.2 LightGCN

  1. 前述分析表明:NGCF 是一种用于协同过滤的沉重的、冗余的 GCN 模型。在这些发现的推动下,我们设定了一个目标,即通过包含 GCN 最基本的组件进行推荐从而开发一个轻量light 而有效effective的模型。简单的模型具有以下优势:更容易解释、更容易训练和维护、技术上更容易分析模型行为并将其修改为更有效的方向,等等。

    在这一部分,我们首先展示我们设计的 Light Graph Convolution Network: LightGCN 模型,如下图所示。在 LightGCN 中,仅对前一层邻居的 embedding 执行归一化求和normalized sum 。所有其它操作,如自连接 self-connection、特征转换、非线性激活等等,都被删除。这在很大程度上简化了 GCN 。在 Layer Combination 中,我们对每一层的 embedding 求和以获得最终 representation

    然后我们对 LightGCN 进行深入分析,以展示其简单设计背后的合理性。最后我们描述了如何针对推荐来进行模型训练。

a. LightGCN
  1. GCN 的基本思想是通过在图上平滑特征来学习节点的 representation。为了实现这一点,它迭代式地执行图卷积graph convolution,即将邻居的特征聚合为目标节点的新 representation。这种邻域聚合可以抽象为:

    其中 为一个聚合函数(图卷积的核心),它考虑了目标节点及其邻居节点在第 层的 representation

    很多工作都提出了 ,如: GIN 中的weighted sum 聚合器、GraphSAGE 中的 LSTM 聚合器、BGNN 中的bilinear interaction 聚合器等等。然而,大多数工作都将特征转换或非线性激活与 函数联系起来。尽管这些聚合器在具有语义输入特征的节点分类任务或图分类graph classification 任务上表现良好,但是它们可能对协同过滤造成负担(参考前面的初步分析结果)。

  2. Light Graph Convolution: LGC:在 LightGCN 中,我们采用简单的加权和聚合器,删除了特征变换和非线性激活。LightGCN 中的图卷积操作定义为:

    对称的归一化项 遵从标准的 GCN 的设计,这样可以避免 embedding 的幅度(即向量的幅长)随着图卷积运算而增加。这里也可以应用其它选择,如 范数。但是根据经验,我们发现这种对称归一化具有良好的性能(参考后面实验的结果)。

    值得注意的是:在 LGC 中,我们只聚合相连的邻居,没有聚合目标节点本身(即自连接)。这和大多数现有的图卷积操作不同,现有的图卷积通常聚合扩展的邻域(包含节点自身)并需要专门处理自连接。这是因为:层组合操作layer combination operation 本质上捕获了和自连接相同的效果,因此在 LGC 中没有必要包含自连接。

    关于层组合操作的内容接下来介绍,并且我们还将证明层组合操作和自连接本质上是相同的效果。

  3. 层组合和模型预测Layer Combination and Model Prediction:在 LightGCN 中,唯一可训练的模型参数是第 0 层的 embedding,即所有用户的 和所有 item。当给定这些embedding 时,可以通过 LGC 计算更高层的 embedding

    LGC 之后,我们进一步结合在每一层获得的 embedding,从而得到最终的 user representation 和最终的 item representation

    其中 表示第 embedding 在构成final embedding 中的重要性。它可以被视为要手动调优的超参数,也可以被视为要自动优化的模型参数。在我们的实验中,我们发现将 统一设为 通常会带来良好的性能。因此,我们没有设计特殊的组件来优化 ,从而避免不必要地复杂化 LightGCN 并保持其简单性。

    NGCF 采用多层 embedding 的拼接聚合不同,LightGCN 采用多层 embedding 的加权和聚合。

    我们执行层组合layer combination 从而获得final representation 的原因有三个:

    • 随着层数的增加,embedding 会过度平滑over-smooth。因此,简单地使用最后一层是有问题的。
    • 不同层的 embedding 捕获不同的语义。例如,第一层对有交互的用户和 item 强制执行平滑,第二层平滑与交互item (用户)重叠的用户(item),更高层捕获更高阶的邻近性proximity。因此,将它们组合起来将使得representation 更加全面。
    • 将不同层的 embedding 以加权和的方式组合,可以捕捉到带自连接的图卷积的效果,这是 GCN 中的一个重要技巧。

    模型预测被定义user final representationitem final representation 的内积:

  4. 矩阵形式:我们提供了 LightGCN 的矩阵形式,以便于实现以及和现有模型的讨论。

    假设 user-item 交互矩阵为 ,其中 为用户数量、item 数量。如果用户 item 有交互则 ,否则 。然后我们得到user-item 交互图的邻接矩阵为:

    令第0 层的 embedding 矩阵为 ,其中 embedding size。则我们可以得到 LGC 的矩阵等价形式为:

    其中 是一个对角矩阵(也称度矩阵), 表示 中第 行非零元素的个数, 为对称归一化的矩阵。

    最后,我们得到用于模型预测的final embedding 矩阵为:

    .

b. 模型分析
  1. 我们进行模型分析以证明 LightGCN 简单设计背后的合理性。

    首先我们讨论了与 Simplified GCN 的联系,这是最近的一个线性 GCN 模型,它将自连接集成到图卷积中。这个分析表明通过层组合,LightGCN 包含了自连接的效果。因此,LightGCN 不需要在邻接矩阵中加入自连接。

    然后我们讨论和 Approximate Personalized Propagation of Neural Predictions: APPNP 的联系,这是最近的一个 GCN 变体,它通过从 Personalized PageRank 的启发来解决过度平滑问题。这个分析表明了 LightGCNAPPNP 之间的潜在等效性。因此,我们的 LightGCN 在具有可控过度平滑controllable oversmoothing 的长距离传播方面享受同样的好处。

    最后,我们分析了第二层 LGC,以展示它如何平滑用户及其二阶邻居。这为 LightGCN 的工作机制提供更多的洞察insights

  2. SGCN 的关联:在论文 《Simplifying Graph Convolutional Networks》 中,作者论证了GCN 对节点分类的不必要的复杂性,并提出了 SGCNSGCN 通过删除非线性并将权重矩阵压缩为一个权重矩阵来简化 GCNSGCN 中的图卷积定义为:

    其中 为单位矩阵,它添加到 上从而构成自连接。

    在下面的分析中,为简单起见,我们省略了 项,因为该项仅仅对 embedding 执行缩放re-scale

    SGCN 中,最后一层得到的 embedding 用于下游预测任务,可以表示为:

    其中 表示组合数。

    上述推导表明:将自连接插入到 并在其上传播 embedding,本质上等效于在每个 LGC 层传播的 embedding 的加权和。

    添加自连接相当于将每一层的 embedding 向更高层传播,此时最后一层 embedding 隐含了各层的 embedding 信息。这相当于不带自连接的、 LGC 的各层 embedding 的直接聚合。

  3. APPNP 的关联:在最近的一项工作 《Predict then propagate: Graph neural networks meet personalized pagerank》 中,作者将 GCNPersonalized PageRank 联系起来,从中得到启发,并提出一个叫做 APPNPGCN 变体。该变体可以在没有过度平滑oversmoothing 风险的情况下进行长距离传播。

    受到Personalized PageRank 中的传送设计teleport design 的启发,APPNP 用起始特征starting feature(即第0embedding)补充每个传播层,这可以平衡balance 保留局部性locality (即靠近根节点以减轻过度平滑)和利用大的邻域的信息的需要。

    APPNP 中的传播层定义为:

    其中 为传播中控制起始特征保留的teleport probability 为归一化的邻接矩阵。

    APPNP 中,最后一层用于最终预测,即:

    我们可以看到:通过相应的设置 LightGCN 可以完全恢复 APPNP 使用的预测 embedding 。因此,LightGCN 在对抗过度平滑方面具有 APPNP 的优势:通过适当地设置 ,我们允许使用大的 进行具有可控过度平滑controllable oversmoothing 的长程long-range 建模。

    另一个细微的区别是:APPNP 在邻接矩阵中添加了自连接。然而,正如我们之前所展示的,由于LightGCN 采用了不同层 embedding 的加权和,因此自连接是冗余的。

  4. 二阶 embedding 的平滑性:由于 LightGCN 的线性和简单性,我们可以深入了解它如何平滑 embedding。这里我们分析一个两层 LightGCN 来证明其合理性。

    以用户侧为例,直观地,第二层平滑了在交互 item 上有重叠 overlap 的所有用户。具体而言,我们有:

    可以看到,如果另一个用户 和目标用户 有共同的交互 item,那么 的平滑强度smoothness strength 由以下系数来衡量:

    如果 没有共同的交互 item,那么该系数为零。

    这个系数相当容易解释:二阶邻居 的影响由以下因素决定:

    • 共同交互 item 的数量(即: ),数量越多则影响越大。
    • 共同交互item 的流行度popularity (即: ),流行度越低(即越能够代表用户的个性化偏好)则影响越大。
    • 用户 的活跃度(即:),越不活跃则影响越大。

    这种可解释性很好地满足了 CF 在度量用户相似性时的假设,并证明了 LightGCN 的合理性。

    由于 LightGCN 公式的对称性,我们可以在 item 方面得到类似的分析。

  5. LightGCNSGCN 的一个主要区别在于:LightGCNSGCN 是针对不同的任务开发的,因此模型简化的合理性是不同的。具体而言:SGCN 用于节点分类,对模型的可解释性和效率进行简化。相比之下,LightGCN 用于协同过滤CF,其中每个节点只有一个 ID 特征。因此我们做简化的理由更充分:非线性和权重矩阵对于协同过滤毫无用处,甚至会损害模型训练。

c. 模型训练
  1. LightGCN 的可训练参数只是第 0 层的 embedding,即 。换句话讲,模型复杂度和标准的矩阵分解matrix factorization: MF 相同。

  2. 我们采用贝叶斯个性化排序Bayesian Personalized Ranking 损失函数。BPR loss 是一种 pairwise loss,它 鼓励观察到的 item 的预测高于未观察到的对应 item

    其中 控制了 正则化强度。

    • 我们采用 Adam 优化器,并以 mini-batch 的方式优化。
    • 我们知道其它可能会改进 LightGCN 训练的高级负采样策略,如hard 负采样和对抗采样adversarial sampling 。我们把这个扩展放在未来,因为它不是这项工作的重点。
  3. 注意,我们没有引入 GCNNGCF 中常用的 dropout 机制。原因是我们在 LightGCN 中没有特征变换权重矩阵,因此在 embedding 层上执行 正则化足以防止过拟合。这展示了 LightGCN 简单性的优点:比 NGCF 更容易训练和调优。

    NGCF 需要额外地调优两个 dropout ratenode dropoutmessage dropout),并将每层的 embedding 归一化为单位长度。

  4. 还可以学习层的组合系数 ,或者使用注意力网络对组合系数进行参数化,这在技术上是可行的。即:个性化层的组合系数 ,以便为不同的用户启用自适应阶次的平滑。例如,稀疏用户可能需要来自高阶邻居的更多信号,而活跃用户则只需要来自低阶邻居的更少信号。

    活跃用户具有大量的一阶 item 邻居,因此使用低阶邻居就可以得到良好的用户 representation ;稀疏用户具有很少的一阶 item 邻居,因此需要高阶邻居来补充从而得到更好的用户 representation

    然而,我们发现在训练数据上学习 并没有带来改进。这可能是因为训练数据不包含足够的信号来学习可泛化到未知数据的好的 。我们还尝试从验证数据中学习 ,这是受到 《λOpt: Learn to Regularize Recommender Models in Finer Levels》 的启发,它在验证数据上学习超参数。我们发现性能性能略有提升(小于 1%)。

    我们将探索 的最佳设置(如针对不同的用户和 item 来进行个性化)作为未来的工作。

18.2 实验

  1. 我们首先描述实验设置,然后和 NGCF 进行详细比较。NGCF 是和 LightGCN 最相关、但是更复杂的方法。接下来我们将 LightGCN 和其它 state-of-the-art 方法进行比较。为了证明 LightGCN 中的设计合理性并揭示其有效的原因,我们进行了消融研究和 embedding 分析。最后我们研究了超参数。

  2. 数据集:为了减少实验工作量并保持公平的比较,我们密切遵循 NGCF 工作的配置。我们从 NGCF 作者那里获取了实验数据集(包括训练集、测试集的拆分),其统计数据如下表所示。

    • GowallaAmazon-BookNGCF 论文中使用的完全一致,因此我们直接使用 NGCF 论文中的结果。
    • 唯一的例外是 Yelp 2018 数据集,这是一个修订版本。根据NGCF作者的说法,之前的版本没有过滤掉测试集中的冷启动item,他们只向我们分享了修订版本。因此,我们在 Yelp 2018 数据集上重新运行了 NGCF
    • 评估指标是由 all-ranking 协议(用户的所有未交互的 item 都是候选 item )计算的 recall@20ndcg@20

  3. 对比方法:主要的对比方法是 NGCF,其表现优于多种方法,包括基于 GCN 的模型 GC-MC, PinSage、基于神经网络的模型 NeuMF, CMN、以及基于分解的模型MF, Hop-Rec 。由于比较是在相同评估协议下的相同数据集上进行的,因此我们没有进一步和这些方法进行比较(仅仅比较了 NGCF)。

    我们还进一步比较了两种相关的、且具有竞争力的 CF 方法:

    • Mult-VAE:这是一种基于变分自编码器variational autoencoder: VAE 的、基于 itemCF 方法。它假设数据是从多项式分布中生成的,并使用变分推断variational inference 进行参数估计。

      我们运行作者发布的代码,并在 [0, 0.2, 0.5] 中调优 dropout rate、在 [0.2, 0.4, 0.6, 0.8] 中调优 。模型架构是原始论文中建议的架构:600 -> 200 -> 600

    • GRMF:该方法通过添加图拉普拉斯正则化器graph Laplacian regularizer来平滑矩阵分解。为了公平地比较 item 推荐,我们将评分预测损失调整为 BPR loss

      GRMF 的目标函数为:

      其中 之间调优,其它的超参数设置和 LightGCN 相同。

      此外,我们还比较了一个给拉普拉斯图增加归一化的变体:

      这被称作 GRMF-norm 。这两种 GRMF 方法通过拉普拉斯正则化器在训练中引入 embedding 平滑(测试时还是原始的 embedding 而没有平滑),而我们的 LightGCN 在预测模型中实现了 embedding 平滑。

  4. 超参数配置:

    • NGCF 相同,所有模型的 embedding 大小固定为 64embedding 参数使用 Xavier 方法初始化。
    • 我们使用 Adam 优化器优化 LightGCN,并使用默认的学习率 0.001 和默认的 batch size = 1024 (在 Amazon-Book 上,我们将 batch size 增加到 2048 以提高训练速度)。
    • 正则化系数 范围内搜索,大多数情况下最优值为
    • 层组合系数 统一设置为 ,其中 为层数。
    • 我们在 1 ~ 4 的范围内测试 ,当 时可以获得令人满意的性能。
    • 早停和验证策略与 NGCF 相同。通常,1000epoch 足以让 LightGCN 收敛。

    我们的实现在 TensorFlowPyTorch 中都可用。

18.2.1 模型比较

  1. NGCF 比较:我们与 NGCF 进行了详细的比较,下表中记录了不同层(1 层到 4 层)的性能,还显示了每个指标的相对提升比例。其中NGCFGowallaAmazon-Book 上的结果来自于 NGCF 原始论文。

    我们在下图中进一步绘制了training losstesting recall 的训练曲线training curves,从而揭示 LightGCN 的优势,并明确训练过程。训练曲线是每隔 20epoch 收集一次训练损失和测试召回率。Yelp2018 结果的趋势和 Gowalla/Amazon-Book 相同,因为篇幅有限这里忽略Yelp2018 的结果曲线。

    可以看到:

    • 在所有情况下,LightGCN 的表现都远远超过 NGCF

      例如在 Gowalla 数据集上,NGCF 论文中报告的最高召回率为 0.1570,而我们的 LightGCN4 层设置下可以达到 0.1830%,高出 16.56%

      平均而言,三个数据集的召回率提高了 16.52%ndcg 提高了 16.87%,这是相当显著的提升。

    • 可以看到 LightGCN 的性能优于 NGCF-fnNGCF-fn 是删除特征变换和非线性激活的 NGCF 变体。由于 NGCF-fn 仍然包含比 LightGCN 更多的操作(如,自连接、图卷积中 user embeddingitem embedding 之间的交互、dropout ),这表明这些操作对于 NGCF-fn 也可能是无用的。

    • 增加层数可以提高性能,但是增益会逐渐减少。一般的观察是:将层数从 0 (即矩阵分解模型)增加到 1 会导致最大的性能增益,并且在大多数情况下使用 3层会导致令人满意的性能。这一观察结果和 NGCF 的发现一致。

    • 在训练过程中,LightGCN 始终获得较低的训练损失,这表明 LightGCNNGCF 更容易拟合训练数据。此外,较低的训练损失成功地转化为更好的测试准确性accuracy,这表明了 LightGCN 强大的泛化能力。

      相比之下,NGCF 较高的训练损失和较低的测试准确性反映了训练好如此重型heavy 的模型的实际难度。

    注意,在图中我们显示了两种方法在最佳超参数设置下的训练过程。虽然提高 NGCF 的学习率可以降低其训练损失(甚至低于 LightGCN),但是无法提高测试召回率,因为以这种方式降低训练损失只能为 NGCF 找到无效解 trivial solution

  2. SOA 模型的比较:下表给出了LightGCN 和其它baseline 方法的性能比较。我们展示了我们可以为每种方法获得的最佳得分。

    可以看到:

    • LightGCN 在所有三个数据集上始终优于其它方法,证明了其简单而合理的设计的有效性。

      注意:LightGCN 可以通过调整 进一步提升效果(参加后面的消融研究),而这里我们仅使用统一的 设置以免过度调优over-tuning

    • 在所有 baseline 中:

      • Mult-VAE 表现出最强的性能,优于 GRMFNGCF
      • GRMF 的性能与 NGCF 相当,优于 MF,这表明使用拉普拉斯正则化器强制 embedding 平滑的效果。
      • 通过在拉普拉斯正则化器中加入归一化,GRMF-normGowalla 上优于 GRMF、在 Yelp2018Amazon-Book 上没有任何收益。

18.2.2 消融研究

  1. 我们通过展示层组合layer combination 和对称的 sqrt 归一化如何影响 LightGCN 的性能来进行消融研究。

    为了证明前面分析的 LightGCN 的合理性,我们进一步研究了 embedding smoothness (这是 LightGCN 有效的关键原因)的影响。

  2. 层组合的影响:下图显示了 LightGCN 及其变体 LightGCN-single 的结果。其中 LightGCN-single 不使用层组合,即仅仅将 用于 LightGCN 的最终预测。

    由于篇幅有限,我们省略了 Yelp2018 上的结果,这与 Amazon-Book 显示出类似的趋势。可以看到:

    • 聚焦 LightGCN-single,我们发现:当层数从 1 增加到 4 时,它的性能先提升然后下降;在大多数情况下,峰值点在 2 层,然后迅速下降到 4 层这个最差点。

      这一结果表明:使用一阶和二阶邻居来平滑节点的embedding 对于 CF 非常有用,而在使用高阶邻居时会遇到过度平滑的问题。

    • 聚焦 LightGCN,我们发现:它的性能随着层数的增加而逐渐提高。即使使用 4 层,LightGCN 的性能也不会下降。

      这证明了layer combination 解决过度平滑的有效性,正如我们前面技术分析中(和 APPNP 的关联)所表述的那样。

    • 比较这两种方法,我们发现: LightGCNGowalla 上的表现始终优于 LightGCN-single,但是在 Amazon-BookYelp2018 上则不然(其中2LightGCN-single 表现最好)。

      对于这种现象,在得出结论之前需要注意两点:

      • LightGCN-singleLightGCN 的特例。如果将 ,其它 ,则 LightGCN 降级为 LightGCN-single
      • LightGCN 中,我们没有调优 而是简单地将其设为 。因此我们可以看到通过调优 进一步提高 LightGCN 性能的潜力。

  3. 对称 sqrt 归一化:在 LightGCN 中,我们在执行邻域聚合时对每个邻域 embedding 采用对称 sqrt 归一化 。为了研究其合理性,我们在这里探索了三种不同的选择:

    • 仅使用左侧目标节点的系数,即左侧归一化,用 -L 来表示。
    • 仅使用右侧邻居节点的系数,即右侧归一化,用 -R 来表示。
    • 使用 L1 归一化,即移除平方根,用 -L1 来表示。

    注意,如果移除整个归一化本身,那么训练会变得数值不稳定,并且会受到 not-a-value:NAN 问题的影响,因此这里我们不会比较这个配置。

    下表给出了3LightGCN 的结果, 可以看到:

    • 一般而言,最佳设置是使用对称 sqrt 归一化(即 LightGCN 的当前设计)。移除任何一侧都会大大降低性能。
    • 次优设置是仅在左侧使用 L1 归一化,即 LightGCN-L1-L,这相当于通过 in degree 将邻接矩阵归一化为随机矩阵stochastic matrix
    • 两侧对称归一化有助于 sqrt 归一化(即 LightGCN vs LightGCN-L/LightGCN-R),但是会降低 L1 归一化的性能(即 LightGCN-L1 vs LightGCN-L1-L/LightGCN-L1-R)。

  4. Embedding Smoothness 分析:正如我们在前面分析的那样,一个 2LightGCN 根据用户交互 item 上重叠overlap 的用户来平滑用户的 embedding,两个用户之间的平滑强度smoothing strength 根据以下公式来衡量:

    我们推测这种 embedding 平滑是 LightGCN 有效性的关键原因。为了验证这一点,我们首先将用户 embedding 的平滑性定义为:

    其中 embeddingL2 范数用于消除 embedding 幅度scale 的影响。

    类似地,我们可以获得 item embedding 的平滑性定义。

    理论上如果两个用户平滑强度 较大,则他们之间应该越相似,即 很小。因此 可以视为一种平滑性损失smoothness loss,该值越小那么embedding 越平滑。

    下表显式了矩阵分解(即使用 进行模型预测)、2 层的 LightGCN-single (即使用 进行模型预测)这两个模型的平滑性。注意:2LightGCN-single 在推荐准确性方面远远超过 MF

    可以看到:LightGCN-single 的平滑性损失远远低于 MF。这表明,通过进行 light graph convolutionembedding 变得更平滑、更适合用于推荐。

18.2.3 超参数研究

  1. LightGCN 应用于新数据集时,除了标准的超参数学习率之外,最重要的超参数是 L2正则化系数 。这里我们研究了一个 2 层的 LightGCN 的性能针对超参数 变化的曲线,如下图所示。可以看到:

    • LightGCN 相对不敏感。即使当 时,LightGCN 也比 NGCF 要好。而 NGCF 额外使用 dropout 来防止过拟合。

      这表明 LightGCN 不太容易过拟合,因为 LightGCN 中唯一可训练的参数是第 0 层的 ID embedding,所以模型很容易训练和正则化。

    • Yelp 2018Amazon-BookGowalla 数据集上, 的最佳取值分别为

      时,模型性能下降得很快,这表明太强的正则化将对模型正常训练产生负面影响,因此不鼓励这样做。

  2. 我们相信 LightGCN 的洞察对推荐模型的未来发展具有启发意义。随着链接图数据 linked graph data 在实际应用中的流行,基于图的模型在推荐中变得越来越重要。通过显式地利用预测模型中实体之间的关系,基于图的模型优于传统的监督学习方案(如隐式利用实体之间关系的分解机 FM )。

    例如,最近的一个趋势是利用辅助信息,如 item 知识图、社交网络、多媒体内容,从而进行推荐。在这个过程中,GCN 已经建立了 state-of-the-art 技术。然而,这些模型也可能会遇到 NGCF 的类似问题,因为 user-item 交互图也由相同的、可能不必要的神经操作建模。我们未来计划在这些模型中探索 LightGCN 的思想。

    另一个未来的方向是个性化层组合权重 ,以便为不同的用户启用自适应阶次的平滑。例如,稀疏用户可能需要来自高阶邻居的更多信号,而活跃用户可能只需要低阶邻居的信号。

    最后,我们将进一步探索 LightGCN 简单性的优势,研究非采样回归损失non-sampling regression loss 是否存在快速解决方案,并将其流式传输streaming 到在线工业场景。

十九、Sampling-Bias-Corrected Neural Modeling[2019](检索)

  1. 推荐系统帮助用户在很多互联网服务中发现感兴趣的内容,包括视频推荐、app 推荐、以及在线广告 targeting 。在很多情况下,这些系统在严格延迟latency 的要求下,将数十亿用户连接到来自数百万甚至数十亿规模的内容语料库中的 item

    一种常见的做法是将推荐视为检索和排序问题retrieval-and-ranking problem ,并设计一个两阶段系统。也就是说,一个 scalable 检索模型首先从大型语料库中检索一小部分相关的 item,然后一个排序模型基于一个或多个目标(例如点击或用户评分)对检索到的 item 进行重排 re-rank 。这里我们聚焦于为个性化推荐构建一个真实世界的、可扩展scalable 的检索系统。

    给定 {user, context, item} 三元组,构建可扩展检索模型的常见解决方案是:

    • 分别学习 {user, context}query representation{item}item representation
    • query representationitem representation 之间使用简单的评分函数(如内积)来获得为 query 量身定制的推荐。

    其中,context 通常表示具有动态性质的变量,如一天中的时间、用户正在使用的设备。

    面对众所周知的冷启动问题cold-start problem,现实世界的系统需要适应数据分布data distribution的变化,以便更好地呈现新鲜的内容fresh content

    近年来,由于深度学习在计算机视觉和NLP 方面的成功,有大量工作将深度神经网络DNN 应用于推荐。deep representation 非常适合在低维 embedding 空间中编码复杂的用户状态和 item 内容特征。这里以双塔 DNN 模型为例,如下图所示,其中左塔编码了 {user, context} 、右塔编码了 {item}

    DNN 模型计算 softmax 时通常不会考虑所有可能的 item,而是使用来自固定词表fixed vocabulary 的负样本来优化训练。但是在流式streaming在线训练online learning场景下,词表不再固定(因为新item 的不断涌入),因此另一种优化方式是考虑 batch softmax 优化,其中 item 概率是在一个随机 batch 中的所有 item 上计算的,从而作为训练双塔 DNN 的通用方法。

    然而正如实验所示,batch softmax 受采样偏差sampling bias 的影响,可能会严重限制模型性能,特别是在item 分布高度倾斜的情况下。MLP 模型研究了重要性采样importance sampling 以及相应的偏差缩减 bias reduction 技术。受到这些工作的启发,论文 《Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations》提出使用估计的 item 频率来纠正 batch softmax 的采样偏差sampling bias。与固定词表相比,论文提出的方法可以处理流式数据streaming data ,其中词表和item 分布随着时间发生变化。此外,论文还提出了一种通过梯度下降来估计 item 频率的新算法。另外,论文应用偏差校正建模bias-corrected modeling,并扩展scale 它来构建个性化的 YouTube 推荐检索系统。最后,论文还介绍了一种序贯sequential训练策略,旨在结合流式数据以及系统的indexing 组件、serving 组件。

    论文主要贡献:

    • 流式频率估计Streaming Frequency Estimation:论文提出了一种新的算法,从而在词表和 item 分布动态变化的情况下估计流式数据中的 item 频率。论文的分析结果给出了估计的方差和偏差。论文还提供了仿真来证明该方法在捕获数据动态方面的有效性。
    • 建模框架Modeling Framework:论文为构建大规模检索系统提供了一个通用的建模框架。具体而言,论文将估计的item 频率融合到 batch softmax 的交叉熵损失中,以减少 in-batch item 的采样偏差。
    • YouTube 推荐:论文描述了如何应用建模框架为 YouTube 推荐构建大规模检索系统。论文介绍了端到端系统,包括训练组件、索引组件、服务组件。
    • 离线和在线实验:论文对两个真实世界的数据集进行了离线实验,并证明了采样偏差校正的有效性。论文还表明,为 YouTube 构建的检索系统可以提高在线实验中的互动engagement 指标。
  2. 相关工作:这里我们概述了相关工作,并强调了这些工作与我们贡献的联系。

    • 内容感知和神经推荐器Neural Recommender:利用用户和 item 的内容特征对于提高泛化能力和缓解冷启动问题至关重要。

      有一系列研究侧重于将内容特征纳入经典的矩阵分解matrix factorization: MF 框架。例如,广义矩阵分解模型(如 SVDFeatureFactorization Machine: FM)可用于融合 item 内容特征。这些模型能够捕获双线性bi-linear ,即特征之间的二阶交互。

      近年来,深度神经网络 DNN 已被证明可以有效提高推荐准确性。由于高度的非线性,DNN 相比于传统的分解方法,可以提供更强大的捕获复杂特征交互的能力。《Neural Collaborative Filtering》直接应用了协同过滤的直觉,并提供了一种 neural CF: NCF 的架构来对 user-item 交互进行建模。在 NCF 框架中,user embeddingitem embedding 被拼接起来并通过多层神经网络传递从而获得最终预测。我们的工作在两个方面与 NCF 不同:

      • 我们利用双塔神经网络对 user-item 交互进行建模,以便可以在亚线性时间内对大量 item 语料库进行推断。
      • NCF 的学习依赖于 point-wise 损失(例如平方损失或者对数损失),而我们引入了多类 softmax 损失并显式建模了 item 频率。

      在另一项工作中,深度循环模型(如 LSTM)将时间信息和历史事件融合到推荐中。除了学习独立的 user representationitem representation 之外,还有另一些工作专注于设计神经网络,特别 是learned to rank 系统。值得一提的是,多任务学习 multi-task learning 一直是优化复杂推荐系统多个目标的核心技术。《Wide Deep Learning for Recommender Systems》 引入了一个 Wide & Deep 框架,该框架具有联合训练的 wide 线性模型和 deep 神经网络模型。

    • 极端分类 Extreme Classifcationsoftmax 是模型中最常用的函数之一,可用于预测高达数百万个 label 的大型输出空间。

      许多研究一直专注于为大类别large number of classes 训练 softmax 分类模型。当类别数量非常大时,一种广泛使用的加速训练技术是对类别子集进行采样。《Adaptive Importance Sampling to Accelerate Training of a Neural Probabilistic Language Model》 表明,良好的采样分布应该能够适应模型的输出分布。为了避免计算采样分布的复杂性,很多现实世界的模型采用简单的分布,例如均匀分布。最近 《Adaptive Sampled Softmax with Kernel Based Sampling》 设计了一种高效且自适应的 kernel based 采样方法。尽管 sampled softmax 在各个领域取得了成功,但是不适用于 label 具有内容特征的情况。在这种情况下,自适应采样仍然是一个悬而未决的问题。

      各种工作表明, tree-based 的标签结构,例如 hierarchical softmax ,可用于构建大规模分类模型,同时显著减少推断时间。这些方法通常需要基于某些离散属性categorical attributes 的预定义树结构。因此,它们不适用于融合多种类型的输入特征。

    • 双塔模型:构建具有双塔的神经网络最近已经成为几种 NLP 任务的流行方法,包括建模 sentence 相似性、response 建议、基于文本的信息检索。我们的工作对这方面的研究做出了贡献,具体而言是证明了双塔模型在构建大规模推荐系统方面的有效性。

      值得注意的是,与上述文献中的很多语言任务相比,我们关注的是语料库规模更大的问题,这在我们的目标 application (如 YouTube )中很常见。通过在线实验,我们发现显式建模 item 频率对提高该 setting 中的检索准确性至关重要。然而,这个问题在现有的工作中并未得到很好的解决。

19.1 模型

19.1.1 模型框架

  1. 我们考虑推荐问题的常见 setting,其中我们有一个 query 集合,以及一个 item 集合 。其中 query 数量、item 数量。

    query 集合由特征向量集合 来表示,item 集合由特征向量集合 来表示。这里 都是各种特征(例如稀疏的 ID 特征和稠密的数值特征)的混合,并且可能维度非常高。其中 query 特征空间、item 特征空间。在个性化场景中,我们假设 完全捕获了用户信息和上下文信息。

    推荐任务的目标是检索给定 queryitem 子集。

    注意,我们从有限数量的 queryitem 开始解释,但是我们的建模框架并没有这样的假设。

    query 集合以及 item 集合可能都不是固定的,而是动态增加的。

  2. 我们旨在建立一个具有两个 parameterized embedding 函数的模型,这两个函数为:

    这两个函数将模型参数 query/item 特征映射到一个 embedding 空间。我们聚焦于 是由两个深度神经网络表示的情况。

    模型的输出是两个 embedding 的内积,即:

    任务目标是是从由 个样本组成的训练集 中学习模型参数 ,其中 :

    • 表示 query item pair 对。
    • 为每个 pair 对的奖励reward 。通常我们将互动 engagement的视频视为正的 label,但是我们构建了一个奖励 来反映用户对视频互动的程度。例如, 表示观看时间很短的点击行为, 表示整个视频都看完了的点击行为。
  3. 直观地看,检索问题可以被视为一个多分类问题。给定一个 query ,从 item 中挑选候选item 的概率的常见选择是基于 softmax 函数,即:

    进一步地,我们考虑以下加权对数似然函数作为损失函数,权重为 reward

    非常大时,在计算 中的分母时包含所有候选 item 是不可行的。一个常见的想法是使用 item 的子集。我们聚焦于处理流式数据streaming data 。因此,与从固定语料库中抽取负样本来训练 MLP 模型不同,我们考虑仅使用 in-batchitem 来作为同一个 batch 内所有其它 query 的负样本。准确地说,给定mini-batch 中的 pairbatch softmax 为:

  4. 在我们的目标 application 中,in-batchitem 通常从幂律分布中采样而来。结果, 引入了对 full softmax 的很大的 bias:热门的 item 由于被包含在一个 batch 中的可能性很高,从而被过度惩罚为负样本。受到 sampled softmax 模型中使用的 logQ 校正的启发,我们通过以下等式校正:

    这里 表示在一个随机 batchitem 的采样概率。我们把 的估计estimation 推迟到下一节详述。

    的物理意义:在所有正样本中,样本 item 出现的概率。因为训练 batch 都是正样本的 pair

    通过校正,我们有(注意,对于 positive 样本我们仍然使用 函数):

    然后我们得到batch 损失函数为:

    我们以学习率 来在 SGD 中更新模型参数,即:

    注意, 不需要一组固定的 query 或候选 item。因此,上述更新方程可用于分布随时间变化的流式训练数据streaming training data

  5. 采样方差校正的训练算法:

    • 输入:

      • embedding 函数
      • 学习率
    • 输出:训练好的模型参数

    • 算法步骤:

      • 反复迭代直到模型收敛,迭代步骤为:

        • stream 中接收或者随机采样一个 batch 的训练样本
        • 根据频率估计frequency estimation 算法来预估每个 的采样概率
        • 计算损失函数
        • 更新模型参数
      • 返回训练好的模型参数

  6. 最近邻搜索Nearest Neighbor Search:一旦学习了 embedding 函数 , 那么 inference 包含两个步骤:

    • 计算 query embedding
    • 对从 embedding 函数 预先计算的一组 item embedding 执行最近邻搜索。

    对于近似的最大内积搜索maximum inner product search: MIPS 问题,低延迟检索通常采用基于哈希技术的高效相似性搜索系统,而不是计算所有item 的内积来得到 top item 。因为这不是我们关注的重点,因此不再详述。

  7. 归一化和温度Normalization and Temperature:经验上,我们发现增加embedding 归一化可以提高模型的可训练性trainability ,从而导致更好的检索质量。即:

    此外,我们添加温度 到每个 logit 从而锐化sharpen 预测结果,即:

    在实践中, 是一个超参数,并根据最大化检索指标(如recallprecision)来调优。

19.1.2 频率估计

  1. 在本节中,我们详细说明流的频率估计streaming frequency estimation

  2. 考虑随机batch 的一个stream,其中每个 batch 包含一组 item 。问题是估计每个 batch 中,命中hitting 每个 item 的概率(即包含每个 item 的概率)。

    一个关键的设计准则是:当有多个训练jobs (即 workers )时,可以用一个完全分布式的估计distributed estimation 来支持分布式训练。

    在单机训练或分布式训练中,一个 unique global step 代表 trainer 消耗的 data batch 编号,并且和每个采样的 batch 关联。在分布式setting 下,global step 通常通过参数服务器parameter servers 在多个 workers 之间同步。因此,我们可以利用 global step ,将一个 item 的频率 的估计转换为 的估计,其中 表示item 的两次连续 hit 之间的平均step 。例如,如果每隔 50 step 采样到一个 item,那么我们有

    使用 global step 为我们提供了两个好处:

    • 通过读取和修改 global step,多个 worker 隐式地同步了频率估计。
    • 的估计可以通过简单的移动平均更新moving average update 来实现。这种方式可以适应分布的变化 distribution change
  3. 为了记录不同 item 的平均hit间隔,使用固定的 item 词表通常不现实(因为不断有新的item 出现),这里我们应用哈希数组来记录。注意,引入哈希可能会导致潜在的哈希冲突,我们在后文中重新讨论这个问题并提出改进算法。

    我们分配两个长度为 的数组 。假设 是一个将任何 item 映射到 中的整数的哈希函数,其中哈希映射可以基于 ID 或者其他任何item 特征。那么对于给定的 item 记录当 hit 时的latest step 记录 估计。

    我们使用数组 来帮助更新数组 。 一旦item global step t 中出现(即hit ),我们依次更新数组 和数组 为:

    其中:

    • item 最近一次出现的间隔。
    • 基于加权平均来更新 item 的出现间隔,其中:最近的出现间隔权重为 ,历史平均出现间隔的权重为
    • 更新为 ,即 item 的最新的出现 gloal step

    为了得到 item 的采样概率估计 ,我们可以简单地认为

    物理意义:item 出现频率 = 1 / item 出现的平均周期。这里 B 记录每个 item 出现的平均周期(以移动均值来更新)。

  4. 流式频率估计算法Streaming Frequency Estimation

    • 输入:

      • 学习率
      • 长度为 的数组
      • 哈希函数 ,其输出空间为
    • 输出:每个 item 的采样概率

    • 算法步骤:

      训练期间:

      • 迭代,直到停止条件。迭代步骤为:

        采样一个 batchitem 。对于每个 item ,执行:

      推断期间:

      对于任意 item ,采样概率为

  5. 对于给定的 item,假设两次连续 hit 之间的 step 遵循随机变量 表示的分布,其中随机变量的均值为 。这里我们的目标是从样本流 stream 中估计

    随机变量 表示 item 出现的周期。

    每当这个 itemglobal step tbatch 中出现时, 的一个新样本。因此,上述更新可以理解为以固定学习率 运行 SGD 来学习这个随机变量的均值。

    理论上,如果没有哈希碰撞的情况下,接下来的命题Proposition 显示了这个在线估计的偏差bias和方差variance

    命题:假设 为随机变量 独立同步分布采样得到的采样序列。令 。考虑一个在线估计online estimation ,其中

    则:

    • 估计的偏差为:
    • 估计的方差为:

    其中 的初始估计。

    证明见原始论文。

    上式表明:

    • 时,估计的偏差

    • 理想的初始化 将导致每一个step 的无偏估计。

    • 估计的方差的上界由 给出。可以看到学习率 在两个方面影响方差:

      • 较大的学习率导致依赖于初始误差 的第一项更快下降。
      • 较大的学习率增加了取决于 方差的第二项,并且这一项不会随着时间而减少。
  6. 分布式更新:我们考虑分布式训练框架,其中模型的 parameter 分布在一组称作参数服务器parameter server 的服务器上,多个 worker 独立地处理训练数据,并与参数服务器通信以获取和更新模型parameter

    Streaming Frequency Estimation 算法可以扩展到这个 setting

    • 数组 ABglobal step 这些参数分布在参数服务器上。
    • 每个 worker 采样一个 mini-batchitem ,并从参数服务器获取
    • 然后每个 worker 更新 并发送回参数服务器。

    因此,Streaming Frequency Estimation 算法可以和神经网络的异步随机梯度下降训练一起执行。

  7. 多重哈希 Multiple Hashing:受到 count-min sketch 中类似思想的启发,我们扩展了Streaming Frequency Estimation 算法以利用多个哈希函数来缓解由于哈希碰撞而导致的 item 频率高估。我们给出 个数组 个数组 。每个数组 的更新遵循 Streaming Frequency Estimation 算法相同的步骤。

    考虑到哈希碰撞, 可能是对 item hit 间隔的低估,因为可能另一个不同的 item 也被存储到该分桶。因此在推断时,我们使用 个估计值的最大值来表示 hit 间隔。

  8. 多重哈希Streaming Frequency Estimation

    • 输入:

      • 学习率
      • 长度为 个数组 个数组
      • 输出空间为 个哈希函数
    • 输出:每个 item 的采样概率

    • 算法步骤:

      训练期间:

      • 迭代,直到停止条件。迭代步骤为:

        采样一个 batchitem 。对于每个 item ,执行:

      推断期间:

      对于任意 item ,采样概率为

19.1.3 Youtube 的神经检索系统

  1. 我们应用所提出的建模框架并对其进行扩展scale,以针对 YouTube 中的一个特定产品构建大规模神经检索系统neural retrieval system 。该产品根据用户正在观看的视频(称为种子视频)生成视频推荐。

    推荐系统由两阶段组成:检索retrieval、排序 ranking 。在检索阶段我们有多个检索器,每个检索器在给定用户和种子视频的条件下生成数百个候选推荐视频。这些候选视频随后由排序模型进行打分和重排。

    在本节中,我们聚焦于在检索阶段构建一个新的、额外的检索器。

    这里的检索模型对每个种子视频输出数百个候选推荐,因此每个种子视频就是一个 trigger。假如用户有很多种子视频,那么就将这些 trigger 召回的结果进行合并。因此可以看到:模型每次仅处理一个种子视频,而不是将所有种子视频馈入到模型中。

    至于是处理单个种子视频、还是处理历史种子视频序列,哪个效果更好,可能需要通过实验来分析。

  2. 模型概览:我们构建的 YouTube 神经检索模型由 query 网络和候选candidate 网络组成,如下图所示。在任何时间点,用户正在观看的视频(即种子视频),提供了关于用户当前兴趣的强烈信号。 因此,我们利用了用户观看历史中的大量种子视频的特征。构建候选 tower 是为了从候选视频特征中学习。

    • 训练 label:视频点击被视为正的 label。此外,对于每次点击我们构建了一个奖励 来反映用户对视频的不同程度的互动engagement 。例如, 表示观看时间很短的点击视频, 表示整个视频都看完了。奖励用于损失函数的样本加权。

    • 视频特征:我们使用的视频特征包括离散特征和连续特征。

      离散特征包括视频ID、频道 ID。对于这些实体entity 中的每一个,我们都创建 embedding 层从而将每个离散特征映射到稠密向量。

      通常我们处理两种类型的离散特征:

      • 某些特征是离散的单个值,如视频 ID 对于每个视频仅有一个取值。因此我们有一个 embedding 向量来表示它。
      • 某些特征是离散的多个值,如视频的主题可能包含多个取值。因此我们有多个 embedding 向量,并取它们的加权作为该特征的 embedding

      为了处理 out-of-vocabulary 的实体,我们将这些 oov 实体随机分配到一组固定的哈希桶中,并学习每个哈希桶的 embedding。哈希桶对于模型捕获 YouTube 中可用的新实体很重要。

      对哈希之后的 ID 进行 embedding,这解决了需要人工为实体分配 ID 的映射工作。

    • 用户特征:除了种子视频之外,我们还使用了用户的观看历史来捕获用户的兴趣。其中一个用户特征的例子是:用户最近观看的 个视频id 的序列。我们将观看历史视为 bag of words: BOW,并通过视频 idembedding 的均值来表示它。

      query 塔中,用户特征和种子视频特征在input layer 融合,然后通过前馈神经网络传递。

    • 对于相同类型的 idembedding 是在相关特征之间共享的。例如,同一组视频id embedding 用于种子视频、候选视频、用户历史观看视频。

      我们实验了非共享 embedding ,但是没有观察到显著的模型质量提升。

  3. 序贯训练sequential training:我们的模型在 Tensorflow 中实现,并在分布式系统(包含多个 workerparameter server )上使用分布式梯度下降进行训练。在 YouTube 中,每天都会生成新的训练数据,训练集也相应地按天进行组织。

    模型训练以下列方式利用这种序贯结构sequential structuretrainer 按照从最老的训练样本到最近的训练样本按顺序使用数据。一旦 trainer 赶上最新一天的训练数据,它就会等待第二天的训练数据到达。通过这种方式,模型能够跟上最新的数据分布的变化。

    训练数据本质上是由 trainer 以流式streaming 的方式消费的,我们应用Streaming Frequency Estimation算法 (如果使用多个哈希,则使用多重哈希 Streaming Frequency Estimation算法 )来估计 item 频率。

  4. IndexingModel Serving:检索系统中的 index pipeline 会定期创建一个 Tensorfow SavedModel 用于在线 servingindex pipeline 分为三个阶段:候选样本生成candidate example generationembedding inferenceembedding indexing,如下图所示。

    • 在候选样本生成阶段,基于一定的标准从 YouTube 语料库中挑选一组视频。这些视频的特征被提取并添加到候选样本中。
    • embedding inference 阶段,Neural Retrieval Model 的右塔(候选 item 塔)用于计算候选样本的 embedding
    • embedding indexing 阶段,我们训练一个基于树和量化哈希技术的、 Tensorfow-basedembedding index model。我们掩盖了细节,因为这不是本文的重点。
    • 最后,serving 中使用的 SavedModel 是通过Neural Retrieval Modelquery 塔和 indexing model 拼接在一起而创建的。

19.2 实验

  1. 这里我们展示了实验结果,以证明所提出的 item 频率估计和建模框架的有效性。

19.2.1 频率估计仿真

  1. 为了评估Streaming Frequency Estimation算法和多重哈希Streaming Frequency Estimation算法的有效性,我们从仿真研究开始,首先将应用每个算法来拟合固定的 item 分布,然后在某个 step 后改变 item 分布。

    具体而言,在我们的 setting 中,我们使用一组固定的 item,并且每个 item 都根据概率 独立采样,其中

    我们在一个输入流input stream 上进行仿真,其中每个 step 都采样一个 batchitem 。这里 中的每个 item 都是以概率 进行有放回的采样。因此我们要拟合的 itemhit 概率为

    我们在前 step 保持固定的采样分布,然后在剩下的 step 中切换为另一个采样分布

    为了评估 esitmation 的准确性accuracy,我们计算 esitmation的概率集合 和实际的概率集合 之间的 距离,然后进行归一化从而作为估计误差estimation error 。即:

    具体而言,我们报告了学习率 的影响,以及多重哈希的影响。

  2. 学习率 的影响:我们设置 、数组 的长度均为 。此外,我们使用全零来初始化数组 、用值 100 来初始化数组 。分布切换发生在 step 的地方。我们使用一个哈希函数并运行Streaming Frequency Estimation算法。

    下图给出了不同的学习率 在一组 global step 上的估计误差。可以看到:

    • 三条曲线都收敛到某个误差水平 error level,该误差水平来自于哈希冲突和估计方差estimation variance
    • 学习率越高,算法对分布变化的适应能力越强,但是最终方差更高,如前述的命题所示。

    可以在学习初期以高的学习率快速收敛,然后用低的学习率降到更低的方差,这样可以结合两方面的优势。

  3. 多重哈希的影响:在第二个仿真中我们运行多重哈希Streaming Frequency Estimation算法,并使用不同数量(以参数 表示)的哈希函数进行实验。对于不同的 ,我们选择不同的数组大小 ,从而使得哈希桶的总数保持不变。

    下图显示了 的估计误差曲线。可以看到:多个哈希函数可以减少估计估计误差,即使是在参数数量相同的情况下。

19.2.2 Wikipedia Page 检索

  1. 在本节中,我们在维基百科数据集上进行页面 page 检索实验,以展示采用偏差校正sampling-bias-correctedbatch loss 的效果。

  2. 数据集:我们考虑预测维基百科页面之间的站内链接intra-site link 的任务。

    • 对于给定的一对源页面和目标页面 ,如果存在从 的链接,则label = 1,否则 label = 0
    • 每个页面都由一组内容特征表示,包括页面 URL、页面标题中 n-grams 单词组成的 bag-of-word: BOWrepresentation、页面类目的 bag-of-word: BOWrepresentation

    我们对英文的 graph 进行了实验,它包含 530 万个页面、43亿条链接、51 万个标题 n-grams40.34 万个unique 类目。

  3. 模型:我们将链接预测视为检索问题,其中给定一个源页面,任务是从页面语料库中检索目标页面。因此,我们训练了一个双塔神经网络,其中左塔映射源页面特征、右塔映射目标页面特征。

    • input feature embedding 在两个塔之间共享。
    • 每个塔都有两个全连接的 ReLU 层,维度为 [512,128]
  4. baseline

    • 我们将所提出的、采用偏差校正的 batch softmax (即 ,记作 correct-sfx) 和没有任何校正的 batch softmax(即 ,记作 plain-sfx )进行比较,从而证明偏差校正的效果。

    • 此外,我们还考虑了推荐任务的隐式反馈建模中广泛采用的均方损失。损失是在观察到的 pair 对上的 MSE 和正则化项的组合。这个正则化项迫使所有未观察到的 pair 对的距离尽可能到一个常数的先验prior(通常为 0.0,表示不存在链接)。

      具体而言,这个损失函数为:

      其中:

      • 为所有观察到的pair 对; 的补集,表示未观察到的 pair 对。
      • 为一个正的超参数,表示正则化系数。

      在矩阵分解中,这种损失通常使用交替最小二乘法alternating least square: ALS 或者坐标下降法coordinate descent: CD 来训练。最近,Krichene 等人通过随机梯度下降 SGD 扩展了 Gramian 计算方法到非线性的场景。我们称之为 mse-gramian

  5. 配置:

    • 对于所有方法,我们使用batch size = 1024Adagrad 优化器、学习率 0.01、训练step1000 万。

    • 对于频率估计,我们使用 千万、

    • 我们保留 10% 的链接用于评估,其中评估指标为 Recall@K 。该指标本质上是针对页面语料库在 top k 个候选中包含真实 label 的平均概率。

    • mse-gramian 中的超参数 通过线性搜索进行调优,并报告最佳结果。

    • 归一化和温度Normalization and Temperature

      • 我们发现归一化输出层总是可以提高模型性能和训练稳定性,因此我们只显示出归一化的结果。
      • 我们对 plain-sfxcorrect-sfx 实验了多个温度值
  6. 实验结果如下表所示。可以看到:

    • 对于每个温度值,correct-sfx 大大优于相应的 plain-sfx
    • 温度对于性能的影响很有趣,这表明在应用归一化输出层时必须仔细调优温度超参数。
    • 基于 batch softmax 的方法比 mse-gramian 具有更好的性能。

19.2.3 YouTube 实验

  1. 我们基于前面所述的神经检索系统在 YouTube 上进行了离线和在线实验。我们使用的 YouTube 训练数据包含每天数十亿次点击的视频,并且数据集包含多天。

  2. 配置:

    • 如前所述,input feature embeddingquery 塔和候选塔之间共享。我们对两个塔都使用三层 DNN,隐层维度为 [1024, 512, 128]
    • 对于模型训练,我们使用 Adam 优化器、学习率 0.2batch size = 8192
    • 对于频率估计,我们使用 千万、
    • 我们应用序贯训练。对于本节中的实验,每隔几个小时周期性地构建从 YouTube 语料库中选择的、大约 1000 万个视频的索引。索引的语料库可能会随着时间的推移而发生变化,例如有新上传的视频。
  3. 离线实验:我们为所有点击的视频分配 ,并通过点击视频的召回率来评估模型性能。我们简化了离线实验的奖励函数。

    为了结合序贯训练,我们在 天(设置为 15 天)之后评估模型性能,此时 trainer 完成追赶catch-up 阶段并开始等待新的数据。对于 之后的每一天,我们保留 10% 的数据进行评估。为了说明每周的模式pattern,我们报告了连续 7 天的平均离线结果,即

    结果如下表所示。再次可以看到:

    • mse-gramian 相比,使用 batch softmax 有着显著提升。
    • 在具有不同温度 的设置中,correct-sfx 的表现优于 plain-sfx

  4. 在线实验:我们还在 YouTube 上的 A/B test 测试框架中进行在线实验。对于控制组的用户,视频是从生产系统中推荐的。对于实验组,将神经检索系统中的候选 item 添加到检索阶段之后(从而一起进入排序阶段)。

    由于仅仅向用户推荐他/她可能点击的视频还不够(还需要考虑观看完播率 ),因此在线实验中,我们用奖励训练模型,从而反映用户对点击视频的真实互动engagement 。因此我们报告了点击一致的互动指标(即在点击基础之上再考虑互动),结果如下表所示。

    可以看到:

    • 增加神经检索系统大大改善了以前的生产系统。
    • 使用 correct-sfx 的模型比使用 plain-sfxbaseline 表现好得多,这证明了采样偏差校正的有效性。

二十、EGES[2018](Matching 阶段)

  1. 互联网技术不断重塑商业格局,如今电商无处不在。阿里巴巴是中国最大的电商平台,它使得全世界各地的个人或公司都可以在线开展业务。阿里巴巴拥有 10 亿用户,2017 年的商品交易总额Gross Merchandise Volume: GMV37670 亿元,2017 年的收入为 1580 亿元。在著名的 “双十一” 这个中国最大的网络购物节,2017 年的GMV 约为 1680 亿元。在阿里巴巴的各类在线平台中,最大的在线 consumer-to-consumer: C2C 平台淘宝贡献了阿里巴巴电商总流量的 75%

    淘宝拥有10 亿用户和 20 亿item (即商品),最关键的问题是如何帮助用户快速找到需要的、感兴趣的item 。为了实现这一目标,基于用户偏好 preference 从而为用户提供感兴趣的 item 的推荐技术成为淘宝的关键技术。例如,手机淘宝首页(如下图所示)是根据用户历史行为而通过推荐技术生成的,贡献了总推荐流量的 40%。此外,推荐贡献了淘宝的大部分收入和流量。总之,推荐已经成为淘宝和阿里巴巴的 GMV 和收入的重要引擎。下图中,用虚线矩形框突出显示的区域是针对淘宝上十亿用户的个性化。为了更好的用户体验user experience ,我们还生成了吸引人的图像和文本描述。

    尽管学术界和工业界的各种推荐方法取得了成功,例如协同过滤collaborative filtering: CF、基于内容的方法、基于深度学习的方法,但是由于用户和item 的十亿级的规模,这些方法在淘宝上面临的问题变得更加严重。推荐系统在淘宝面临三大技术挑战:

    • 可扩展性scalability:尽管很多现有的推荐方法在较小规模的数据集(即数百万用户和 item)上运行良好,但是在淘宝的、大得多的数据集(即10 亿用户和 20 亿 item)上无法运行。

    • 稀疏性sparsity:由于用户往往只与少量 item 进行交互,因此很难训练出准确的推荐模型,尤其是对于交互次数很少的用户或 item。这通常被称作稀疏性问题。

    • 冷启动cold start:在淘宝,每小时都有数百万新的 item 不断上传。这些 item 没有用户行为。处理这些 item 或预测用户对这些 item 的偏好具有挑战性,这就是所谓的冷启动问题。

      稀疏性和冷启动都是因为数据太少导致的,冷启动是完全没有历史交互,而稀疏性是只有很少的历史交互。

    为了解决淘宝的这些挑战,我们在淘宝的技术平台中设计了一个两阶段的推荐框架。第一阶段是 matching,第二阶段是 ranking

    • matching 阶段,我们为每个用户,根据该用户的历史交互的每个 item 生成相似 item 的候选集合candidate set
    • ranking 阶段,我们训练一个深度神经网络模型,该模型根据每个用户的偏好对候选 item 进行排序。

    由于上述挑战,在这两个阶段我们都必须面对不同的独特问题different unique problems 。此外,每个阶段的目标不同,导致技术解决方案也不同。在论文 《Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba》 中,我们专注于如何解决 matching 阶段的挑战,其中核心任务是根据用户的行为计算所有 item 之间的 pairwise 相似性similarity 。在获得 itempairwise 相似性之后,我们可以生成候选 item 的集合,以便在 ranking 阶段进一步个性化。

    为了实现这一点,我们提出从用户的行为历史构建一个 item graph,然后应用 state-of-artgraph embedding 方法来学习每个 itemembedding,我们称之为Base Graph Embedding: BGE 。通过这种方式,我们可以根据从 item embedding 向量的内积计算出的相似性来生成候选 item 集合。注意,以前的工作使用 CF-based 方法来计算 item 之间的相似性,而CF-based 方法仅考虑用户行为历史中 item 的共现 co-occurrence。但是在我们的工作中,通过在 item graph 中使用随机游走,我们可以捕获 item 之间的高阶相似性。因此,我们的方法优于 CF-based 方法。

    然而,在很少交互、甚至没有交互的情况下学习 item 的精确embedding 仍然是一个挑战。为了缓解这个问题,我们提出使用辅助信息side information 来提升enhance embedding 过程,我们称之为Graph Embedding with Side information: GES。例如,属于同一类目category或同一品牌branditemembedding 空间中应该更接近。通过这种方式,我们可以在很少交互甚至没有交互的情况下获得 item 的精确 embedding

    然而,在淘宝中有数百种类型的辅助信息,如类目、品牌、价格等等。直观而言,不同的辅助信息对学习 itemembedding 应该有不同的贡献。因此,我们进一步提出了一种在学习带辅助信息的 embedding 时的加权机制,称作 Enhanced Graph Embedding with Side information: EGES

    本文主要贡献:

    • 基于淘宝多年的实践经验,我们设计了一种有效的启发式heuristic 方法,从淘宝上十亿用户的行为历史构建 item graph
    • 我们提出了三种 embedding 方法(BGE、GES、EGES )来学习淘宝中 20 亿 itemembedding。我们进行离线实验以证明 BGE、GES、EGES 和其它 embedding 方法相比的有效性。
    • 为了在淘宝中为十亿级用户和 item 部署所提出的方法,我们在我们团队搭建的 XTensorflow: XTF 平台上构建了 graph embedding system。我们表明,所提出的框架显著提高了手机淘宝App 的推荐性能,同时满足了双十一当天训练效率和 serving 的即时响应instant response 的需求。
  2. 相关工作:这里我们简要回顾 graph embedding、带辅助信息的 graph embedding、以及用于推荐的 graph embedding 的相关工作。

    • Graph Embeddinggraph embedding 算法已经作为一种通用的网络表示方法,它们已被用于很多实际 application。在过去的几年里,该领域有很多研究专注于设计新的 embedding 方法。这些方法可以分为三类:

      • LINE 等分解方法尝试近似分解邻接矩阵并保留一阶和二阶邻近性。
      • 深度学习方法增强enhance 了模型捕获图中非线性的能力。
      • 基于随机游走的技术在图上使用随机游走来获得非常有效的node representation ,因此可用于超大规模网络。

      在本文中,我们的 embedding 框架基于随机游走。

    • 带辅助信息的 Graph Embedding:上述 graph embedding 方法仅使用网络的拓扑结构,存在稀疏性和冷启动的问题。近年来,很多工作试图结合辅助信息来增强 graph embedding 方法。大多数工作基于具有相似辅助信息的节点在 embedding 空间中应该更接近的假设来构建他们的任务。为了实现这一点,《Discriminative deep random walk for network classification》《Max-margin deepwalk: Discriminative learning of network representation》 提出了一个联合框架来优化带分类器函数的 embedding 目标函数。论文 《Representation learning of knowledge graphs with hierarchical types 》 进一步将复杂的知识图谱嵌入到具有层级结构hierarchical structure (如子类目)的节点中。

      此外,也有一部分工作将节点相关的文本信息融合到 graph embedding 中。另外, 《Heterogeneous network embedding via deep architectures》 提出了一个深度学习框架来为异质 graph embedding 同时处理文本和图像特征。

      在本文中,我们主要处理淘宝中item 相关的离散辅助信息,例如类目category 、品牌brand 、价格等,并在 embedding 框架中设计了一个 hidden layer 来聚合不同类型的辅助信息。

    • 用于推荐的 Graph Embedding:推荐一直是 graph embedding 最流行的下游任务之一。有了 node representation,就可以使用各种预测模型进行推荐。

      《Personalized entity recommendation: A heterogeneous information network approach》《Meta-graph based recommendation fusion over heterogeneous information networks》 中,user embeddingitem embedding 分别在 meta-pathmeta-graph 的监督下在异质信息网络heterogeneous information network 中学习。

      • 《Personalized entity recommendation: A heterogeneous information network approach》 为推荐任务提出了一个线性模型来聚合 embedding
      • 《Meta-graph based recommendation fusion over heterogeneous information networks》 提出将分解机 factorization machine: FM 应用于embedding 以进行推荐。

      《Collaborative knowledge base embedding for recommender systems》 提出了一个联合 embedding 框架,从而为推荐任务学习 graph, text, imageembedding《Scalable graph embedding for asymmetric proximity》 提出了 graph embedding 来捕获节点推荐node recommendation 的非对称相似性asymmetric similarity

      在本文中,我们的 graph embedding 方法被集成到一个两阶段推荐平台中。因此,embedding 的性能将直接影响最终的推荐结果。

20.1 模型

  1. 我们首先介绍 graph embedding 的基础知识,然后详细说明我们如何根据用户的行为历史来构建 item graph,最后我们研究了在淘宝中学习 item embedding 的方法。

  2. Graph Embedding:这里我们概述了 graph embedding,以及最流行的一种 graph embedding 方法 :DeepWalk。我们是在 DeepWalk 的基础上提出了 matching 阶段的 graph embedding 方法。

    给定一个图 ,其中 代表节点集合、 代表边集合。graph embedding 是为每个节点 在低维空间 中学习一个低维representation ,其中 。换句话讲,我们的目标是学习一个映射函数 ,即把 中的每个节点表示为一个 维的向量。

    受到 word2vec 的启发,Perozzi 等人提出了 DeepWalk 来学习图中每个节点的 embedding。他们首先通过在图中运行随机游走来生成节点序列,然后应用 Skip-Gram 算法来学习图中每个节点的 representation。为了保持图的拓扑结构,他们需要解决以下最优化问题:

    其中:

    • 为节点 的邻居节点集合,它可以定义为节点 1-hop 或者 2-hop 节点集合。
    • 定义了在给定节点 的情况下,拥有上下文节点 的条件概率。

    接下来,我们首先介绍如何根据用户的历史行为构建 item graph,然后提出基于 DeepWalkgraph embedding 方法,从而为淘宝中的 20 亿 item 生成低维 representation

  3. 构建 Item Graph:这里,我们将详细说明从用户历史行为构建 item graph

    实际上,用户在淘宝上的行为往往是连续的,如图 (a) 所示。以往的 CF-based 方法仅考虑 item 的共现co-occurrence,而忽略了可以更准确地反映用户偏好的序列信息sequential information 。 然而,不可能使用用户的全部历史记录(来作为一个序列),有两个原因:

    • 条目 entry 太多,导致计算成本和空间成本太高。
    • 用户的兴趣会随着时间而漂移drift

    因此在实践中,我们设置了一个时间窗口,仅选择用户在窗口内的行为。这称为 session-based 用户行为。根据经验,时间窗口的大小为一个小时。例如图 (a) 中,包含用户 的一个 session、用户 的两个 session、用户 的两个session

    在我们获得 session-based 用户行为之后,如果两个 item 相连地consecutively出现,则它们通过有向边连接。如下图 (b) 所示:item Ditem A 相连,因为用户 先后陆续访问了 item Ditem A

    这种图构建方式捕获了序列关系。如果是连接 session 内的任意两个item,则捕获了共现关系。

    利用淘宝上所有用户的协同行为collaborative behaviors,我们根据所有用户行为中两个相连 item 的出现总数为每条边 分配一个权重。具体而言,边 的权重等于所有用户行为历史中 item 转移到 item 的频次。通过这种方式,构建的 item graph 可以基于淘宝中所有用户的行为来表示不同 item 之间的相似性。图 (b) 为根据图 得到的加权有向图

    在实践中,我们在抽取用户行为序列之前需要过滤掉无效数据invalid data 和异常行为abnormal behaviors,从而消除噪声。目前,以下行为在我们的系统中被视为噪声:

    • 如果点击之后停留的时间少于一秒钟,那么点击可能是无意的,则需要移除。
    • 淘宝上有一些 “过度活跃” 的用户,他们实际上是作弊用户spam users。根据我们在淘宝上的长期观察,如果单个用户在不到三个月内,总购买数量大于 1000 或者总点击数量大于 3500,则该用户很可能是作弊用户。我们需要过滤掉这些用户的行为。
    • 淘宝的零售商不断地更新商品的详细信息。在极端情况下,一个商品在经过长时间的更新之后,在淘宝上可能变成完全不同的商品,即使它们具有相同的商品id。因此,我们删除了这些 id 相关的 item(即更新前后,该id 代表了完全不同的商品)。
  4. Base Graph Embedding: BGE:在得到有向加权图(记作 )之后,我们采用 DeepWalk 来学习每个节点在 中的 embedding

    表示 的邻接矩阵, 表示从节点 指向节点 的边的权重。我们首先基于随机游走生成节点序列,然后对节点序列运行 Skip-Gram 算法。随机游走的转移概率定义为:

    其中 outlink 邻居的集合,即 的出边 outedge 指向的节点集合。

    通过运行随机游走,我们可以生成许多序列,如下图 (c) 所示。然后我们应用 Skip-Gram 算法(如图 (d) 所示)来学习节点 embedding,从而最大化随机游走序列中两个节点的共现概率occurrence probability 。这导致了以下的最优化问题:

    其中 是随机游走序列中上下文节点的窗口大小。

    使用独立性假设,我们有:

    其中:

    应用负采样技术,则最优化问题可以转化为:

    其中: 表示节点 的负样本集合, sigmoid 函数。根据经验,负样本规模越大则最终结果越好。

  5. Graph Embedding with Side information: GES:通过应用上述 embedding 方法,我们可以学习淘宝中所有itemembedding,从而捕获用户行为序列中的高阶相似性。而这种高阶相似性在以前的 CF-based 方法中被忽略。然而,学习 “冷启动” item (即那些没有用户交互的 item)的accurate embedding 仍然具有挑战性。

    为了解决冷启动问题,我们提出使用附加到冷启动item 的辅助信息side information 来增强enhance BGE。在电商推荐系统的上下文中,辅助信息指的是item 的类目category、门店shop、价格price 等信息,这些信息在ranking 阶段被广泛用作关键特征,但是在matching 阶段很少使用。我们可以通过在 graph embedding 中融合辅助信息来缓解冷启动问题。例如,优衣库(相同门店)的两件帽衫(相同类目)可能看起来很像;喜欢尼康镜头的用户也可能对佳能相机(相似类目、相似品牌)感兴趣。这意味着具有相似辅助信息的 item 应该在 embedding 空间中更接近。基于这个假设,我们提出了如下图所示的 GES 方法。

    我们使用 来表示 item 或辅助信息的 embedding 矩阵,具体而言:

    • 表示item embedding 矩阵。
    • 表示第 种类型辅助信息的 embedding 矩阵,一共有 种类型的辅助信息。

    其中 embedding 维度。注意,item embedding 维度和辅助信息 embedding 维度都设为相同的值。

    为了融合辅助信息,我们将item embedding 向量拼接起来,并用均值池化来来聚合item 相关的所有 embedding,即:

    其中: item 聚合后的 embedding 的第 行,表示item item embedding 向量或者第 类辅助信息的 embedding 向量。所有节点聚合后的 embedding 构成了embedding 矩阵

    graph embedding 矩阵,它是通过 DeepWalk 算法得到。但是这里辅助信息 embedding 矩阵 如何得到?论文并未给出明确的回答。

    通过这种方式,我们融合了辅助信息,使得具有相似辅助信息的itemembedding 空间中更为接近。这使得冷启动 itemembedding 更为准确accurate,并提高了离线和在线性能。

    下图为GESEGES 的总体架构。SI 表示辅助信息side informationSI 0 表示 item 本身。

    • Sparse Features 往往是 item ID 以及不同 SIone-hot 向量。
    • Dense Embeddingsitem 和相应 SIrepresentation
    • Hidden Representation 是一个 item 及其相应 SIembedding 聚合结果。

  6. Enhanced Graph Embedding with Side information: EGES:尽管 GES 的性能有所提升,但是在 embedding 过程中融合不同类型的辅助信息时仍然存在问题。在 GES 中,我们假设不同类型的辅助信息对于最终 embedding 的贡献相等,这不符合现实。例如:购买了 iPhone 的用户会因为 Apple 这个品牌而倾向于查看 MacbookiPad;用户可能在同一家门店购买不同品牌的衣服,因为比较方便convenience而且价格更低(因为可能存在折扣)。因此,不同类型的辅助信息对用户行为中 item 共现co-occurrence 的贡献不同。

    为了解决这个问题,我们提出了 EGES 方法来聚合不同类型的辅助信息。EGES 框架和 GES 相同,它的基本思想是:不同类型的辅助信息在它们的 embedding 被聚合时有不同的贡献。因此,我们提出一个加权均值池化层来聚合辅助信息的 embedding

    定义一个加权的权重矩阵 ,其中 表示在第 item 中,第 种类型辅助信息的加权系数。

    • (即 的第一列)表示item embedding 自己的权重。 表示 item item embedding 权重。
    • (即 的第 列)表示第 种辅助信息的权重。 表示 item 的第 种辅助信息的权重。

    注意:这里对不同的节点设置个性化的权重分布,而不是采用统一的权重分布。考虑到 embedding 参数数量为 ,因此权重矩阵的参数规模是 embedding 参数的

    那么加权均值聚合的结果为:

    这里我们使用 函数的原因是为了确保辅助信息的权重大于零。

    给定节点 以及上下文节点 ,令 为上下文节点 embedding。令 label(如是否点击),则 EGES 的目标函数为:

    我们基于梯度下降法来求解最优化问题,其梯度为:

    对于冷启动 item,虽然 item embedding 未知,但是辅助信息 embedding 可以获取。

  7. EGES 框架算法:

    • 输入:

      • 辅助信息
      • 每个节点作为起始点的随机游走数量
      • 随机游走序列长度
      • Skip-Gram 窗口大小
      • 负样本数量
      • embedding 维度
    • 输出:

      • item embedding 矩阵和辅助信息 embedding 矩阵
      • 权重矩阵
    • 算法步骤:

      • 初始化

      • 迭代 ,迭代步骤为:

        迭代 ,迭代步骤为:

        • 通过随机游走得到序列: 。随机游走概率由 决定。
        • 执行加权 SkipGram 算法:
      • 返回

  8. 加权 Skip-Gram 算法:

    • 输入:

      • Skip-Gram 窗口大小
      • 负样本数量
      • 随机游走序列长度
      • 随机游走序列 SEQ
    • 输出:更新后的

    • 算法步骤:

      迭代, ,迭代步骤为:

      为当前节点。遍历窗口,,迭代步骤为:

      • 正样本梯度更新(label = 1):

        • 更新

        • 迭代,,更新:

      • 负样本梯度更新(label = 0), ,迭代过程为:

        • 中负采样出顶点

        • 更新

        • 迭代,,更新:

     

  9. 未来方向:

    • 首先是在 graph embedding 方法中利用 attention 机制,这可以提供更大的灵活性来学习不同类型辅助信息的权重。
    • 其次是将文本信息纳入到我们的方法中,从而利用淘宝 item 中大量的评论信息。

20.2 系统部署

  1. 这里我们介绍我们的 graph embedding 方法在淘宝中的实现和部署。我们首先对支撑淘宝的整个推荐平台进行 high-level 的介绍,然后详细说明与我们 embedding 方法相关的模块。

  2. 下图给出了淘宝推荐平台的架构。该平台由两个子系统组成:onlineoffline

    • 在线子系统主要组件component 是淘宝个性化平台 Taobao Personality Platform: TPP 和排序服务平台 Ranking Service Platform: RSP 。典型的工作流程如下图所示:

      • 当用户打开手机淘宝App 时,TPP 抽取用户的最新信息并从离线子系统中检索一组候选 item,然后将候选 item 馈送到 RSP
      • RSP 使用微调的DNN 模型对候选 item 集合进行排序,并将排序结果返回给 TPP
      • 用户在淘宝的访问行为被收集并保存为离线子系统的日志数据。
    • 实现和部署 graph embedding 方法的离线子系统的工作流如下所示:

      • 包含用户行为的日志被检索。item graph 是基于用户的行为构建的。在实践中,我们选择最近三个月的日志。

        在生成 session-based 用户行为序列之前,我们会对数据执行反作弊处理 anti-spam processing 。 剩余的日志包含大约 6000 亿条,然后根据前面所述方法构建 item graph

      • 为了运行我们的 graph embedding 方法,我们采用了以下的解决方案:

        • 将整个graph 拆分为多个子图,这些子图可以在淘宝的 Open Data Processing Service: ODPS 分布式平台中并行处理。每个子图中大约有 5000 万个节点。
        • 为了在图中生成随机游走序列,我们在 ODPS 中使用我们基于迭代iteration-based 的分布式 graph framework 。随机游走生成的序列总量为 1500 亿左右。
      • 为了实现所提出的 embedding 算法,我们的 XTF 平台使用了 100GPU。在部署的平台上,离线子系统中的所有模块(包括日志检索、反作弊处理、item graph 构建、随机游走序列生成、embeddingitem-to-item 相似度计算)都可以在不到六个小时内处理完毕。因此,我们的推荐服务可以在很短的时间内响应用户的最新行为。

20.3 实验

  1. 这里我们进行了大量的实验来证明我们提出的方法的有效性。

    首先,我们通过链接预测任务对这些方法进行离线评估。然后,我们在手机淘宝 App 上报告在线实验结果。最后,我们展示了一些真实案例,从而在淘宝上深入洞察我们提出的方法。

20.3.1 离线评估

  1. 链接预测Link Prediction:链接预测任务用于离线实验,因为它是graph 中的一个基础问题fundamental problem

    给定一个去掉了某些边的graph,链接预测任务是预测链接的出现。我们随机选择 1/3 的边作为测试集中的 ground truth 并从graph 中移除,剩余的 graph 作为训练集。我们随机选择未链接的节点 pair 对作为负样本并加入到测试集,负样本数量和 ground truth 数量相等。为了评估链接预测的性能,我们选择 AUC 作为评估指标。

  2. 数据集:我们选择使用两个数据集进行链接预测任务,它们包含不同类型的辅助信息。

    • Amazon 数据集:来自 Amazon Electronics 的数据集。item graph 通过 “共同购买 co-purchasing “ 关系(在提供的数据中表示为 also_bought)来构建,并使用了三种类型的辅助信息:类目、子类目、品牌。
    • Taobao数据集:来自手机淘宝 App 的数据集。 item graph 根据前述方法来构建。需要注意的是,为了效率和效果,Taobao数据集使用了十二种类型的辅助信息,包括:商家retailer 、品牌、购买力水平purchase level、年龄、性别、款式style 等等。根据多年在淘宝的实践经验,这些类型的辅助信息已经被证明是有用的。

    这两个数据集的统计信息如下表所示(#SI 表示辅助信息数量)。我们可以看到这两个数据集的稀疏性都大于 99%

  3. baseline 方法:我们对比了四种方法:BGELINEGESEGES

    • LINE 捕获了 graph embedding 中的一阶邻近性和二阶邻近性。我们使用作者提供的实现,并使用一阶邻近性和二阶邻近性运行它,结果分别表示为 LINE(1st)LINE(2nd)
    • 我们实现了所提出的 BGEGESEGES 等三种方法。
  4. 配置:

    • 所有方法的 embedding 维度均设为 160
    • 对于我们的 BGE/GES/EGES,随机游走的长度为 10,每个节点开始的游走次数为 20,上下文窗口大小为 5
  5. 实验结果如下表所示,括号中的百分数是相对于 BGE 的提升比例。可以看到:

    • GESEGES 在两个数据集上的 AUC 都优于 BGELINE(1st)LINE(2st)。这证明了所提出方法的有效性。换句话讲,稀疏性问题通过结合辅助信息得到了缓解。

      比较两个数据集上的提升,我们可以看到Taobao 数据集上的提升更为显著。我们将此归因于Taobao 数据集上使用的大量有效且信息丰富的辅助信息。

    • 当在 GESEGES 之间比较,我们可以看到 Amazon 数据集上的性能提升比 Taobao 数据集更大。可能是因为 TaobaoGES 的表现已经很不错了,即 0.97。因此 EGES 的改善并不突出。而在 Amazon 数据集上,EGES 显著优于 GES

    基于这些结果,我们可以观察到融合辅助信息对于 graph embedding 非常有用,并且可以通过对各种辅助信息的 embedding 进行加权聚合来进一步提高准确性accuracy

20.3.2 在线评估

  1. 我们在 A/B test 框架中进行在线实验,实验目标是手机淘宝 App 首页的点击率 Click-Through-Rate: CTR

    我们实现了上面的 graph embedding 方法,然后为每个item 生成一些相似的 item 作为候选推荐。淘宝首页的最终推荐结果由基于dnn 模型的 ranking 引擎生成。在实验中,我们在 ranking 阶段使用相同的方法对候选 item 进行排序。如前所述,相似item 的质量直接影响了推荐结果。因此,推荐性能(即CTR)可以代表不同方法在 matching 阶段的有效性。

    我们将这四种方法部署在一个 A/B test 框架中,201711 月连续7 天的实验结果如下图所示。其中,Base 代表一种 item-based CF 方法,在部署 graph embedding 方法之前已经在淘宝内部广泛使用。Base 方法根据 item 共现 co-occurrence 和用户投票权重计算两个item 之间的相似度,并且相似度函数经过精心调优从而适合淘宝的业务。

    可以看到:

    • EGESGESCTR 方面始终优于 BGEBase,这证明了在 graph embedding 中融合辅助信息的有效性。
    • 此外,BaseCTR 优于 BGE。这意味着经过精心调优的 CF-based 方法可以击败简单的 embedding 方法,因为在Base 方法中已经利用了大量人工设计的启发式策略。
    • EGES 始终优于 GES,这和离线实验结果相一致。这进一步证明了辅助信息的加权聚合优于平均聚合。

20.3.3 案例研究

  1. 这里我们展示了淘宝中的一些真实案例来说明我们方法的有效性。这些案例从三个方面来研究:EGES embedding 的可视化、冷启动itemEGES 中的加权权重。

  2. embedding 可视化:我们通过 tensorflow 提供的可视化工具,将 EGES 学到的 item embedding 可视化,结果如下图所示。下图为一组随机选择的运动鞋的embedding 的可视化,item embedding 通过 PCA 投影到二维平面中,其中不同颜色代表不同的类目。

    • 从图 (a) 中,我们可以看到不同类目的鞋子在不同的 cluster 中。这里一种颜色代表一类鞋子,例如羽毛球鞋、乒乓球鞋、足球鞋。

      这证明了融合辅助信息来学习 emebdding 的有效性,即具有相似辅助信息的 item 应该在 embedding 空间中更接近。

    • 从图 (b) 中,我们进一步分析了羽毛球鞋、乒乓球鞋、足球鞋三种鞋子的 embedding。我们观察到一个有趣的现象:羽毛球鞋和乒乓球鞋的 embedding 距离更接近、和足球鞋的 embedding 距离更远。

      这一现象可以解释为:在中国,喜欢乒乓球的人和喜欢羽毛球的人有很多重叠。然而喜欢足球的人和喜欢室内运动(如乒乓球、羽毛球)的人,有很大的不同。从这个意义上讲,向看过乒乓球鞋的人推荐羽毛球鞋,要比推荐足球鞋要好得多。

  3. 冷启动 item:对于淘宝中的新item,无法从 item graph 中学习到 embedding,并且之前CF-based 的方法也无法处理冷启动item。因此,我们利用新item 的辅助信息的平均 embedding 来表示一个冷启动 item。然后我们根据item embedding 的内积从所有 item 中检索和冷启动 item 最相似的 item

    结果如下图所示,我们给出了冷启动itemtop 4 相似item。在图中,我们为每个相似 item 标注了与冷启动item 相关的辅助信息的类型,其中 cat 意思是 category

    可以看到:

    • 尽管缺少用户对冷启动 item 的行为,但是可以利用不同的辅助信息来有效地学习它们embedding(就 top 相似 item 的质量而言)。
    • item 的门店shop 对于衡量两个item 的相似性非常有用,这也和下面介绍的辅助信息的权重保持一致。

  4. 辅助信息权重:我们将item 的不同类型辅助信息的权重可视化。我们选择了不同类目的 8item,并从学到的权重矩阵 中提取与这些 item 相关的所有辅助信息的权重。结果如下图所示,其中每一行记录一个 item 的权重结果。

    有几点值得注意:

    • 不同 item 的权重分布不同,这和我们的假设相一致,即不同的辅助信息对最终 representation 的贡献不同。
    • 在所有 item 中,代表 item 本身 embedding"Item" 权重始终大于所有其它辅助信息的权重。这证实了一种直觉,即 item embedding 本身仍然是用户行为的主要来源,而辅助信息为推断用户行为提供了额外的提示。
    • 除了 "Item" 之外,"Shop" 的权重始终大于其它辅助信息的权重。这和淘宝中的用户行为一致,即用户倾向于在同一家店铺购买item,这是为了便利性 convenience和更低的价格(即店铺的折扣)。

二十一、SDM[2019](Matching 阶段)

  1. 工业级大规模推荐系统需要能够准确预测用户的偏好,并快速响应用户当前的需求。淘宝是中国最大的电商网站,支持数十亿的 item 和用户。系统首先为用户检索一组候选 item,然后应用 ranking 模块生成最终推荐。在这个过程中, matching 模块检索到的候选 item 的质量在整个系统中起着关键作用。

    目前,淘宝上部署的 matching 模型主要基于 item-based CF 方法。然而,这些方法对静态的 user-item 交互进行建模,并且无法很好地捕获用户整个行为序列中的动态变换dynamic transformation。因此,这类方法通常会导致同质推荐homogeneous recommendation 。为了准确了解用户的兴趣interest 和偏好preference,应该将序列的顺序信息sequential order information 融入matching 模块。

    在论文 《SDM: Sequential Deep Matching Model for Online Large-scale Recommender System》 中,我们通过在 matching 阶段引入深度序列推荐模型deep sequential recommendation model (而不是item-based CF 模型)来考虑用户兴趣的动态演变 dynamic evolution

    当人们开始在淘宝上使用网上购物服务时,他们的行为会累积成相对较长的行为序列。行为序列由 session 组成,而session 是在给定时间范围内发生的用户行为列表。用户通常在一个 session 中具有明确的独特unique 购物需求。而当用户开始新 session 时,用户的兴趣可能会发生急剧变化。直接对序列建模而忽略这种内在的 session 结构会损害性能。因此,我们将用户最近的交互 session 称为短期行为 short-term behaviors ,将历史的其它session 称为长期行为long-term behaviors。我们对这两部分分别建模,从而编码短期行为和长期行为的固有信息inherent information ,这些信息可用于表示用户的不同兴趣level 。我们的目标是在用户行为序列之后召回 top Nitem 作为matching 候选。

    • 在短期session 建模方面,基于循环神经网络 RNN 的方法在 session-based 推荐中表现出有效的性能。此外,人们进一步提出了注意力模型attention model ,强调了短期session 中最近一次点击的主要目的和效果,从而避免了由于用户的随机行为引起的兴趣转移interest shift

      然而,他们忽略了用户在一个 session 中有多个兴趣点。我们观察到用户关心item 的多个方面,如类目category、品牌brand、颜色、款式style 和店铺声誉reputation 等等。在对最喜欢的 item 做出最终决定之前,用户会反复比较很多 item 。因此,使用单个 dot-product 注意力 representation 无法反映在不同购买时间发生的多样的 diverse 兴趣。相反,首先为机器翻译任务提出的multi-head attention 允许模型共同关注不同位置的多重的不同信息。多头结构multi-head structure 通过代表不同视角views 的偏好来自然地解决多重兴趣 multiple interests 的问题。因此,我们提出了我们的多兴趣模块multi-interest module ,从而使用 multi-head attention 来增强 RNN-based 的序列推荐器sequential recommender 。同时,有了这种 self-attention,我们的模块可以通过过滤掉偶然发生的点击来表达准确的用户偏好。

    • 用户的长期偏好总是会影响当前的决策。直观地,如果用户是 NBA 篮球迷,那么用户可能会查看/点击和 NBA 球星相关的大量的 item 。当用户现在选择买鞋时,NBA 明星的球鞋会比普通球鞋更吸引用户。因此,同时考虑长期偏好long-term preferences 和短期行为short-term behaviors 至关重要。

      已有文献将当前短期 session 和长期偏好简单地组合。然而,在现实世界的应用中,用户的购物需求是多种多样且丰富的,他们的长期行为也是复杂和多样的。和 NBA 球星相关的东西仅占长期行为的很少一部分。与当前短期session 相关的长期用户偏好无法在整体长期行为representation 中突出显示,应该保留长期行为representation 中与短期session 相关的信息。

    在我们的 matching 模型中,我们设计了一个门控融合模块gated fusion module 来合并全局(长期)和局部(短期)偏好特征。门控融合模块的输入是用户画像 embedding、长期representation 向量、短期 representation 向量。然后学习门控向量gate vector 来控制 LSTM 中不同gate 的融合行为fusion behaviors ,以便模型可以精确地捕获兴趣相关性以及用户对长期兴趣/短期兴趣的attention

    • 一方面,长期representation 向量中和短期session 最相关的信息和短期 representation 向量融合。
    • 另一方面,用户可以更准确地关注长期兴趣/短期兴趣。

    和标量权重的 attention-like 模型不同,门控向量在我们的超复杂神经网络中具有更强大的决策表示能力。

    本文主要贡献:

    • 我们通过考察短期short-term行为和长期long-term 行为,为现实世界应用中的大规模推荐系统开发了一种新颖的序列深度匹配sequential deep matching: SDM 模型。我们对短期行为和长期行为分别建模,代表不同 level 的用户兴趣。

    • 我们提出通过 multi-head self-attention 模块对短期session 行为进行建模,从而编码和捕获多种兴趣倾向interest tendencies

      门控融合模块用于有效结合长期偏好和当前购物需求,从而结合它们的相关信息而不是简单的组合。

    • 我们的 SDM 模型在现实世界中的两个离线数据集上进行了评估,表明优于其它 state-of-the-art 方法。为了证明 SDM 在工业应用中的可扩展性,我们成功地将它部署在淘宝推荐系统的生产环境中。自 201812 月份以来,SDM 模型一直在线有效运行。和以前的在线系统相比,SDM 取得了显著的提升。

  2. SDM 主要解决了现实世界应用中的以下两个固有问题:

    • 在一个 session 中可能存在多个兴趣倾向interest tendencies
    • 长期偏好可能无法和当前session 兴趣有效融合。
  3. 相关工作:

    • 工业中的Deep Matching :为了在工业推荐系统中开发更有效的 matching 模型,许多研究人员采用具有强大表达能力的深度神经网络。

      • 基于矩阵分解 Matrix Factorization: MF 的模型尝试将 pairwiseuser-item 隐式反馈分解为 user vectoritem vector

      • YouTubeDNN 使用深度神经网络来学习 user embeddingitem embedding。这两种 embedding 分别从它们对应的特征来生成。预测相当于在所有 item 中搜索 user vector 的最近邻。

      • 此外,《Learning Tree-based Deep Model for Recommender Systems》 提出了一种新颖的 tree-based 的大规模推荐系统,它可以提供新颖的item 并克服向量搜索的计算障碍。

      • 最近,基于 graph embedding 的方法被应用于许多工业应用中,从而补充或替代传统的方法。

        • 《Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba》 提出从用户的历史行为构建一个 item graph,然后应用 state-of-the-artgraph embedding 方法来学习每个 itemembedding。为了解决冷启动和数据稀疏问题,他们结合了 item 的辅助信息来增强 embedding 过程。
        • 《Graph Convolutional Neural Networks for Web-Scale Recommender Systems》Pinterest 上开发并部署了一个有效effective 且高效efficient 的图卷积网络,从而生成包含图结构和节点特征信息的 node embedding

      但是这些模型无法很好地考虑用户偏好的动态和演变。在这项工作中,我们通过引入序列推荐sequential recommendation 从而在 matching 阶段考虑这一点。

    • 序列感知推荐:序列推荐旨在对用户的偏好进行建模,并以序列方式从观察到的动作中预测用户的未来动作,例如 next click 或者 next purchase

      早先,FPMCHRM 通过联合矩阵分解和马尔科夫链对序列中相邻 item 之间的局部序列行为进行建模。最近,深度神经网络为推荐系统带来了强大的表达和泛化能力。

      • 《Session-based recommendations with recurrent neural networks》 首先应用 GRU 根据用户当前的短期会话进行推荐。
      • 之后,《Neural attentive session-based recommendation》 利用注意力机制提取用户的主要意图,特别是对于较长的会话,并取得了更好的结果。
      • 《STAMP: short-term attention/memory priority model for session-based recommendation》 随后创建了一个新的短期注意力优先 attention priority 模型而不是 RNN,然后指出会话中最近一次点击的重要性。
      • 除了 RNN 之外,《Personalized top-n sequential recommendation via convolutional sequence embedding》《A Simple Convolutional Generative Network for Next Item Recommendation》 提出了卷积序列 embedding 推荐模型作为解决方案。
      • 《Self-attentive sequential recommendation》《Next item recommendation with self-attention》 使用 self-attention 架构来编码用户的动作历史。
      • 《Towards Neural Mixture Recommender for Long Range Dependent User Sequences》 构建了一个 M3 模型,该模型可以通过门控机制组合上述不同方法。

      但是这些方法忽略了单次会话中的多样的兴趣。

      • 《Sequential recommendation with user memory networks》memory 机制引入序列推荐模型,该系统设计了一个用户记忆增强神经网络 memory-augmented neural network: MANN 来表达 feature-level 兴趣。
      • 对于更细粒度的用户偏好,《Taxonomy-aware multi-hop reasoning networks for sequential recommendation》《Improving sequential recommendation with knowledge-enhanced memory networks》 使用知识库信息来增强 key-value 记忆网络的语义表示semantic representation ,称作知识增强序列推荐器knowledge enhanced sequential recommender

      然而,这些方法的的额外存储、手动特征设计、memory network 的计算量,由于用户和 item 的规模巨大,因此在工业界是不被接受的。

      考虑用户长期稳定的偏好也很重要。

      • 《Learning from history and present: next-item recommendation via discriminatively exploiting user behaviors》 通过拼接用户的会话行为 representation 以及历史购买行为的稳定偏好,从而提出了 BINN 模型。
      • 《Sequential Recommender System based on Hierarchical Attention Networks》 提出了一种新颖的两层分层注意力网络来推荐用户可能感兴趣的 next item
      • 《A Long-Short Demands-Aware Model for Next-Item Recommendation》 使用多时间尺度来表达长短期需求,并将它们融合到一个层级结构中。

      另一个统一通用兴趣和序列兴趣的例子是Recurrent Collaborative Filtering《Recurrent Collaborative Filtering for Unifying General and Sequential Recommender》),它在多任务学习框架中结合了 RNN 序列模型和矩阵分解方法。《PLASTIC: Prioritize Long and Short-term Information in Top-n Recommendation using Adversarial Training》 通过对抗训练做了同样的组合。

      简单的组合不足以融合长短期偏好,而多任务和对抗性方法不适用于工业应用。在本文中,我们提出了多头自注意力multi-head self-attention 来捕获短期会话行为中的多个用户兴趣,并使用门控机制在现实世界的 application 中有效且高效地结合长期偏好。

21.1 模型

  1. 为用户集合,item 集合。我们的模型考虑用户 是否会在时刻 item 交互。

  2. 对于用户 ,我们可以通过行为发生时间的升序排序来获取用户的 latest session

    受到 session-based 推荐的启发,我们重新制定了 session 的生成规则:

    • 后端系统记录的、具有相同 session ID 的交互属于同一个 session
    • 时间间隔小于 10 分钟(或者更长,这取决于具体场景)的相邻交互也合并为一个 session
    • session 的最大长度设置为 50,即 session 长度超过 50 时将开始新的 session

    用户 latest session 为最近的那个 session,被视为短期行为,即: ,其中 为序列长度。用户 的长期行为 long-term behaviors 是过去 7 天的、发生在 之前的行为,记作

    我们的推荐任务是:给定用户 的短期行为 和长期行为 ,我们需要为用户推荐 item

21.1.1 总体架构

  1. SDM 的通用网络结构如下图所示。主要由三部分组成:用户预测网络user prediction network、训练 training、在线服务 online serving

  2. 用户预测网络user prediction network

    • 网络以短期行为 和长期行为 作为输入。
    • 被编码为时刻 的短期行为representation 被编码为长期的行为representation
    • 这两种representation 通过门控神经网络gated neural network 组合,从而得到用户行为向量 user behavior vector 。 其中 embedding size
    • 网络的目标是预测下一个交互item

    为所有 item embedding 组成的 item embedding 矩阵,第 item embedding 向量。我们通过内积来计算用户 在时刻 item 交互的可能性(非归一化的):

    然后我们通过 softmax 进行归一化:

  3. 训练 training:在训练过程中,时刻 positive label 是下一个交互 item 。考虑到实际应用中的大量 item,我们采用对数均匀采样器log-uniform sampler 中采样negative labels(不包括 )。然后由 softmax layer 生成预测类别概率。这称作 sampled-softmax

    我们应用交叉熵损失函数:

    其中:

    • 的采样子集,包括 positive labelnegative labels
    • 分别代表 与每个 的内积。
    • 是每个采样item 的预估概率分布。
    • item 的真实概率分布。当 item postive label ,当 item negative label
  4. 在线服务online serving :我们将模型部署在我们的在线推荐系统上。item embedding 矩阵 被导入到一个高效的 K-Nearest-Neighborhood: KNN 相似性similarity 搜索系统。同时,用户预测网络部署在机器学习的高性能实时推断inference 系统上。这种架构遵循 YouTube 的视频推荐。

    当用户使用我们的在线服务时,用户会和很多item 进行交互,用户对item 的反馈将被后端系统记录下来。这些反馈信息将被处理,然后作为用户的行为日志存储在数据库中。从海量日志中抽取的有用信息将被构造为我们模型所需的结构化数据。

    在时刻 ,用户的历史行为(短期行为 和长期行为 )被输入到推断系统中,然后生成用户行为向量 KNN 搜索系统根据内积检索最相似的 item,然后推荐 top-Nitem

21.1.2 用户预测网络

  1. 这里我们详细说明如何在用户预测网络中编码 ,以及如何融合这两种 representation,如下图所示。

    • 每个 被嵌入到一个向量 中,然后通过 LSTMmulti-head self-attention 、以及 attention 网络得到短期行为 representation

    • 长期行为基于各种辅助信息(包括 item id)来描述,即 item ID)、一级类目 ()、叶子类目()、品牌()、店铺()。然后通过 attention 网络和稠密的全连接网络进行编码,从而得到长期行为 representation

      长期行为 attention 网络分别针对各个辅助信息进行,而不是针对 item 进行。这可以分别捕获用户对不同辅助信息的偏好,而不是捕获用户对一组辅助信息的偏好。前者的模型容量更小、后者的模型容量更大。

    • 通过门向量 来融合到fused into 用户行为向量

    • 是用户画像 embedding ,它参与了短期行为中的 attention 网络、以及长期行为中的attention 网络。

    LSTM 之后再接入 AttnNet ,此时的输出已经没有序列信息了(加权聚合)。因此,是否移除 LSTM 的效果会更好?这个可以通过实验来解决。

    这里用户 representation 作为 AttnNetquery,并且没有拼接到最终的 representation。这个框架以 item 为中心来设计。

    长期行为 attention 网络采用“先对辅助信息序列计算 AttnNet、再对结果进行 Dense ” 的方式,也可以 “先对辅助信息进行 Dense、再对结果计算 AttnNet”的方式。具体哪个更好?可以通过实验来解决。

    实验部分提到:可以用 next N item 作为 N 个正样本。这种方式可以增加正样本数量从而提高模型效果。

    fusion gate 采用向量化的输出,得到 element-wise 的加权权重。这比标量的权重粒度更细,效果更好。

  2. 带辅助信息的 Input Embedding:在淘宝的推荐场景中,用户不仅关注特定item 本身,还关注品牌、店铺、价格等。比如,有些人倾向于购买特定品牌的item,另一些人倾向于购买来自他们信任店铺的 item。此外,由于大规模 item 造成的稀疏性,仅通过 item ID 的特征级别feature levelitem 进行编码远远不能令人满意。因此,我们从不同的特征尺度feature scales 描述一个 item,即item ID、叶子类目、一级类目、品牌、店铺,这些称作辅助信息side information 集合

    每个输入item 表示为一个由 embedding layer 转换的稠密向量 ,以便它们可以直接馈入深度神经网络:

    其中:item 的特征 embeddingembedding size 为特征 的变换矩阵;one-hot 向量。

    类似地,用户画像可以从不同的特征尺寸feature scales 来描述用户 ,如年龄、性别、life stage 。用户 的用户画像输入表示为一个稠密向量

    其中: 为用户画像特征集合, 为特征 embedding 向量。

  3. Recurrent Layer:给定用户 embedding 短期行为序列 ,为了捕获和表征短期序列数据中的全局时间依赖性,遵从 session-based 推荐,我们应用 LSTM 网络作为循环单元 recurrent cell 。在时刻 LSTM 的短期行为序列编码为一个hidden output vector ,我们称之为序列偏好 representation。我们将 传递给注意力网络以获得更高阶的表示。

  4. 注意力机制:在网购的场景下,用户通常会交替浏览一些不相关的 item,这种情况称作偶然点击causal clicks。不相关的动作会以某种方式影响序列中 representation 。我们使用 self-attention 网络来减少那些无关动作的影响。

    此外,attention 网络可以通过为每个部分分配不同的权重得分,从而将各种向量聚合为一个整体的表示presentation

    • multi-head self-attention:用户可能有多个兴趣点。例如,当你在浏览一条裙子时,颜色和新颖的款式都是做决定的关键因素。单个注意力网络自然不足以捕获多个方面的 representationmulti-head attention 允许模型共同关注jointly attend 来自不同位置的不同 representation 子空间的信息,并且可以从兴趣的多个视图multiple views 建模用户偏好

      LSTM hidden outputmulti-head self-attention的输出记作 ,则有:

      其中:

      • 表示输出层线性变换的权重矩阵, 表示 head 数量,每个head 的维度为

      • 每个 表示单个潜在兴趣:

        其中 分别表示第 headquery,key,value 的映射矩阵。

    • user attention:对于不同的用户,他们通常甚至对相同的 item 集合表现出不同的偏好。因此,在 self-attention 网络之后,我们添加了一个用户注意力模块user attention module 来挖掘更细粒度的个性化信息,其中 作为 query 向量。

      因此,时刻 的短期行为representation 计算为:

  5. 长期行为融合:从长期视角来看,用户一般会在各个维度上积累了不同层次level 的兴趣。用户可能经常访问一组相似的店铺并重复购买属于同一个类目的item 。因此,我们还从不同的特征尺度 feature scales 对长期行为 进行编码。

    由多个子集组成:item ID )、(一级类目)、(叶子类目)、(品牌)、(店铺) 。例如, 包含用户 过去一周内互动过的店铺。考虑到在线环境下的快速响应,每个子集中的条目entry 通过attention-based 池化嵌入并聚合到一个整体向量overall vector 中。

    每个 转换成稠密向量 (它和 共享相同的特征变换矩阵)。然后我们使用用户画像 embedding 作为 query 向量来计算 attention score,并且获得 representation 为:

    然后我们拼接 、馈入到全连接神经网络,从而得到用户的长期行为 representation

    注意:短期行为使用序列建模,长期行为使用 attention 建模。二者使用相同的特征转换矩阵,但是短期行为建模使用不同特征尺度 embedding 的拼接作为 itemrepresentation,而长期行为建模直接对每个特征尺度的 embedding 来进行。

    为了结合长期行为和短期行为,我们精心设计了一个以 作为输入的门控神经网络gated neural network。门向量gate vector 用于决定在时刻 ,短期行为和长期行为的贡献比例:

    最终的用户行为向量 为:

    其中 为逐元素乘积。

21.2 实验

  1. 数据集:我们构建了一个 offline-onlinetrain/validation/test 框架来开发我们的模型。我们的代码和离线数据集可以从 https://github.com/alicogintel/SDM 获取。

    • 离线数据集:模型在两个离线的现实世界电商数据集上进行评估:一个是手机淘宝 App 在线系统的日常日志中采样的大型数据集,另一个来自 JD

      • Taobao 离线数据集:我们随机选择在 201812 月连续 8 天内交互超过 40item 的活跃用户。此外,我们过滤交互超过 1000item 的用户。我们认为这些用户是作弊用户spam user。然后我们收集这些过滤后的活跃用户的历史交互数据,其中前 7 天用于训练,第 8 天用于测试。

        我们过滤掉数据集中出现次数少于 5 次的 itemsession 分割遵循前述的规则,并且每个 的最大长度限制为 20

        在训练阶段,我们移除长度小于 2session

        在测试阶段,我们在第 8 天选择了大约 1 万个活跃用户以便快速评估。这些用户在第 8 天的 top 25% 短期session 会被输入模型,剩余的交互是 ground truth

        此外,用户可能会在一天内多次浏览某些 item,我们不鼓励重复推荐,因此我们在用户的测试数据中仅保留这些 item 一次。

      • JD 离线数据集:由于这个数据集比较稀疏和较小,我们选择了三周的 user-item 交互日志进行训练,第四周的交互日志进行测试。数据构建和清洗过程和 Taobao 相同。

    • 在线数据集:我们选择效果最好的离线模型部署在淘宝的生产环境上。训练数据来自手机淘宝 App 最近 7 天的、没有采样的 user-item 交互日志。数据清洗过程和离线训练数据集相同。

      在线的用户和 item 规模扩大到亿级,可以覆盖淘宝最活跃的 item,并且使用更多的长期行为。在线模型以及相应的 item 特征和用户特征天级更新。

    这些数据集的统计特征如下表所示。

  2. 评估指标:

    • 离线评估指标:为了评估不同方法的离线有效性,我们使用了HitRate@KPrecision@KRecall@KF1@K 等指标。

      • HitRate@K 表示测试集 ground truthtop K 推荐列表中的命中率,定义为:

        在我们的实验中,我们使用

      • 令用户 召回的候选 item 集合为 (其中 ) ,而用户 ground truth 集合为

        Precision@K 反映了候选 item 中有多少是用户真正感兴趣的,计算公式为:

        Recall@K 反映了用户真实感兴趣的 item 有多少被候选召回,计算公式为:

        为了结合 precisionrecall ,我们定义 F1@K 为:

        我们最终计算测试集中所有用户的Precision@KRecall@KF1@K的均值作为最终结果。

    • 在线评估指标:我们考虑最重要的在线指标:pCTRpGMV、和 discovery

      • pCTR 定义为每个 pv 的点击率,其中每个 pv 可以为用户推荐 20item

      • pGMV 定义为每 1000pv 的商品交易总额 Gross Merchandise Volume: GMV

      • 除了在线流量和收入,我们还考虑了用户的购物体验。我们定义 discovery 指标来衡量推荐系统可以为用户提供多少新颖的 item

        其中分母为过去 15 天,用户 点击的所有类目的数量,分子是用户 点击的新类目的数量。 我们对测试集中所有用户取平均。

  3. baseline 方法:我们使用以下方法在两个离线数据集上和我们的模型进行比较。我们还包含了用于消融研究的、SDM 的五个变体。

    • Item-based CF:它是行业中主要的候选item 生成方法之一,利用协同过滤方法生成用于推荐的 item-item 相似度矩阵。
    • DNNYouTube 提出的一种基于深度神经网络的推荐方法。item 向量和 user 向量被拼接并馈入到多层前馈神经网络中。
    • GRU4REC:它是首次应用循环神经网络解决 session-based 推荐,明显优于传统方法。
    • NARM:它是 GRU4REC 的改进版本,具有全局的和局部的 attention-based 结构。它探索了一种具有注意力机制的混合编码器hybrid encoder 来建模用户的行为序列。
    • SHAN:它将用户的历史稳定偏好和近期的购物需求,与层次注意力网络hierarchical attention network 结合起来。
    • BINN:它应用 RNN-based 方法来编码当前的消费动机和历史购买行为。它通过拼接操作来生成统一的 representation
    • SDMMA:仅有 multi-head self-attentionSDM 模型。
    • PSDMMA:在 SDMMA 之上,添加了用户 attention 模块从而挖掘细粒度个性化信息的 SDM 模型。
    • PSDMMAL:在 PSDMMA 之上,它结合了短期行为 representation 和长期行为 representationSDM 模型。
    • PSDMMAL-N:在 PSDMMAL 之上,它在训练期间,在当前时刻使用接下来的 Nitem 作为 target classes,在本实验中
    • PSDMMAL-NoS:在 PSDMMAL 之上,不包含短期行为中的辅助信息和长期行为中的辅助信息,即仅有 item id,而没有类目、子类目、品牌、店铺等辅助信息。
  4. 配置:

    • 我们通过分布式 Tensorflow 实现这些深度学习模型。为了公平比较,所有这些模型共享相同的训练集和测试集,也共享相同的item 特征、user 特征、以及其它的训练超参数。

    • 离线实验的训练中,我们使用 5 个参数服务器parameter severs: PSs 以及 6GPU(Tesla P100-PCIE-16GB)worker , 平均训练速度 30 global steps/秒

      在线实验训练中,我们使用 20 个参数服务器以及 100 GPU worker ,平均训练速度 450 global steps/秒

    • 我们使用学习率为 0.001Adam 优化器,当梯度范数超过阈值 5 时通过梯度缩放来裁剪梯度。

    • 我们使用 batch size = 256mini-batch,并将长度相似的序列组织成一个 batch

    • 任何 embedding 和模型参数都是从头开始学习的,没有预训练。embedding 和模型的参数通过 orthogonal initializer 来初始化。

    • 对于循环神经网络,我们使用带 dropoutdropout rate = 0.2)的多层 LSTM 以及残差网络,其中dropout 和残差网络应用在上下两层 LSTM 之间。

      LSTMhidden size 在离线和在线实验中分别设置为 64128 。我们设置了不同的setting,因为我们需要在离线实验中高效率地评估模型性能(因此离线的 hidden size 更小)。

    • 对于 multi-head attention 结构,我们在离线和在线实验中分别将 head 数量设置为 48

    • 我们使用 layer normalizationresidual adding 操作。

    • item embedding 向量维度、短期行为向量维度、长期行为向量维度、用户行为向量维度和 LSTM 保持一致。

    • 在在线 serving 期间,我们的模型对检索 top 300 itemmatching 过程耗时大约 15ms

  5. 不同模型的离线数据集结果如下表所示。我们从这些模型的所有训练 epoch 中选择最佳结果。

    • 总体而言,除了 YouTube-DNN 之外,基于深度学习的方法显著优于传统的 item-based CF 方法。

      • YouTube-DNN 中,item 序列上的均值池化忽略了 item 之间内在的相关性,严重影响了推荐质量(Recall, Precision)。
      • GRU4RECNARM 考虑了短期行为的演变。它们的性能优于原始 DNN 模型。
      • SHANBINN 在几乎所有指标上都能击败 GRU4REC,原因是它们包含了更多个性化信息,包括长期行为和用户画像 representation
    • 我们提出的 SDMMA 使用了 multi-head attention 结构,并且比 NARM 具有压倒性优势。我们在下面内容进行了详细的案例研究,从而进一步解释 multi-head attention 如何很好地捕获多种兴趣。

    • 通过引入用户画像 representationPSDMMA 提升了模型,因为不同类型的用户关注 item 的不同方面。短期representation 越准确,用户就越能够在候选列表中找到他们感兴趣的 item,这是有道理的。但是很难为用户推荐潜在的、新颖的item。应该通过考虑长期行为来推断更精确的偏好。

    • 通过考虑长期偏好,PSDMMAL 可以显著击败上述所有模型。

      SHANBINN 不同,PSDMMAL 应用 fusion gate 来结合短期行为 representation 和长期行为 representation。和层次注意力hierarchical attention 结构相比,gate 具有更强大的决策representation 能力。

      SHAN 简单地将用户画像representation 作为 query 向量来决定长期偏好 representation和短期偏好representation 的注意力权重。我们提出的 PSDMMAL 对用户画像 representation、短期偏好 representation、长期偏好 representation 之间的特定相关性specific correlation 建模。我们在下面内容给出了一个有趣的案例,可以正确解释 fusion gate 的设计。

    • PSDMMAL-N 是我们最好的变体,它在训练过程中将接下来的 5item 作为target classes。它可以召回更多样化的 item、满足更广泛的用户需求、更适合推荐系统的 matching 任务。

    • PSDMMAL-NoS 的结果表明:如果没有辅助信息,我们的模型性能将急剧下降。

  6. 在线 A/B test 结果:目前淘宝上的 matching 算法是一个两阶段的方法:

    • 我们定义 trigger item 为用户最近交互的 itemitem-based CF 首先生成 item-item 相似度矩阵,然后 tirgger item 通过相似度矩阵召回相似 item
    • 接着根据用户的点击和购买日志,通过 gradient boosting tree 将这些召回的 item 重排为 matching 候选集。

    这种方法是我们的在线 baseline,我们仅将其替换为我们的模型作为标准的 A/B test

    我们在手机淘宝 App 的生产环境上部署了 PSDMMAL-N(这是我们最好的 SDM 版本,记作 short and long-term),以及没有长期行为的PSDMMA版本(记作 short-term)。下图显示了 201812 月期间连续 7 天的在线结果。可以看到:

    • 我们的模型以较大的优势优于 baseline ,其中PSDMMAL-NpCTR/pGMV/discovery 上的总体平均提升为 7.04%/4.50%/24.37%
    • 融入长期行为会带来更多的改善。长期行为总是表明个人偏好,可以影响用户当前的购物决策。

    注意,自 201812 月以来,我们的SDM 模型一直在线运行良好。

  7. multi-head attention 的影响:我们探索了 SDM 模型中不同head 数量的影响。直观地讲,随着 head 数量的增加,短期sessionrepresentation 将变得更加准确。

    下表报告了离线 Taobao 数据集的结果,其中 。在本实验中,PSDMMAL 中只有 head 数量的不同,模型隐单元维度

    可以看到:head 数量引起的变化在四个指标上保持一致。

    • head 数量小于 4 时,模型效果和 head 数量呈正相关。
    • head 数量大于 4 时,模型效果会急剧恶化。

    我们可以得出结论:更多的 head 数量不一定是正向的,因为 变小导致更差的、每个 headrepresentation 。在我们的setting 中,head 数量为 4 可以得到最好的结果。

  8. multi-head attention 可视化:我们从离线 Taobao 测试数据集中采样一个短期 session ,然后可视化了该短期 session 中不同 head 的注意力权重,如下图所示。

    我们选择 LSTM 的最后一个 hidden output 作为 multi-head attention 中的 query 向量,从而得到附加到 上的注意力权重。

    可以看到: head1head2 主要集中在 session 的前面几个 item,即白色羽绒服。head3 捕获了人们对大衣的兴趣,而 head4 更关注牛仔裤。

  9. Fusion Gate:将短期偏好 representation 和长期偏好 representation 直接逐元素乘法、拼接、加法,这些简单的组合方法忽略了长期偏好中一小部分和当前短期偏好有很强的相关性。我们在Taobao 离线数据集上验证了不同组合方法的性能,如下表所示,其中

    可以看到:我们提出的门控融合网络gated fusion network 准确地捕获了 multi-level 用户偏好并取得了最佳结果。长期偏好中与当前短期偏好高度相关的信息可以与当前短期偏好向量融合。

  10. Fusion Gate可视化:为了更好地解释fusion gate,我们使用淘宝上的一个采样用户的真实案例来解释门控的功能。

    如下图所示, 包含我们模型推荐的、同时后来也被用户所点击的 item 集合。

    • 从短期行为 可以看到:用户正在浏览各种杯子,包括红酒杯、冠军杯。

      我们的模型能够直接推荐冠军杯,因为冠军杯与用户短期行为的最后一次点击有关。这意味着用户当前更可能对冠军杯感兴趣,并且 gate 允许保留这些信息。

    • 从长期行为 可以看到:用户曾经点击过与短期行为相关的红酒 red wine ,但是也发生过很多与短期行为无关的点击,如啤酒、削皮刀、小盘子。

      我们的门控融合能够捕获到长期行为中最相关的红酒 item,并结合短期行为中的红酒杯 item,从而生成推荐的红酒醒酒器 item

    这个 case 表明我们的 gate 模块具有有效、准确的融合能力fusion ability