背景
Real-time Personalization using Embeddings for Search Ranking at Airbnb作为embedding的工业级应用非常经典,于是继续follow了这篇Applying Deep Learning To Airbnb Search,主要是阐述airbnb在应用深度学习进行排序的尝试和思考,重点在特征方面(预处理和重要性分析),而不是模型结构上。大家可能会觉得奇怪,深度学习不就是可以天然解决特征工程问题吗,为啥还把重点放在特征工程方向?下面一一解释。
划重点
参考文献对于整个论文从头到尾都有比较好的翻译和解释,我就不赘述了。我聊聊我觉得论文比较有代表性的几个点。
- 模型结构
- 本身airbnb的搜索就是一个listwise类型的排序
- 用lammdarank来直接优化ndcg
- 对比了gbdt、gvdt+fm+nn和dnn,发现数据达到一定规模的时候,dnn表现就很好了
- 特征分布平滑
- 输入nn的特征平滑分布非常重要,因为他们发现模型的参数层数越往后面越平滑
- 标准分布就用z-score进行归一化,幂分布就用log进行平滑。
- 如何测试呢?让某一个,然后特征数据进行n倍的放大,看ndcg的变化。
- 同时分析特征的分布能发现一些bug或者特征提取没考虑到的地方,比如将item经纬度特征转为用户离item距离的特征就会更平滑很多。
- 模型超参数调整
- Xavier初始化参数很重要
- LazyAdamOptimizer会更快
- Batch size设置为200,调整影响不大
- Dropout没啥用
- 特征重要性分析
- 分数分解,直接把分数分解到特征上,但是有非线性激活函数存在,这种分析不对
- 单特征法,去掉一个特征看模型变化,大概能观察,但是也不确定
- 随机打乱,对某个特征的值打乱观察最后的结果变化,不好说
- topbot分析,就是对结果排序,分析top和bot的item对应特征的取值分布,来比较,证明有效
- 失败的尝试
- id直接编码,过拟合,因为id embedding需要比较多的数据才能更好的学习,但是booking数据太少了,直接优化booking就过拟合了
- 多任务学习,只提升了long view,booking并没提高
参考文献
深度学习在 Airbnb 中的探索与应用
论文阅读之“Applying Deep Learning To Airbnb Search”
Airbnb: 深度学习在搜索排序业务中的探索与演进(二)
网友评论