Uber Eats has overhauled the recommendation model behind its homefeed, the main entry point for millions of users, which synthesises billions of signals from real-time behaviour to geographic context to rank merchants for each session, according to an April 2026 post by Uber engineers. The feed now spans restaurants as well as grocery, alcohol and retail.
For years the homefeed's DeepCVR model relied on aggregate statistics and hand-crafted features that missed the chronological context of a user's journey. Uber first moved to a hybrid model: one path keeps a DCNv2-based network for sparse and dense features, while a second path feeds a chronological log of clicks and orders through a transformer encoder with multi-head self-attention. Training is target-aware, appending the store being scored to the sequence so the transformer can relate past behaviour to that merchant, and the resulting sequence embedding is added to the main model's feature vector.
Features were previously computed by offline batch jobs with a lag of 24 hours or more. Uber built on its Next Personalization Platform, whose core, UserContext, is a near-real-time, event-sourced history of user actions across its businesses. Features are computed on the fly by FeatureExtractors, Java functions called by the online feature store, and an Apache Spark job reconstructs UserContext at past timestamps to generate identical features for training, with sampled feature logging to monitor online-offline parity. This reduced data lag from days to a few seconds, which Uber says helped most with cold-start users.
Uber is now replacing the hybrid design with a transformer-centred architecture as a step towards a generative recommender. Non-sequence features are fed into the transformer as part of the target tokens, and the model scores a whole list of candidate stores in one forward pass instead of one store at a time, reducing the cost per store to roughly 1/T of the original, where T is the number of stores.
To support this, Uber migrated training from Keras and TensorFlow to PyTorch 2 and added multi-hash embeddings and BF16 mixed-precision training. For serving, it moved ONNX-to-TensorRT conversion offline, removing 10 to 60 second startup delays, and separated CPU-heavy feature preprocessing from GPU inference, which delivered up to double-digit throughput improvement per node. Next steps include learning from sequences covering the whole life of an account, ranking the two-dimensional page layout of carousels, and handling real-world constraints such as delivery radius.