Airbnbの事例に学ぶエンベディングベース検索（EBR）

膨大な宿泊施設データから最適な検索結果を提供するという課題に、Airbnbはどのように取り組んだのでしょうか？

本記事ではMediumに掲載されたAirbnbのエンジニアリングチームによる記事「[Embedding-Based Retrieval for Airbnb Search](https://medium.com/airbnb-engineering/embedding-based-retrieval-for-airbnb-search-aabebfc85839)」の内容をもとに、エンベディングベース検索（Embedding-Based Retrieval: EBR）」と得られた効果について解説します。

## 目次

1. [Airbnbが直面した検索の課題](#1-airbnbが直面した検索の課題)
2. [エンベディングベース検索とは](#2-エンベディングベース検索とは)
3. [システム構築の3つの取り組み](#3-システム構築の3つの取り組み)
4. [学習データの作成法：ユーザー行動から学ぶ](#4-学習データの作成法ユーザー行動から学ぶ)
5. [ツータワーアーキテクチャの採用](#5-ツータワーアーキテクチャの採用)
6. [提供戦略：IVFとHNSWの比較検討](#6-提供戦略ivfとhnswの比較検討)
7. [Airbnbが得た具体的な成果](#7-airbnbが得た具体的な成果)
8. [まとめ：EBRから学べること](#8-まとめebrから学べること)

## 1. Airbnbが取り組んだ課題

「カリフォルニア」や「フランス」などの広大なエリア、あるいは「パリ」「ロンドン」などの人気目的地で宿泊先を探すとき、検索結果には何百万もの宿泊施設が該当する可能性があります。さらに、「柔軟な日付検索」のような新機能により、検索の複雑さは一層増しています。

Airbnbが取り組んだのは、このような大量の検索候補から、どのようにして効率的かつ正確に関連性の高い宿泊施設を見つけ出すかという課題でした。

## 2. エンベディングベース検索とは

エンベディングベース検索（EBR）は、宿泊施設（リスティング）と検索クエリの両方を数値ベクトル（エンベディング）に変換し、それらの類似性を計算して最適な検索結果を提供するアプローチです。

Airbnbの検索プロセスは主に以下の3段階で構成されています：

1. **初期フィルタリング**：検索条件に合致する数百万の宿泊施設を対象
2. **候補選定（EBRの役割）**：**計算コストの高いモデルで処理できる数に絞り込み**
3. **詳細ランキング**：最終的な順位付け

EBRは特にこの2番目のステップを担い、**初期の膨大な候補から関連性の高いリスティングを効率的に選び出す役割**を果たしたとのことです。

::: note info
この点はRAG開発にも応用できそうですね
:::

## 3. システム構築の3つの取り組み

Airbnbのチームは、EBRシステム構築にあたって、次の3つの課題に取り組みました：

1. **学習データの構築**：適切なクエリとリスティングのペアをどのように作成するか
2. **モデルアーキテクチャの設計**：効率的なエンベディング生成の仕組み
3. **オンライン提供の戦略**：高速な検索を実現する方法

それぞれの課題に対するAirbnbの具体的なアプローチを見ていきましょう。

## 4. 学習データの作成法：ユーザー行動から学ぶ

EBRモデルのトレーニングには、「このクエリに対してはこのリスティングが関連性が高い」という教師データが必要です。Airbnbは **対照学習（Contrastive Learning）** という手法を採用しました。

### 対照学習の活用

対照学習では、各クエリに対して「ポジティブ（関連性が高い）」と「ネガティブ（関連性が低い）」のリスティングペアを用意します。トレーニング中、モデルは以下を学習します：

- クエリとポジティブリスティング間の類似度を高くする
- クエリとネガティブリスティング間の類似度を低くする

この手法により、同様の意味を持つデータは埋め込み空間上で近く、異なるデータは遠くに配置される表現を学習します。

### ユーザージャーニーからのデータ作成

Airbnbはユーザーの実際の検索・予約行動から学習データを構築しました：

1. 予約完了したユーザーの検索履歴を「旅行」としてグループ化
2. 各旅行内で実行された全検索を分析
3. 最終的に予約されたリスティングを「ポジティブ」、見たが予約しなかったリスティングを「ネガティブ」としてペアを構築

興味深いのは、ネガティブサンプルの選択方法です。ランダムではなく、ユーザーが実際に見たリスティングや操作したリスティングを選ぶことで、モデルのパフォーマンスが大幅に向上したとされています。詳細なユーザー行動履歴を持っているAirbnbならではの工夫ですね。

## 5. Two-Tower アーキテクチャの採用

Airbnbは伝統的な**Two-Tower ネットワーク**設計を採用しました。このモデルは2つの独立したニューラルネットワーク（「タワー」）で構成されています：

1. **リスティングタワー**：宿泊施設の特徴を処理
   - 過去のエンゲージメント率
   - アメニティ情報
   - 収容人数など

2. **クエリタワー**：検索クエリの特徴を処理
   - 検索地域
   - ゲスト数
   - 滞在期間など

### オフライン計算による最適化

ツータワー構造の大きな利点は、**リスティングタワーをオフラインで事前計算できる点です。** Airbnbはリスティングエンベディングを日次バッチジョブで計算することで、オンラインレイテンシを大幅に削減しました。

リアルタイム検索リクエスト時には、クエリタワーのみを評価すればよくなり、レスポンス時間が短縮されました。これは膨大なリスティングデータを扱うAirbnbのシステムで特に重要な最適化となりました。

## 6. 提供戦略：IVFとHNSWの比較検討

検索システムの提供インフラとして、Airbnbはいくつかの近似最近傍（ANN）ソリューションを検討しました。最終的な候補として残ったのは次の2つです：

1. **転置ファイルインデックス（IVF）**：ベクトルデータを複数のクラスタに分割し、クラスタ単位で検索を行う手法
2. **階層的ナビゲーション可能なスモールワールド（HNSW）**：グラフベースの高速な近似最近傍探索アルゴリズム

### IVF採用の決め手

評価指標（リコール）においては、HNSWがIVFよりやや優れていました。しかし、実運用環境ではIVFが選ばれました。その理由は：

1. **リアルタイム更新への対応**：Airbnbでは宿泊施設の価格や空室状況が頻繁に更新され、HNSWではメモリ使用量が大きくなりすぎる問題が発生した

2. **フィルタリングとの相性**：ほとんどの検索には地理的フィルタなどが含まれており、HNSWとの組み合わせではレイテンシが悪化した

これは理論的な性能だけでなく、実際のユースケースに合わせた選択の重要性を示す好例です。

:::note info
HNSWの実運用上の課題として興味深いです。
:::

### 類似度関数の選択

エンベディング間の類似度測定には、**ドット積**と**ユークリッド距離**の両方が検討されました。パフォーマンス上は同等でしたが、ユークリッド距離を使用すると均等なクラスタが生成されるという利点がありました。

Airbnbのチームは、ドット積はベクトルの方向のみを考慮し大きさを無視するため、履歴カウントに基づく特徴が多いAirbnbの場合にクラスタの不均衡を生じさせると分析しています。IVF検索においてクラスタサイズの均一性は品質に大きく影響するため、これは重要な発見でした。

## 7. Airbnbが得た具体的な成果

このEBRシステムは検索とEメールマーケティングの両方の本番環境に導入され、A/Bテストでは統計的に有意な予約数の増加をもたらしました。記事によれば、この改善は過去2年間の検索ランキングに対する機械学習改善の中でも最大規模のものと同等だったとのことです。

具体的な改善点として、EBRシステムがクエリのコンテキストを効果的に取り込み、検索段階でリスティングをより正確にランク付けできるようになったことが挙げられています。これは特に適格な結果が多いクエリに対して、ユーザーにより関連性の高い結果を表示することを可能にしました。

## 8. まとめ：EBRから学べること

Airbnbのエンベディングベース検索の事例から、大規模検索システムの改善について以下のような教訓を得ることができます：

1. **ユーザー行動データの活用**：実際のユーザージャーニーからポジティブ・ネガティブサンプルを構築することで、より関連性の高い検索結果を提供できる

2. **効率的なアーキテクチャ設計**：ツータワー構造により計算負荷を分散し、一部をオフライン化することでレイテンシを削減できる

3. **理論と実践のバランス**：理論上最適なアルゴリズムよりも、実際のユースケースに適したソリューションを選択することの重要性

4. **細部への配慮**：類似度関数の選択など、一見些細に思える決定が全体のパフォーマンスに大きな影響を与えることがある

Airbnbの事例は、機械学習を実際のビジネス課題に適用する際の実践的アプローチを示すよい例になりそうです

## 参考情報

- 元記事 (Huiji Gao他、Airbnbのエンジニアリングチームによる)：[Embedding-Based Retrieval for Airbnb Search - The Airbnb Tech Blog](https://medium.com/airbnb-engineering/embedding-based-retrieval-for-airbnb-search-aabebfc85839)
- IVF関連資料：
  - [Inverted File Indexing (IVF) in FAISS: A Comprehensive Guide](https://medium.com/@Jawabreh0/inverted-file-indexing-ivf-in-faiss-a-comprehensive-guide-c183fe979d20)
  - [Everything You Need to Know about Vector Index Basics - Zilliz Learn](https://zilliz.com/learn/vector-index)
- HNSW関連資料：
  - [HNSWアルゴリズム入門：高速な類似検索の仕組み](https://qiita.com/yonaka15/items/d3cc001ebeffab5442ea)
- 対照学習関連資料：
  - [Contrastive Representation Learning](https://lilianweng.github.io/posts/2021-05-31-contrastive/) - 対照学習の包括的な解説
  - [Understanding Contrastive Learning](https://towardsdatascience.com/understanding-contrastive-learning-d5b19fd96607) - 対照学習の基本概念の解説