crackcell's dustbin home projects
首页 > Airbnb搜索排序中深度学习的应用 > 正文

Airbnb搜索排序中深度学习的应用

1 简介

Airbnb 2018年发布的论文,介绍了在Airbnb搜索排序系统的演进以及深度学习的应用1

2 模型演进

Airbnb搜索的排序模型经历过几个阶段:

  1. 基于人工设计的打分函数
  2. 基于GBDT的模型
  3. 基于神经网络的模型

这篇文章主要介绍在GBDT之后,在神经网络模型上的演进。

2.1 神经网络模型的演进

2.1.1 模型评估

离线是用NDCG作为评估指标:有转化的商品曝光标注为1,其他标注为0。

2.1.2 Simple NN

这是GBDT基础上的第一次尝试,遵循“don't be a hero”2的思想,小步快跑,从简单的模型结构开始演进。

模型结构:

  • 输入:保持跟GBDT模型一样的特征输入
  • 结构:一个32个单元的单隐层网络+ReLU激活函数
  • 损失函数:保持跟GBDT一样的平方和损失函数

这个阶段最大的收获在于,因为模型比较简单,可以把更多的精力投入到解决深度学习相关的工程问题。

2.1.3 LambdaRank NN

“don't be a hero”让团队在深度学习上快速起步了,但模型毕竟简单,收益提升空间有限,所以在这个阶段没有停留太久就开始继续了模型迭代。

引入LambdaRank给了模型直接优化NDCG评估指标的能力,相对于Simple NN,有两个关键提升点:

  1. 以pairwise的方式构建商品偏好对样本:{下单的商品,未下单的商品},训练过程中使用cross entropy loss
  2. 将pairwise的样本顺序调换,得到NDCG的变化,将其作为样本权重。这样做的目的在于更加重视将出现在高位的样本

2.1.4 GBDT/FM NN

特征先经过GBDT和FM,将GBDT和叶子节点ID和FM的预测结果作为特征输入Simple NN。算是比较常规的做法。

2.1.5 深度神经网络

将训练数据变成10倍,并使用深度神经网络模型。

2层隐层的深度神经网络:

  • 输入层接收195个特征输入
  • 127个单元的fc+ReLU
  • 83个单元的fc+ReLU

2.2 一些失败的尝试

  • 将商品ID Embedding之后输入神经网络。这种做法在其它场景有不少成功经验,但由于Airbnb上商品ID维度数据稀疏,效果不好,容易导致模型过拟合
  • 多任务学习,尝试同时优化浏览长度和下单

3 特征工程的一些经验

3.1 特征值归一化

GBDT对输入值的归一化要求相对不高,但神经网络特别需要特征值归一化。常见做法:

  • 对于正态分布的特征: \(\frac{value - \mu}{\sigma}\)
  • 对于幂律分布的特征: \(\log{(\frac{1 + value}{1 + median})}\)

3.2 关注特征分布

文中提到了,会关注特征分布的平滑性,有一些好处,例如,有利于发现数据bug以及利于模型泛化。

3.3 ID特征

在GBDT时代,这样的特征需要经过比较多的人工特征工程。在NN时代,就相对简单一些。

例如,想端到端学习用户某个城市下区域喜好程度:

  • 原始数据:
    1. query中包含的城市信息,例如“San Francisico”
    2. 商品的位置经过Google S23索引之后的cell id
  • 数据处理:将两个信息组合起来,然后经过一次hash转换成一个整数
  • embedding处理之后喂给神经网络

4 工程经验

4.1 数据格式

数据格式从csv换成protobuf+ tf dataset api,将io时间从75%占比优化到10%

4.2 优化静态特征

例如一个商品对应的房间数,常规做法是在构建样本的时候,从别的数据源join进来。Airbnb的优化方式是构建一个不可训练的embedding矩阵,输入的房价的id,矩阵乘之后就得到对应的静态数据。这样做可以使embedding存储在GPU显存中,实现加速。

这个技巧挺有意思,回头试试。

5 模型超参

5.1 Dropout

Airbnb尝试了后没有效果。

5.2 权重初始化

  • 对于网络权重,使用Xavier4初始化
  • 对于embedding权重,使用随机始化成{-1,1}的正态分布

5.3 学习率

使用默认参数的Adam,想要再提升效果,比较困难。Airbnb目前LazyAdamOptimizer,训练比较大的embedding有速度优势。

5.4 批大小

使用的200。

Footnotes:

1

Haldar, M. , Abdool, M. , Ramanathan, P. , Xu, T. , Yang, S. , & Duan, H. , et al. (2018). Applying deep learning to airbnb search.

2

Andrej Karpathy. 2018. CS231n Convolutional Neural Networks for Visual Recognition. http://cs231n.github.io/convolutional-networks/

4

Xavier Glorot and Yoshua Bengio. 2010. Understanding the difficulty of training deep feedforward neural networks. In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics (Proceedings of Machine Learning Research), Yee Whye Teh and Mike Titterington (Eds.), Vol. 9. PMLR, Chia Laguna Resort, Sardinia, Italy, 249–256.

Date: Thu Mar 21 16:13:22 2019

Author: Menglong TAN

Created: 2019-03-22 Fri 01:02

Validate

Modified theme and code from Tom Preston-Werner.