Personalizing product results in real time is a complex challenge, particularly when shoppers are anonymous or exploring multiple categories. Traditional ranking models often rely on static profiles or past behavior, which can miss the mark in fast-changing sessions.
Coveo’s Intent-Aware Product Ranking (IAPR) model addresses this by analyzing live user signals, clicks, views, and queries, to infer current intent and re-rank products accordingly.
In this post, we’ll explore how IAPR works, how to visualize the underlying product vector space using Uniform Manifold Approximation and Projection (UMAP) and Hierarchical Density-Based Spatial Clustering of Applications with Noise (HDBSCAN), and how these insights can be used to demonstrate real-time personalization in action.
What Is Intent-Aware Product Ranking?
Coveo Machine Learning (Coveo ML) Intent-Aware Product Ranking (IAPR) models personalize the shopping experience in real time based on the visitor’s intent, a concept known as personalization-as-you-go (PAYG).
IAPR is a ML model developed by Coveo that enhances product ranking on search results pages by analyzing user sessions and queries. It leverages product and session embeddings to tailor results based on individual user intent in real time.
Behind the scenes, the system is inspired by prod2vec principles (similar to word2vec), but the production model is far more sophisticated. Coveo uses a two-tower deep neural network trained on customer engagement data and enriched with context, content, and behavioral features. This creates high-quality product embeddings where related products are positioned close together— even for new or low-interaction items thanks to cold-start support.
On top of that, session embeddings evolve throughout the visit, synthesizing what the user has interacted with and adapting as their intent changes.
Why Is “Personalization-as-you-go” So Complicated?
Personalization is now the default expectation. Shoppers want ecommerce experiences that respond instantly to their needs, even if they’re anonymous, browsing across multiple categories, or exploring something new. Personalization-as-you-go offers major benefits: it doesn’t rely on historical data, respects user privacy, adapts in real time, and drives measurable business impact.
But delivering this level of relevance mid-session, without prior context, is difficult to get right. Personalizing for one user is hard enough; doing it for thousands at once, across diverse intent patterns, and within milliseconds is a complex challenge. Here’s why:
1. We’re Learning in Real Time
As a customer clicks, scrolls, and views products, we’re building a live picture of what they’re interested in. But:
- People change their minds quickly.
- They may browse across multiple categories (e.g., looking at boots and office chairs).
- We need to decide which signals are important right now.
Making the right judgment in real time is tricky — it’s like trying to guess someone’s taste as they walk through a store.
2. Decisions Need to Be Made in Milliseconds
When someone clicks on a new product or enters a search term, our system has only a tiny fraction of a second to:
- Analyze what the user has looked at so far
- Update their profile
- Re-rank and personalize the results
- Deliver the right things, instantly
This all has to happen before the page finishes loading. There’s no room for delay — or the experience feels broken.
3. One Size Doesn’t Fit All
Shoppers’ queries vary widely:
- Some know exactly what they want (e.g., “black leather boots under $250”), providing detailed cues through their query to guide results.
- Others are just browsing or exploring with broad queries (e.g., “boots”), where intent is less clear. In these cases, leveraging real-time behavioral signals like clicks, views, and interactions becomes especially impactful.
The system has to adapt its personalization strategy not just based on here the shopper is in their journey, but also on the specificity of their query. Doing this correctly, without being too aggressive or too vague, requires finesse.
4. Balancing Relevance with Discovery
If we only show what the system thinks someone wants, we might miss opportunities for discovery and cross-sell. But if we show too much variety, it stops feeling personal.
Getting that balance right — between relevant and serendipitous — is an art powered by smart algorithms and real-time decisioning.
How Coveo Implements Personalization-As-You-Go
IAPR models rank products on search result pages based on the visitor’s shopping intent.
They leverage Coveo’s product embeddings and vector capabilities. Think of these as mathematical “maps” that capture how products relate to one another. Leveraging these capabilities allows IAPR models to detect visitors’ shopping objectives and react to intent changes in real time. This means that IAPR models react to visitors’ queries by boosting products that best match the current visitor’s shopping context, whether they’re authenticated or not.
IAPR is based upon a prod2vector algorithm. If that sounds familiar, it’s because it’s inspired by word2vec, a well-known technique in natural language processing. Word2vec teaches computers how words relate to each other (for example, understanding that “king” and “queen” share a relationship). Prod2vec applies that same logic to ecommerce: it looks at how people interact with products — what they view, buy, or add to their carts together — to understand the “relationships” between those products.
For example:
- Shoppers who view “running shoes” often buy “moisture-wicking socks.”
- Shoppers who buy “jeans” often view “graphic t-shirts.”
These patterns become part of the embedding space used for ranking.
A Fashion Store Example of prod2vec
Imagine you run an online fashion store. Customers browse and buy items such as:
- Clothing like skinny jeans, leather jackets, maxi dresses, and graphic t-shirts
- Shoes like chunky boots, white sneakers, or wedge sandals
- Accessories like sunglasses and crossbody bags
To make sense of all this browsing and buying behavior, prod2vec follows a few simple steps, turning products into vectors, mapping how shoppers interact with them, and then learning which items naturally “go together.”
Step 1: Create Product Vectors
For each product in the Coveo index, a product vector is created based on the title, description, and available metadata. The vector is stored as a metadata field in the index. Each product is turned into a vector, and those vectors that are close together represent frequently co-bought items. We can then use those vectors to boost results and show recommendations throughout the user journey.

