赞
踩
本文是对2018年KDD Best Paper Real-time Personalization using Embeddings for SearchRanking at Airbnb 阅读过程的思路整合与学习笔记。
搜索排序和推荐是互联网公司最关心的基础问题,设计领域包括搜索引擎,内容发布网站和市场等。然而尽管这些问题有一些共同特征,但是在这个领域中没有一个普适的解决方案。本文中,作者引入了Listing Embedding(商品页向量)和User Embedding(用户向量)技术,用于实时个性化搜索排名和相似商品推荐(这两个通道在订单转化中占比99%)。这个Embedding模型是专门针对Airbnb市场设计的,能够捕捉到用户的短期和长期兴趣,提供有效的房源推荐列表。作者对embedding模型进行了严格的离线测试,随后进行了成功的在线测试,结果表明这种embedding方法创造的新特征具有不俗的表现。
在过去十年,基于经典信息检索的搜索架构中,机器学习在各个组件中的占比都有所增加,在搜索排序任务中尤其如此。这一趋势的主要原因是能够被收集分析的搜索数据数量大大增长。通过机器学习,我们可以用这些数据基于某个特定用户的搜索历史来对搜索结果个性化推荐,同时推荐相似的最近订单的房源。
搜索算法的目标可能因为所处平台的不同而有所不同。一些平台目的是提高网站的参与度,比如说提高被搜索的新闻文章点击次数和阅读时间;另一些平台目的是最大化转化率,比如说提高搜索结果中的物品或服务的购买次数。但是在双边市场,经常需要同时考虑买房和买方市场来对搜索结果进行优化。这类市场的内容挖掘和搜索排序需要同时满足供需双方的需求。
具体来说,在Airbnb,对搜索结果优化时就要同时满足房东和租客的需求。也就是说当用户给出了一个包含地点和旅行日期的搜索请求时,我们需要把位置、价格、风格、评论等对租客有吸引力的listing(商品页,电商行业的专业术语,在这里可以理解为房源)的排序提高,同时根据客人的旅行时间和持续天数与房东的租售偏好相匹配。此外,我们需要检测可能因为差评、宠物、停留时间、团队规模或任何其他因素而拒绝客人的listing,并将这些listings的排序降低。
由于客人通常在预订前进行多次搜索,即在搜索期间点击多个listings并联系多个房东,因此我们可以使用这些搜索会话过程中的正信号(即点击事件,与房东联系等,看作正信号)来进行实时的个性化推荐,其目的是向租客展示我们认为他们在搜索过程中所表现出的喜好房源的相似listings。同时,也可以利用负信号(即跳过的排名较高的listing)进行优化,目的是在租客的推荐列表中减少我们认为租客不喜欢的房源的相似listings。为了能够计算租客产生互动的商品页与需要排名的候选商品页之间的相似度,作者提出使用Listing Embeddings(即从搜索会话中学习的listing的低维向量表示)来计算相似度,并利用这些相似度来做搜索结果的个性化推荐和排序。
作者还引入了另一种类型的Embedding,这类embedding专门针对发生了预订的会话进行训练,从而能够捕捉用户的长期兴趣。但是根据旅游业的规律,用户平均每年旅行1到2次,且长尾用户每年只有1次预定行为。为了解决这个问题,作者提出在用户类型而不是用户id的层面上来训练Embedding(user type embedding)同时,作者还训练了listing type embedding(商品页类型向量,与user type embedding在同一个向量空间),这使得我们能够计算正在执行搜索的用户的user type embedding与列出需要排序的候选列表的listing type embedding之间的相似性。
本文的创新点在于:(1)实时个性化。以前使用Embedding进行个性化和项目推荐的大部分工作中,都是在线下形成用户-项目和项目-项目推荐表,然后在推荐时从中读取。本文实现的解决方案,是将用户最近交互项的Embedding以在线方式组合在一起,并计算与需要排序项的Embedding之间的相似性。(2)适应于市场集中搜索的训练方式。不同于网络搜索,旅游平台上的搜索经常是集中的,用户经常只在特定的市场上搜索,比如巴黎,而且很少跨越不同的市场。在进行负采样时,作者在采用Embedding训练时考虑了这一点,从而捕获更好的特定市场内的listings之间的相似性。(3)将转化行为作为全局上下文。作者强调了从点击会话到完成实际转化(即预定房源)的重要性。在训练listing embedding时,作者将完成预定行为的listing视为全局的上下文,即当滑动窗口在会话中移动时这个listing始终会被预测。(4)用户类型向量(User Type Embedding)。之前的工作在训练用户Embedding时是对每个用户单独训练一个向量。当目标信号稀疏时,没有足够的数据来对每个用户训练一个好的向量表示。更不用说为每个用户存储Embedding将需要大量内存。基于以上原因,作者提出在用户类型的层面上训练Embedding,即同一类型的用户拥有相同的Embedding。(5)把拒绝行为看作负信号。为了减少这拒绝行为的推荐,作者对用户和listing type embedding进行房东偏好的标记,具体方式是通过在训练中将房东的拒绝行为作为明确的负标签。
对于短期兴趣的个性化推荐,作者用超过800,000,000条的搜索点击会话来训练listing embeddings。作者用大量线下和线上测试表明在排序模型中添加embedding特征能够大幅度的增加预定量。除了搜索排序算法,listing embeddings在相似房源推荐的任务中也有很好的表现,相比于现有算法的点击率效果提高了20%。
对于长期兴趣的个性化推荐,作者用超过50,000,000条用户的预定listing序列训练了两种embeddings:user type embeddings和listing type embeddings。两者是在相同的向量空间中训练的,所以可以计算用户的user type embedding和待排序候选列表的listing type embeddings之间的相似度。这个相似度被用作搜索排序模型的一个额外特征,效果也很好。
随着CBOW和skip-gram等用于学习词向量的技术的出现,不仅仅是单词表示,embedding的概念被扩展到其他广义NLP领域的应用中。比如在网页搜索、电子商务和市场领域中,研究者们很快意识到,可以把用户的行为序列(比如说用户点击或购买的项目,用户点击的查询和广告,)看成是上下文,用来训练相应的embedding。从这以后,我们看到embedding被用于各种类型的网络推荐任务中,包括音乐推荐,工作搜索,应用推荐,电影推荐等。此外,在用户自身的向量空间中,可以直接进行用户交互项的embedding学习,这样就可以做用户和项目之间的直接推荐。类似的embedding方法的扩展也被提出用于社交网络分析,利用图结构的随机游走来学习节点在图结构中的embedding值。总体而言,embedding方法在学术界和工业界都有重要的影响。
4.1 Listing Embeddings
listing embeddings主要用于用户的短期兴趣实时个性化推荐。首先对训练数据进行说明。假设集合S是N个用户的点击会话(clicked session,即指用户一次搜索后的所有浏览点击情况序列)结合,这里的每一个会话
这里的
这里的
与skip-gram相同,损失函数的梯度计算速度与“词典”的尺寸有关,所以这里也使用负采样的方法来缩短计算时间。同样的,类比于skip-gram,这里对每个listing,建立两个集合
使用随机梯度下降对上式求解,最终求得的v向量构成的矩阵即为listing embedding矩阵。但是仅仅如此还不够,作者接下来对模型进行了进一步的优化以适应业务场景。
优化1:发生预定行为的listing作为全局上下文。作者将S中的会话序列分为两类:预定会话(booked sessions),即序列最终以预定一个listing的行为作为结束;探索性会话(exploratory sessions),即最终没有预定行为的会话。两者对于捕捉listing之间的相似性都有用,但是发生预定行为的会话可以用于调整优化方向,这样就不仅可以预测相似的listings,还可以预测最终预定的listing。我们把最终预定的商品页(booked listing)视为一个全局上下文(global context),并把它添加到优化目标中,这样无论它是否在上下文窗口中都会被作为优化项。因此,在预定会话中,模型的优化目标变为
这里
优化2:适应于集中搜索的训练方式。在线旅行预定网站的用户一般来说只会搜索一个单独的市场,即他们想要去的地方的市场。因此
关于Listing embedding的冷启动。Airbnb每天都有房东贴出新的listing信息,这些新的listing并没有相应的listing embedding,因为他们并不在训练集中。为了给这类listing赋予embedding,作者提出利用现有的listing embedding来生成新的embedding。
在上传房源时,房东需要提供商品页的相关信息,包括位置,价格,商品类型等。作者用这些元数据找到在地理上最近,且与新的listing类别相同的三个现有listings。然后求这三个listing embeddings的均值作为新的listing embedding。
以上介绍了listing embeddings的模型和具体优化。接下来作者使用不同用户的800,000,000条会话数据训练了d=32的listing embeddings,并对其进行测试。首先,作者进行了k-means聚类的测试,以检测embedding中是否包含地理位置信息。作者对California的listings聚成100类,效果如图2。从图中能看出,相同位置的listings能够聚在一起。这些聚成的类对于重新划分旅行市场很有参考价值。
接下来作者对统一地点的(Los Angeles)不同类型的listings之间以及不同价位的listings之间进行了平均余弦相似度的计算。从表1和表2中能看出相同类型或相同价位的listings之间的相似度相较于不同类型、不同价位listings之间的相似度大很多。因此,可以说listing embeddings中也蕴含了房源类型和价位的信息。
此外,有些listings的特征(比如价格)不需要学习,因为可以直接从listing的元数据中得到。但是其他类型的listing 特征(比如房屋结构、风格和住房体验等)很难以特征的形式提取出来。为了评估这些特征是否被embedding所捕捉,作者用k近邻算法在embedding向量空间中匹配具有独特建筑结构listing的相似项。如图3所示,embedding中也包含了建筑结构的信息。为了能够对listing embeddings进行快速简单的搜索,作者开发了一个内部的相似度探索的工具。如图4所示,作者展示了这个工具能够寻找到各种建筑结构的相似listing。
4.2 User-type 和Listing-type Embeddings
Listing embeddings能够有效的找到相同市场内listings之间的相似性。因此,listing embeddings适合于短期的、会话内的个性化推荐,目的在于向用户提供与他们在搜索会话期间点击的listing相似的listings。然而,除了同一会话内的个性化推荐以外,根据用户长期历史信息来对搜索进行个性化处理也是很有用的。比如说,某用户突然搜索Los Angeles的listings,但其在历史上只在New York和London有过预定行为,那么推荐与之前曾经预定过的listings相似的listings就是有价值的。
目前有些跨市场的相似性是通过对点击行为的训练来进行捕捉的,但是更重要的方法是通过学习用户在一段时间内发生预定行为的会话中的一系列listings来捕捉跨市场相似性。不妨假设给定一个包含N个用户的预定会话的集合
(1)首先,预定会话集合
(2)第二,很多用户只有过一次预定行为,无法从中学习
(3)第三,想要从上下文信息中学习到任何实体信息,至少需要该实体在数据中出现5-10次,但是有很多listings出现次数少于5-10次。
(4)最后,用户的两个连续的预定行为之间可能会有很长的时间间隔,在这段时间内,用户的偏好(比如说价位)可能会发生变化。
这些都是市场中常见的问题。为了在实践中解决这些问题,作者提出在listing type的层面而不是listing id(即每一个listing)的层面上来训练embeddings。作者根据listing的基本信息,如位置,价格,商品类型,房屋容量,床位等建立规则,把listings分成了不同的listing type,如表3所示。这样一来许多listing id就会被映射到相同的listing type。
为了进一步解释用户随着时间改变喜好的行为,作者提出在与listing type embeddings相同的向量空间内学习user type的embeddings。User type的确定过程与listing type相似,即用用户user id的元数据和历史订单信息来映射到user type,如表4所示。在生成预定会话以训练embedding时,根据用户的历史预定信息计算用户的user type。对于首次预定的用户,则只使用用户的元数据来分类。所以在新用户和注销用户等没有历史订单信息的用户冷启动时的个性化推荐,也可以用此策略进行user type的分类。
分好类别之后,为了在同一向量空间中训练user_type embeddings和listing_type embeddings,作者把user type的信息也合并到session中,即在每个listing type的前面添加当前用户的user type,组成一个新的序列。具体的,会话集合
优化目标与(3)式相似,但是由于user type也被放入序列中,所以每次统计的中心项可能是user type或者listing type。如果中心项是user type,则优化目标为
这里
模型示意图如图5(a)所示。由于预定会话集中的listing本身就是包含不同市场信息的,所以不需要在额外负采样当前listing所在市场的负样本。
此外作者还在上述模型的基础上增加了一个优化目标。通常来说,点击行为只反应租客端的偏好,而预定行为同时也反映了房东端的偏好。因为在预定行为中房东会有明确的反馈行为,即接受预定请求和拒绝预定请求。租客被拒绝的原因包括租客自身评分低,租客资料不完整,没有个人照片信息等。这些特征都是user type定义分类标准的一部分。所以在训练过程中,除了租客的偏好信号以外,还可以利用房东的拒绝信息把房东的偏好信号也学习到embeddings中。因此,可以把发生房东拒绝行为的预定会话也把柄到序列中。这样做的原因是:有一些listing type对没有预定行为、资料不完整、且租客评分低于租客平均值的user type不敏感,作者希望这些listing type和user type的embeddings在向量空间中的距离更接近一些,这样除了能增加预定外,还能减少房东拒绝的次数。
具体拒绝行为作为负信号的做法如下:除了集合
中心项为listing type时,优化目标为
由此学习得到的user type embeddings和listing type embeddings,就可以根据用户类型的embedding和商品页类型的embedding之间的相似性来给用户推荐listings。表5中出现的user type所代表的用户,通常会预定高质量而宽敞、好评较多的不同类型的房源。如表5中的相似性结果可知,这个user type与大空间、好评多的listing type之间的相似性最高。所以可知这种学习方法是有效的,能够学到user type和listing type之间的内在关系。
5.1 训练listing embedding
作者使用了800,000,000条点击会话来训练listing embeddings。这些会话都来自登录用户,且按照用户id和时间顺序排好序。然后再把这个listing id组成的列表按照30分钟不活动原则进行拆分,即某用户连续两次点击之间的时间间隔超过30分钟,就认为这是两次独立的会话活动。接下来,移除偶然点击和短暂点击事件,即用户在listing上的停留时间少于30秒。进一步只保留连续点击超过两次的会话。最后,删除用户id信息,这样就只包含listing的信息。如之前所提到的,点击回话由探索性会话(exploratory sessions)和预定会话(booked sessions)组成,但是数据是不平衡的。根据离线评估结果,作者在训练数据中对预定会话进行了5倍的过采样(由于预定会话的比例较低),获得了表现最好的listing embeddings。
设置每日训练。在本文中,作者要为4,500,000条Airbnb的listings训练embeddings。训练数据在几个月的时间里以滑动窗口的方式每天更新,具体的做法是处理最新的每日搜索会话并将它们添加到数据集中,并从数据集中丢弃最老的每日搜索会话。训练开始时embeddings是随机初始化的。结果发现每天全局重新训练得到的embeddings要比在过去训练好的embeddings的基础上增加数据再训练效果要好。每天向量的差异不会在模型的结果上造成差异,因为在实际应用中使用的是向量之间的余弦相似度作为主要信号,而不是embeddings本身。即使embeddings随着时间发生变化,余弦相似度测度的内涵和范围大小不会发生改变。Embeddings的维度设置为32,上下文窗口的尺寸设置为m=5,对训练数据总共进行了10个循环的训练。
5.2 Listing embeddings的线下测试
检测embeddings好坏的方法就是看看推荐的listings如何。作者首先获取最近某用户点击的listings以及需要排序的候选listings(其中包含了最终预定的booked listing)。通过计算单签点击的listing和候选listings之间的相似度,可以对候选listings进行排序,并观察最终预定的booked listing在其中的排名,借此判断listing embeddings的好坏。
作者对大量的搜索会话进行了上述测试,比较了不同的listing embeddings的效果,结果如图6所示。图中的booked listing的平均排名(Average Ranking of Booked Listing)是指在达成预定的前17次点击中,该booked listing在他们每次候选listings中的平均排名。能够看出在传统的搜索排名模型中,点击次数越多效果越好。同时,作者的listing embeddings的效果要明显好于传统的搜索排名模型,尤其在预定之前的早期点击阶段。能发现book+neg优化(即预定listing的作为全局上下文的优化,和当前市场的负采样优化)优化的模型效果是最好的。
5.3 用listing embeddings找到相似房源
每个Airbnb房源主页上都有相似房源选项,来提供给租客相似的listings供选择。现有的用于寻找相似listings的算法是对给定listing相同位置的listings调用搜索排名模型,然后对这些listings的可用性、价格范围和类型进行过滤。
作者用listing embeddings和传统的搜索排名模型在这一任务上进行了比较。具体的,使用embeddings的算法是找到当前listing在向量空间中的k近邻来生成相似房源列表。即通过计算同一市场中在同一日期可用的所有listings的embeddings与当前listing embedding之间的余弦相似度,找到给定listing的相似房源。作者进行了线上测试,结果发现使用listing embeddings后点击率提高了21%,同时最终在相似房源的列表中完成预定的比例提高了4.9%,所以可以说listing embeddings在相似房源任务上的表现也非常好。
5.4 基于Embedding的实时个性化搜索
5.4.1 实时搜索排序的背景
首先对实时搜索排序模型进行简单说明。该模型的训练集为
接下来把这个问题看成是回归问题,标签就是
5.4.2 Listing Embeddings 特征
作者在实时搜索排序中新添加了一些与listing embeddings相关的特征。首先,需要把listing embeddings添加到搜索后端,然后建立一系列用户的短期历史集合,其中包括了用户两周内的相关活动,该集合会实时更新。对于每个用户,需要维护的历史信息集合包括:(1)
最终,作者定义了一系列embedding features,如表6所示。举例来说,要计算某个候选商品页
其余的基于listing embedding的特征与EmbClickSim的计算方法相似,不在赘述。除此之外,作者还添加了一个计算方法不同的相似度特征,是当前listing与最近一次长点击(即停留时间超过60秒)的listing之间的相似度,计算公式如下:
5.4.3 User type和listing type embeddings特征
User type和listing type embeddings的训练过程这里就不在赘述,之前已经提及。作者添加了一个UserTypeListingTypeSim特征,即用户类型与listing类型之间的余弦相似度。所以对于一条请求的用户,可以计算该用户所属的类型与当前listing所属类型之间的相似度,计算公式如下
至此,表6中的embedding新特征就说明完毕了。最终作者根据这些新特征再加上以前的老特征重新训练了GBDT,新特征的覆盖率和重要程度排名在表7中列出。能够看出一些新特征的排名很高,而且有5个新特征在最重要的20个特征之中。
最后作者比较了增加新特征前后搜索引擎的效果。结果表明,增加embedding特征之后,DCU(Discounted Cumulative Utility,一种评价搜索引擎算法好坏的标准)和NDCU(Normalized Discounted Cumulative Utility)都有所提高,如表8中所示。
本文利用skip-gram模型的思想,实时搜索排序中的会话序列进行了训练,得到了表示listing的embeddings和表示user type与listing type的embeddings,这些embeddings在搜索排序任务和相似房源推荐任务中的表现都很好,说明他们都学习到了一些listing或者用户的相关属性。更重要的是,正所谓万物皆可embedding,本文作为2018年的KDD Best Paper,用实际的工业应用展现出了embedding思想方法在特征工程中的强大实力。在本文的阅读学习过程中,不仅能够复习skip-gram模型的思路,也能够扩展视野,学习到embedding在特征工程中的应用。
参考资料:论文原文 Real-time Personalization using Embeddings for SearchRanking at Airbnb
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。