深度学习在 Airbnb 中的探索与应用( 二 )


发现:

  • DL 中的每一层 , 输出都是越来越平滑上图中 , 从下到上 , 分别是模型每层的输出
  • 如果在输入层就平滑 , 将会提升泛化能力底层的平滑输出 , 将保证高层对未知特征组合的稳定性
  • 便于排查异常 , 保证特征完整性下图是预定天数特征 , 左边为原始预定天数分布 , 右图为考虑预定天数中值后的分布

深度学习在 Airbnb 中的探索与应用文章插图
3. 特殊特征 ( 经纬度 ) 平滑
深度学习在 Airbnb 中的探索与应用文章插图
经纬度平滑过程:
直接使用经纬度特征 , 分布极其不均衡 ( 见上图第一层图片 )。
第二层图片左图 , 是对目标地点的距离特征分布 , 可以看出大部分的点走在原点位置 , 其他的很多点以原点为中心均匀的分散开来 。
第二层图片右图 , 是对经纬度分别取 log。
将经纬度的 offset 分别取 log ( 上图最底层图片 ), 得到基于距离的全局特征 , 而不是基于特定地理位置的特征 。
4. 离散特征 embedding
深度学习在 Airbnb 中的探索与应用文章插图
发现:
  • 虽然 item-embedding 在此场景不适用 , 但一些零散特征的 embedding 仍然有效 ( 主要针对不可比较、选项较多的离散值特征 )
  • 利用搜索城市后的街道连续点击行为 , 构建街道 embedding
  • 对全局query搜索内容进行初步聚合 , 再建立 embedding , 产出作为用户搜索特征输入
5. 特征重要性评估
失败做法:
  • 分解深度学习的 score , 给出每一部分特征重要度分析:多层非线性断绝分解的希望
  • 依次移除特征 , 查看模型性能变化 。 分析:特征之间不完全独立 , 在特征工程后尤其如此
  • 随机修改某些特征 , 查看性能变化分析:特征依旧不独立 , 没法排除 noise
成功做法:( TopBot 分析法 )
  • 产出测试集预测的 list 排序
  • 观察某个特征在头部 list 与尾部 list 的区别 , 有区分度为重要特征
  • 下图中 , 左侧为 price, 头部 price 比尾部低;右侧为评论数 , 头部与尾部没区别

深度学习在 Airbnb 中的探索与应用文章插图
五、系统工程
Airbnb 系统介绍:
1. 工程架构
  • JavaServer 处理 query
  • Spark 记录 logs
  • Tensorflow 进行模型训练
  • JavaNNLibrary 线上低延迟预测
2. 数据集
  • GBDT 时代采用 CSV, 读入耗时长
  • Tf 时代改用 Protobufs, 效率提升17倍 , GPU 利用率达到90%
3. 统计类特征
  • 大量样本共同拥有的统计类特征 , 成为数据读取瓶颈
  • 整合统计类特征 , 将其汇总后 , 看作不可训练的 embedding 矩阵 , 作为 tf 的统计特征节点输入层参数
4. 超参数
  • Dropout 层没有带来增益
  • 初始化采用 {-1,1} 的范围均匀随机 , 比全0初始化要好
  • Batchsize 选用200 , 最优化使用 lazyAdom
作者:马宇峰 , 阅文信息 资深研发工程师 内容挖掘平台技术负责人 。 前百度高级研发工程师 , 研究方向主要包括知识图谱、用户理解、推荐系统 。 曾获2014百度知识图谱竞赛第1名 。