Building Recommendation Systems

1. Storing Item Embeddings

Example: Item Upsert

index.upsert(vectors=[{
    "id": f"item-{item.id}",
    "values": embed_item(item),
    "metadata": {"category": item.category, "price": item.price, "in_stock": True},
} for item in catalog], namespace="items")
FieldTypical Source
Title + descriptionText embedding
ImageCLIP / vision embedding
Tags / categoryConcatenated

2. Generating User Embeddings

Example: Avg Interacted Items

import numpy as np

def user_vec(interactions):  # list of (item_id, weight)
    vs = index.fetch(ids=[i for i, _ in interactions])["vectors"]
    arr = np.array([np.array(vs[i]["values"]) * w for i, w in interactions])
    avg = arr.sum(0) / sum(w for _, w in interactions)
    return (avg / np.linalg.norm(avg)).tolist()

3. Finding Similar Items

Example: Item-to-Item

res = index.query(id=f"item-{item_id}", top_k=11)  # +1 to skip self
recs = [m for m in res["matches"] if m["id"] != f"item-{item_id}"][:10]

4. Implementing Collaborative Filtering

ApproachVector Source
User-basedFind similar users → recommend their items
Item-basedFind items co-interacted
Matrix factorizationALS embeddings → Pinecone

5. Using Content-Based Filtering

StrategyDetail
Item-text embeddingFrom titles/descriptions
Multi-modalCombine image + text vectors
Cold start friendlyWorks without interaction history

6. Implementing Hybrid Recommendations

Example: Blend Signals

qv = blend(user_pref_vec, current_item_vec, alpha=0.6)
res = index.query(vector=qv, top_k=10,
    filter={"in_stock": True})

7. Personalizing Results

SignalUsage
User vectorBias query vector
DemographicFilter on age_group, region
Session contextRecent views as positive examples

8. Filtering by Availability

Example: Stock + Region

res = index.query(vector=qv, top_k=20,
    filter={"$and": [
        {"in_stock": True},
        {"ships_to": {"$in": [user.country]}},
        {"price": {"$lte": user.budget}},
    ]})

9. Implementing Real-Time Updates

EventAction
New itemEmbed + upsert
Out of stockupdate(set_metadata={"in_stock": False})
User interactionUpdate user vector in cache

10. Measuring Recommendation Quality

MetricMeaning
Hit Rate@K% sessions with a click in top-K
nDCG@KGraded relevance
Coverage% catalog ever recommended
DiversityMean pairwise distance in top-K
Revenue/conv liftBusiness-level A/B