Update case-study-pento.md

This commit is contained in:
daniel-azoulai
2025-07-14 12:56:30 -07:00
parent 4fe3895367
commit 556f1644fd
@@ -72,7 +72,7 @@ We split interactions into two sets:
* ***Negative interactions***: interactions with wi\<0 (in red)
Each set is clustered independently using HDBSCAN. This results in multiple localized regions in embedding space that reflect coherent aesthetic themes.
![HDBSCAN][/blog/case-study-pento/pento-hdbscan.png]
![hdbscan](/blog/case-study-pento/pento-hdbscan.png)
Each cluster is represented by its medoid, the most central, representative embedding in that group. These medoids become the core building blocks of the user’s taste profile.
We use medoids instead of centroids because centroids are the mean of all embeddings in the cluster, which may not correspond to any actual sample and can be influenced by outliers or non-linear distances in the embedding space. In contrast, the medoid is an actual data point that best represents the cluster while preserving the true structure of the original space, especially important when working with non-euclidean distances like cosine similarity.
@@ -84,7 +84,7 @@ Let us clarify that clearly we don't have to use the entire user history, we can
Not all tastes carry the same weight, especially over time. A cluster of artworks a user connected with months ago may no longer reflect their current preferences. To account for this, we assign a recency-aware score to each cluster, emphasizing freshness without discarding history.
Each cluster is scored based on the timestamps of the interactions it contains, using an exponential decay function:
![][/blog/case-study-pento/exponential-decay-function.png]
![](/blog/case-study-pento/exponential-decay-function.png)
Where:
* wi is the normalized rating calculated before
@@ -98,7 +98,7 @@ This scoring method captures two dimensions at once:
* ***Recency:*** Newer preferences rise to the top
* ***Strength:*** Clusters with more activity gain importance
![medoid scoring][/blog/case-study-pento/pento-medoid-scoring.png]
![medoid scoring](/blog/case-study-pento/pento-medoid-scoring.png)
The result is a dynamic prioritization of tastes. Clusters representing fleeting interests fade naturally. Those tied to long-term engagement remain prominent.
@@ -117,13 +117,13 @@ This gives us two sets of vectors per user:
Together, these sets describe not just what the user resonates with, but also what they tend to reject. It’s a more nuanced, contrastive view of preference and one that’s especially powerful when used with Qdrant’s vector search.
![user representation][/blog/case-study-pento/pento-user-representation.png]
![user representation](/blog/case-study-pento/pento-user-representation.png)
#### Retrieval via Qdrant’s Recommendation API
With each user represented by a set of positive and negative clusters condensed into multivectors, we can now move from modeling to discovery.
![multivector][/blog/case-study-pento/pento-multivector.png]
![multivector](/blog/case-study-pento/pento-multivector.png)
To recommend artists who might align with the users current aesthetic we turn to Qdrant Recommendation API. Unlike a standard vector search, this Qdrant’s functionality lets us provide both what we are looking for, represented by the positive multivector, and what we want to avoid, represented by the negative multivector.
@@ -148,13 +148,13 @@ This behavior makes intuitive sense for our use case. Two artists don’t need t
To compare multivectors themselves Qdrant uses the MaxSim function. This calculates the similarity between two multivectors by summing the maximum similarity between each vector in one matrix and the best-matching vector in the other:
![maxsim][/blog/case-study-pento/pento-max-sim-function.png]
![maxsim](/blog/case-study-pento/pento-max-sim-function.png)
### Addressing the cold start problem
### Every recommender hits a wall when it comes to new users or new items, what’s known as the cold start problem. Without interaction data, how do you know what to recommend?
Every recommender hits a wall when it comes to new users or new items, what’s known as the cold start problem. Without interaction data, how do you know what to recommend?
### Our answer is a friction-free onboarding process, in which we show a carefully curated mix of artworks that span diverse aesthetic themes. Each early interaction immediately feeds into their taste clusters. Within a handful of interactions, the system already sees a rough silhouette of their style and can start returning genuinely relevant recommendations, no long warm-up, no guesswork.
Our answer is a friction-free onboarding process, in which we show a carefully curated mix of artworks that span diverse aesthetic themes. Each early interaction immediately feeds into their taste clusters. Within a handful of interactions, the system already sees a rough silhouette of their style and can start returning genuinely relevant recommendations, no long warm-up, no guesswork.
### Final Thoughts