Food Discovery with Uber Eats: Using Graph Learning to Power Recommendations
Source: Uber Engineering Blog
Overview
This Uber Engineering blog post explains how Uber Eats applies graph learning techniques to improve food discovery and recommendations on its platform. Unlike generic e-commerce recommendation, food discovery on Uber Eats is query-driven: users search for dishes (e.g., "pizza" or "pad thai"), and the system must map those queries to dishes offered across thousands of restaurants.
Key Ideas
- Dishes as first-class entities: Uber Eats treats dishes as the central unit of discovery, connecting users, restaurants, and cuisines in a shared graph structure.
- Graph embeddings: The team learns embeddings for users, dishes, restaurants, and cuisines so that semantically related items are close in vector space. These embeddings power nearest-neighbor retrieval of candidate dishes and restaurants.
- PyTorch-BigGraph (PBG): Large-scale graph embeddings are trained with PyTorch-BigGraph, Uber's open-source framework for multi-node, multi-machine embedding training on graphs with billions of edges.
- GraphSAGE for inductive learning: To handle new users, dishes, and restaurants that appear after training (the cold-start problem), the team uses GraphSAGE, an inductive graph neural network that generates embeddings from node features and sampled neighborhoods rather than memorizing per-node vectors.
- Retrieval + ranking pipeline: Graph-learned embeddings serve as a retrieval (candidate generation) layer; downstream ranking models then personalize results using real-time features.
Why Graph Learning?
Traditional keyword or content-based matching struggles with the vocabulary gap between user queries and menu descriptions. A graph that links dishes to restaurants, cuisines, and user interactions lets the model learn that, for example, different restaurants' dishes can satisfy the same intent, improving recall for query-to-dish matching.
Engineering Considerations
The post discusses production requirements for serving embeddings at Uber Eats scale, including training data construction from interaction logs, incremental updates for new items, and low-latency nearest-neighbor search for online retrieval.
Takeaways for Practitioners
1. Model the domain structure (users–dishes–restaurants–cuisines) explicitly as a graph rather than relying solely on ID-based embeddings. 2. Use transitive methods (PBG) for scale and inductive methods (GraphSAGE) for generalization to unseen nodes. 3. Treat embeddings as a retrieval layer, combining them with feature-rich rankers for final personalization.
> For full details, figures, and evaluation results, refer to the original blog post.