Step 2: Collect Sessions Related to Shopping Baskets
Each customer’s shopping session is tracked, adding/removing products to their shopping basket. For example:

Step 3: prod2vec Learns Relationships
The algorithm scans all sessions and learns:
- Skinny jeans are often bought with white sneakers
- Maxi dress appears with crossbody bag and wedge sandals
- Graphic t-shirt shows up with skinny jeans
Visualizing Product Vectors with UMAP and HDBSCAB
Even though product embeddings live in hundreds of dimensions, it’s possible — and incredibly useful — to visualize them.
This is where UMAP and HDBSCAN come in.
UMAP: Turning High-Dimensional Embeddings into a 2D Map
UMAP flattens the complex, high-dimensional product vector space into a 2D scatterplot.
On this map:

Dots that appear close together represent similar products
Dots far apart represent unrelated products
It’s essentially a visual “brain map” showing how shoppers implicitly group products through their behavior.
HDBSCAN: Finding Natural Product Clusters
Once you have the 2D map, HDBSCAN identifies clusters — product groups that naturally belong together:
- athleisure items
- workwear
- outdoor gear
- accessories
- niche segments
This clustering helps teams see clear product families and outliers at a glance.
These visualizations help teams — and demo audiences — understand:
- why certain products get boosted
- how the user vector aligns to specific clusters
- which product groups influence real-time ranking
In a demo, you can literally show:
Here’s the cluster activated by the shopper’s behavior. Here’s why these items were boosted. Here’s how IAPR changed the results.
It turns a complex ML concept into a simple, intuitive story.

Intent-Aware Product Ranking in Action
Let’s see an example of this in action. Below you see the results for the exact same query, but with two different contexts/intents. Because of the different context, the IAPR ML Model responds with different, personalized results.

Why the Results Change (and Why It Matters)
The results look different because the experience is being personalized in real time based on the user’s behavior.
As someone browses, clicks, and searches products, Coveo builds a dynamic session profile represented by a user product vector. This vector captures the kinds of products a shopper seems to be interested in during that session.
Instead of showing the same generic product list to everyone, the model boosts products that are most similar to that user’s evolving preferences. It measures that similarity using something called cosine distance, a mathematical way of finding which products “point” in the same direction as the shopper’s intent.
In short: We’re tailoring the product results based on what the customer is engaging with — leading to a more relevant, personalized, and effortless shopping experience.

