文章作者:周文彪 途家网
编辑整理:Hoh Xil
内容来源:AI 科学前沿大会
出品社区:DataFun
注:欢迎转载,转载请注明出处
民宿越来越成为旅游消费的新热潮,作为国内最大的民宿平台,途家在应用 AI 技术进行个性化商品推荐方面进行了不少探索。民宿行业的数据,具有用户消费频次低,用户兴趣点不好描述等特点,基于内容和普通协同过滤的方法效果都不明显,受 graphic embedding ,word2vec 的启发, 我们运用 Embedding 技术有效建立了商品之间的相似关系,运用在物物相似推荐场景通过 AB 测试效果明显胜出。这里对这方面的主要工作进行一个介绍和分享:
背景:民宿推荐 & Embedding
方案:业务中 Embedding 如何落地
改进:落地时的摸索和技巧
后续:未来计划
一、 背景
民宿在国内还算是比较新的行业,发展比较快,在国外民宿已经发展很多年了,沙发客文化在国外比较流行。
图中右侧部分,为途家 APP 的界面,左边为 list ,右边为点击第一个房间的详情,如果没有用过民宿的同学可以感受下。民宿列表页和携程、去哪儿酒店有明显区别,他们的图是比较小的,而民宿看起来图片很大,什幺原因呢?其实民宿是非标住宿,个性化较强,住酒店的话,可能你想好几星,位置,价位,就可以选择了,但是民宿,人们很多时候,会想住一个山景房,或者一个木屋,住在海边,或者是繁华地段,需求方面会注入更多个性化因素。
总结下,民宿个性化推荐特点:
1. 消费低频,它是旅游需求,相对低频,且用户行为中位置选择占主导,这导致如果应用传统的协同过滤方法,不容易出效果,即使得到的结果也仅仅体现出位置相近的关系。
2. 商品特色数据不易标注,民宿的商品比较特殊,除了房子基本信息,还有很多潜在信息,不容易表达和标注。
3. 用户核心需求不好挖掘,当给出能住几个人,在什幺位置,是别墅还是农家乐等信息,用户往往还是无法做出选择,还是会详细的看看房子的图片,或者和商户再进行一些沟通,询问些问题,比如是否适合小孩入住,是否有宠物,因此用户的核心需求也不好挖掘。
这就是民宿推荐上的一些特点。
二、方案
为了在民宿推荐上引入更多的个性化,我们考察了三类个性化推荐的方案:
1. 基于内容的推荐
依赖的数据:这个方法很直接,如果我们可以把房屋的各个维度的数据描述出来,都打上标签,我们就可以进行推荐,比如装修风格,图片怎幺样,是否有些有趣的特色。
特点:可覆盖新品,需要大量前序数据挖掘和标注工作,潜在特性不易表达,数据描述的全面性和准确性难保证。
2. 基于协同过滤的 item-to-item 相似推荐
在这里我们不用 user-to-user ,因为它是低频消费的场景,用户之间的相似度很难挖掘,所以我们这里重点考察 item-to-item 相似推荐。
依赖的数据:用户行为日志
特点:不需要数据标注,从高层角度进行推荐;无法覆盖新品,在酒店民宿上应用会陷入以地标相似为主的囧境,弱化了其他个性化特征。
3. 基于 embedding 的 item-to-item 相似推荐
Embedding 可以挖掘商品多维度的潜在个性,通过向量之间的内积,发现物品之间的相似性。
依赖的数据:用户行为日志
特点:不需要数据标注,从高层角度进行推荐;无法覆盖新品,可以挖掘除了地标特征外的多维度相似性。
Embedding
下面介绍下 Embedding:
Embedding 是指把超高维 one hot 离散型变量,表达成一个相对低维的向量 ( 比如:从100000维降到64维 ) 。
在民宿场景下,把房子用一个向量表示,这个向量的内积越大,就表示相似度越高。
这种向量可以表示房屋的原理是:
我们收集了大量的用户日志,用户在短时间内会浏览很多房子,我们认为,用户在下单前,他的搜索都是基于同一个需求的,所以在短时间内浏览的房子是具有内在相似性的。
Embedding 方案比较
我们考察了几种 Embedding 方案:
Graphic Embed ding:大家可以看到上图 ( a ) : 用户搜索时的时序,图 ( b ) :把时序用网络来表达,其中 u1 用户的行为 DAB ,就可以把 D-A-B 连线,多个用户的连线放在一起,就形成了网络。这种方式考虑了用户点击行为之间的顺序,和不同用户行为序列的交叠, 这在我们的场景中没有必要性,且会增加很多计算量。
Rnn-Language Model:这个模型复杂度高,有顺序考虑,在数据集不大时,收益也不明显。
Skip-Gram Model:回归到简洁的模型,其实模型的复杂度是跟我们的数据和真实的场景有关的,有时候需要复杂的模型,有时候可能简洁的模型更好。这个模型简单来说是一个短时词袋模型,复杂度低,很适合对大量的语料进行建模计算。2013年 Mikolov 等人正是回归到简单的 Skip-Gram 模型开启了 NLP 领域的新阶段。
Skip-Gram Model
简单介绍下 Skip-Gram Model:
它是实现 word to vector 的经典方法,利用词语在上下文中的共现现象,为每个词生成一个低维向量表示(几百维)。
我们可以看右边的网络图,非常简洁,输入为 w(t) ,中间层为高维的 projection 层,最后为输出层,可以采用 sotfmax 、也可以采用二分类,Skip-Gram 采用了二分类,通过负采样的方式,避免了对大量输出的分类。
下面为一个语言的例子,输入为 quick ,输出为 the 或者 brown ,然后做了负采样 java ,这就构建了正负样本,可以进行学习了。
网络参数:
Projection 层:E nxd ,这个就是我们说的 Embedding ,n 指 n 个词,d 指我们想把这个词表达成多少维的向量。
Output层:W nxd ,也是每个词都有 d 维的参数,然后还有一个偏置 b n
我们用 wi 表示输入,wo 表示输出,V wi 表示 Embedding 向量。
预测概率:
可以看到这里我们要预测某个词出现在上下文中的概率,就是求解在给定输入词 wi 的时候,wo 的概率是多大。
正负采样:
这里 Skip-Gram 采用的是正负采样,取前后 A 词作为正样本,在词典中任取 B 词作为负样本。为什幺取负样本?因为不能只去学习正样本,两个词之间不是所有属性都相近,需要负样本来学出来到底哪些属性相近,哪些属性不相近。
损失函数:
Skip-Gram Model 实现 HouseToVector
接下来把 Skip-Gram 落地到民宿场景中,把一个个民宿表达成向量。
如右图,左边为自然语言的一个句子,可以看到白框 The cat plays with the dog 是一个正常的句子,后面俩个黄色的词其实和这个句子无关,我们把它采样进来做一个负例。学习的时候The作为输入,cat 和 plays 作为正样本,car 和 driving 作为负样本,这样构成一个学习样本去学习它的 Embedding 。在我们的业务中,这个序列其实就是一个个房子,就是用户在列表页看到的房子,并且是点击过的房子,黄色为用户跳过的房子,这样就和我们的语言模型对应上了,也有正样本和负样本,图中蓝色的框为用户的 book ,即用户的下单。可以看出,用户的潜在需求与短期内点击过的房子具有相似性,与跳过的房子不相似,与下单房子的相似性具有高权重。
可以看下,上图左边的概述,就是我们如何把 Skip-Gram Model 如何映射到民宿场景中的:
连续的浏览点击行为作为单一需求上下文 w(1),w(2)…w(t)….
若两个行为间隔在半小时以上,则分到两个不同需求上下文中
一个上下文中点击的房子作为正样本 wa ,跳过的房子作为负样本 wb
当天下单的房子作为当天所有上下文的正样本 wa ,且权重更大(当作5个点击)
正样本中任何一个房子可以作为输入 wi
其前后2个正样本及下单房子作为输出中的正样本 wa
采样一个上下文中跳过的8个房子作为输出中的负样本 wb
补充采样上下文中目的地(可能多个)的若干个房子作为负样本 wb
一个训练样本包括, 输入:1个房子,输出: 64个房子
模型训练
说一下我们的模型训练,百万级的房源,用64维的向量来表达,参数其实就是 E 矩阵和 W 矩阵,对 W 矩阵进行 L2 正则化,Batch size 为1024,使用了100个 Epoch ,训练了1天,训练的样本量是由800万浏览点击上下文对应的4000万训练样本,700万评估样本,采用 Tesla M40 训练平台。
可以看下我们的 loss 曲线,黄色为评估集,蓝色为训练集,可以看到这个曲线是比较符合预期的,没有太大的抖动,说明这样的方法合适民宿 Embedding 建模。
模型评估除了刚刚的 loss 曲线评估,我们还需要一些产品维度的评估,包括:预测准确率,单一维度相似性。右图为单一维度相似性的对比图。
我们再说个具体的例子,就是途家 app 列表页的一个变化。上图中红直线标出了几个房子位置发生了上移,原因是和作图中用户点击的房子具有相似性,直线上小字是相似度。
这个是我们在线 ABtest 的一个效果,可以看到蓝色是我们的上线日期,上线之后,有一个明显的转化率的提升。
另外我们还做了一个 工具 提供给供应链的同事使用,用来进行联想搜索, 左上角是输入的房子,下面是根据 Embedding 最相似的若干房子:
三、改进
1. 落地中的一些技巧
关于训练集和训练参数:
过滤掉停留时长太短的点击行为
过滤掉点击数量太多的用户行为
上下文不能太长: +/-2个点击, 行为间隔<30分钟
下单参与到用户当天所有上下文中
负采样:
√ 一定要采样用户跳过没点的房子,数量不能比正样本多太多
√ 一定要采样同目的地的其他房子,数量和用户跳过房子相当
学习率:足够小,自适应降低
L2正则化:针对 W ,采用较强的约束,batch-related:只把当前 batch 里出现的房子加入到 L2 正则项里。
2. 应用 Embedding 中的一些技巧
数据后处理:
√ 预测前需要对所有 Embedding 向量规范化
√ 过滤掉在训练集中总出现次数小于10的房子
推荐方案:对用户一天内最近5次点过的房子向量求均值,再求与候选房子的相似度
冷启动问题:
√ 找到与新上房子最接近的房子小集合,对小集合中的 Embedding 向量求均值作为该新房子的 Embedding 向量
√ 小集合确定方法:在距离,房型,价格,图片分,面积,人数等已有数据方面尽量接近
3. Embedding 的迭代更新
说下比较重要的一点,就是训练一次生成百万级向量之后,过了一段时间,由于民宿增长非常快,每天都有很多新的民宿进来,过一段时间,我需要重新训练,这个代价是比较大的,就是说如果用新的训练样本去训练,可能以前的房子最近没什幺人看,那幺它的向量可能会丢失,我们的做法:
收集最近2月的用户行为日志,生成新训练样本
预加载上一版模型参数:
新增的 p 个房子补充到参数矩阵末尾随机初始化:
只用新训练样本进行训练,导出 Embedding 矩阵同步到线上推荐模型。
这样方式的特点:
老的房子向量可以存留和持续更新
及时加入新的房子向量
4. 预加载和重新学习的效果对比
然后我们对比一个房子,假设这个房子在新的训练集中不存在,只在老的训练集中存在,通过右图,可以看到,第二列是预加载后训练的模型,第三列是重新训练(不预加载参数进行训练),发现,如果把原来老房子的向量加到重新训练的 Embedding 矩阵中,其实没意义,可以看到第三列的相似度差了很多,基本上像在随机乱猜。可见预加载训练很有必要。
四、后续
我们优化的未来计划:
引入丰富的行为类型,包括收藏,聊天,点评;聊天其实是比较重要的,用户下单前往往会和商户简单聊几句,如果发生聊天,我们会认为这是一个更重的正样本。
考虑用户的时序行为,引入 Attention 机制。
引入其他属性,作为副信息和 Embedding 一起学习,顺便把其他属性的 Embedding 也提取出来。
嘉宾介绍:
周文彪,目前担任途家网算法负责人, 专注于机器学习在商业场景的落地,参与和主持去哪网、途家网智能客服机器人,搜索推荐,运营智能化方面的工作, 为企业运营效率提升,和流量转化提升做出重要贡献。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Jupyter 在美团民宿的应用实践
- 袜子商店应用:一个云原生参照应用
- Android 应用中跳转到应用市场评分
- 授之以渔-运维平台应用模块一(应用树篇)
- OAM(开放应用模型)——定义云原生应用标准的野望
- ChromeOS 终端应用程序暗示其即将支持 Linux 应用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Developing Large Web Applications
Kyle Loudon / Yahoo Press / 2010-3-15 / USD 34.99
As web applications grow, so do the challenges. These applications need to live up to demanding performance requirements, and be reliable around the clock every day of the year. And they need to withs......一起来看看 《Developing Large Web Applications》 这本书的介绍吧!