Food Discovery with Uber Eats: Using Graph Learning to Power Recommendations
Source: Uber Engineering Blog
Overview
Uber Eats faces a distinctive recommendation challenge: unlike general e-commerce, users often do not know exactly what they want when searching for food. Queries such as "comfort food" or "hearty soup" require matching user intent against dishes rather than restaurants. To improve this food discovery experience, Uber built a graph learning system that learns embeddings for dishes from user interaction data.
Why Graph Learning
Traditional content-based similarity (matching dish titles or descriptions) is brittle: many dishes with similar ingredients have very different names, and valuable signals live in user behavior. Uber therefore models the platform as a graph where:
- Nodes represent entities such as users, dishes, menus, and restaurants.
- Edges encode relationships such as ordered-with, added-to-cart, viewed, and content associations.
- Scalability: neighborhood sampling and mini-batch training allow the GNN to scale to Uber Eats' large dish catalog.
- Cold start: content-based edges (ingredients, menus) help embed new dishes with little interaction data.
- Evaluation: offline embedding quality checks were complemented by online experiments measuring user engagement.
- A Survey of Graph Retrieval-Augmented Generation for Customized LLMs
- RAG vs. GraphRAG: A Systematic Evaluation and Key Insights
- Algolia's Knowledge Graphs and Ontologies
- Graph learning turns implicit user behavior (co-orders, co-views) into dense dish representations for recommendation.
- GNN embeddings act as pre-trained item features that plug into existing two-tower retrieval/ranking stacks.
- Combining behavioral and content edges mitigates cold-start and improves generalization for food discovery.
Approach
The system uses a GraphSAGE-style Graph Neural Network (GNN) to learn dish embeddings:
1. Graph construction: order and session logs from Uber Eats are aggregated to build a dish co-occurrence graph, enriched with content edges (e.g., dishes sharing ingredients or belonging to the same menu). 2. Embedding learning: a multi-relational GraphSAGE model samples neighborhoods and aggregates messages from different edge types, producing embeddings for each dish. 3. Retrieval and serving: learned dish embeddings are indexed for nearest-neighbor search. When a user views or orders a dish, similar dishes (and their restaurants) are retrieved as recommendations.
The dish embeddings are also used in downstream models — Uber Eats' production recommendation system uses a two-tower (query/dish) neural ranking model, and the GNN-based embeddings serve as pre-trained item representations that improve retrieval quality.
Results
Uber reports that, compared to the previous keyword- and content-similarity-based approach, the graph-based food discovery system retrieves more relevant and diverse dish recommendations. Online A/B experiments showed the new system outperformed the legacy content-similarity method, and the embeddings generalize better because they combine behavioral co-order signals with dish content.