はじめに

Airbnb1 がサービスの検索システムに deep learning を導入するまでの過程を論文形式にまとめたものが 今年の 10 月末に公開されていて,読んで面白かったので紹介します.

この記事は,Wantedlyの勉強会で取り上げられた論文・技術をまとめたものです.

2018年に読んだ機械学習系論文・技術まとめ at Wantedly Advent Calendar 2018 - Qiita


背景

この論文は,新しいモデリングの手法の提案をしているというようなものではなく,Airbnb が実サービスの検索システムの問題を解決するために neural networks(以後簡単のため,NN と表記) を適用する過程で得た知見やその経緯についてまとめられたものです.

Airbnb では NN の適用前,検索システムにGBDT(Gradient Boosted Decision Tree) を利用していました.検索システムのアルゴリズムが元々の手動で作成されたスコアリングから GBDT に置き換えられた際には,Airbnb の予約システムは大きく改善されました.しかし,時間とともにその gain も頭打ちとなってしまい,その突破口を求めて NN の適用が推し進められたのです.


モデルの進化

Airbnb の deep learning への変遷は,急激な変化によるものではなく,幾度もの改善の積み重ねによるものです.以下のグラフは,そのモデルの変遷と,それによって得られた gain を示しています.横軸は本番に導入されたモデルの順を表しており,以下の順となっています.


  • Simple NN

  • Lambdarank NN

  • Decision Tree/Factorization Machine NN

  • Deep NN

評価指標には,NDCG(normalized discounted cumulative gain) が用いられており,ユーザに予約された listing(部屋) の impression を 1 ,その他の impression を 0 として評価されています.

スクリーンショット 2018-12-07 0.01.24.png

スクリーンショット 2018-12-07 0.01.38.png

"Convolutional Neural Networks for Visual Recognition"3 の著者である Andrej Karpathy によると,モデルの構築の際には "don't be a hero (いきなり複雑なモデルを扱えるようなスーパマンにはなってはいけない/なれないよ,的な意味?)" らしいのですが,Airbnb のチームは,"Why can't we be heroes?" という意気込みで,いきなり複雑なモデルの構築にとりかかり,結果として,失敗して莫大な時間を無駄にするに終わったそうです.笑


Simple NN

結局,一番最初にサービスインされたのは大変シンプルな NN (a simple single hidden layer NN with 32 fully connected ReLU activations that proved booking neutral against the GBDT model) で,入力や目的関数も GBDT と同じままでした.

先ほどのグラフからも分かる通り,このモデルの変更による gain はさほど大きいものではありませんでした.しかし,NN が本番サービスで動いてトラフィックをさばくことができるパイプラインを整備できたという点で,価値ある変化だったと述べられています.


Lambdarank NN

GBDT から Simple NN にモデルを変更したことで,サービスへの NN の導入という点ではいいスタートを切れたが,gain が大きく上がったわけではありませんでした.最初の breakthrough は,Lambdarank と NN を組み合わせたモデルを構築したことで生まれました.

Lambdarank を組み合わせることで,損失関数に評価指標である NDCG を直接組み込むことができるようになり,大きく性能が上がったそうです.


Decision Tree/Factorization Machine NN

GBDT と FM(Factrization Machine) の研究開発は同時進行で進められていて,テストデータでは NN と同程度の性能が出るまでに至っていました.しかし,それらにより出力される listing(部屋) のランキングは,NN によるものと全く異なるものでした.

そこで,既存の NN に対してこれらを組み合わせることでより良い性能を得ようと,GBDT と FM の結果を NN の特徴量に追加したした結果得られたのが次にサービスに導入されたモデルです.(下図)

スクリーンショット 2018-12-07 1.11.35.png


Deep NN

この時点で,モデルの複雑さは相当なものとなっており,機械学習における技術的負債問題が顔を覗かせつつありました.そこで最終的には,単純に DNN を大量のデータで学習されるという方針に移り変わりました.入力を 195 次元,first hidden layer が 127,second hidden layer が 83 の,(195-127-83-1) の 4 層の DNN を構築し,入力の特徴量には,価格やアメニティ,過去の予約数などといった listing のシンプルな要素を使い,feature engineering はほとんど行いませんでした.


失敗談

この論文では,うまくいってサービスインされたモデルの紹介だけでなく,失敗談についても紹介されています.

巷ではうまくいくと言われていると言われている方法を自分たちのサービスに適用しようとした際にいかにうまくいかなかったについて説明されていておもしろい知見だと思いました.


Listing ID (部屋の ID)

部屋ごとに固有の ID を embedding して特徴量に加えてみたところ,過学習がひどくてうまくいかなかったそうです.これは,Airbnb のサービスの性質上,1 つのアイテムに対してはそのアイテムがどれほど人気でも 1 年で 365 件しか予約がなされないことから,十分なデータが取れないことが原因でした.


Multi-task learning

long view (アイテムを長い時間閲覧していること) と,アイテムが予約されることにある程度の相関が見られたため,1 つのネットワークで long view と booking を同時に予測させる multi-task learning を行ってみたが,long view の予測精度は上がったが,肝心の booking の予測は変化がなく,失敗に終わりました.これは,long view が起こるのは,説明文が長かったり,珍しかったり面白かったりするアイテムの説明文に対してであり,booking には直接関係ない要素が原因だったからと考えられます.


感想

Airbnb が実際にどのように考えて,どのような経緯で検索システムを改善していったのかが分かりやすく書かれていて大変ためになりました.特に,失敗談について言及しているものも珍しく面白かったです.

自分は現在,Wantedly4 にて Recommendation Team に所属していて,この論文にかかれているのと同じような struggle を日々行っているのですが,いつか "Applying Deep Learning To Wantedly Search" という論文を書けるように頑張りたいと思いました.笑