Smart Recommendations
Overview
Section titled “Overview”Glean’s smart recommendation system is based on vector embedding technology. By learning your reading preferences, it calculates preference scores for articles to help you prioritize content you’re interested in.
How It Works
Section titled “How It Works”Vector Embeddings
Section titled “Vector Embeddings”When each article is ingested, the system automatically generates a vector representation (Embedding):
- Extract article title and summary
- Generate vector using Embedding model
- Store in Milvus vector database
Preference Learning
Section titled “Preference Learning”The system learns preferences based on your feedback:
| Action | Signal Weight | Description |
|---|---|---|
| 👍 Like | +1.0 | Explicit positive feedback |
| ⭐ Bookmark | +0.7 | Implicit positive feedback |
| 👎 Dislike | -1.0 | Explicit negative feedback |
Preference Model
Section titled “Preference Model”The system maintains a preference model for each user:
User Preference├── Positive Vector (positive_embedding) # Aggregated vector of liked content├── Positive Weight (positive_count) # Cumulative positive signals├── Negative Vector (negative_embedding) # Aggregated vector of disliked content├── Negative Weight (negative_count) # Cumulative negative signals├── Source Affinity (source_affinity) # Positive/negative stats per feed└── Author Affinity (author_affinity) # Positive/negative stats per authorPreference Scores
Section titled “Preference Scores”Calculation Method
Section titled “Calculation Method”Preference scores range from 0-100:
Score = (positive_similarity - negative_similarity + 1) / 2 × 100 × confidence + 50 × (1 - confidence)- Positive Similarity: Cosine similarity between article and positive preference vector
- Negative Similarity: Cosine similarity between article and negative preference vector
- Confidence: Based on feedback count, more feedback means higher confidence
New User Handling
Section titled “New User Handling”When new users have no feedback data:
- All articles default to score 50
- Displayed sorted by time
- Gradually personalized as feedback increases
Smart Recommendation View
Section titled “Smart Recommendation View”In smart recommendation view mode, articles are displayed in layers by preference score:
Layering Rules
Section titled “Layering Rules”| Layer | Score Range | Display | Sorting |
|---|---|---|---|
| 📌 Recommended | ≥ 70 | Pinned at top | By score descending |
| 📰 Normal | 40-70 | Normal display | By time descending |
| 🔽 May Not Interest | < 40 | Collapsed by default | By time descending |
Threshold Customization
Section titled “Threshold Customization”You can adjust layering thresholds in settings:
| Setting | Default | Description |
|---|---|---|
| Recommendation Score Threshold | 70 | Above this score shows in recommended layer |
| Not Interested Score Threshold | 40 | Below this score shows in collapsed layer |
Real-time Scoring
Section titled “Real-time Scoring”When you browse the article list, the system:
- Retrieves article vector representations
- Calculates similarity with your preference vectors
- Computes preference scores in real-time
- Displays articles in layers by score
Preference Updates
Section titled “Preference Updates”Incremental Updates
Section titled “Incremental Updates”After each feedback, preference vectors are updated using incremental moving average:
# Simplified examplenew_vector = (old_vector × old_weight + article_vector × signal_weight) / (old_weight + signal_weight)This approach:
- Avoids recalculating entire history
- New feedback has greater impact
- Old preferences gradually decay
Asynchronous Processing
Section titled “Asynchronous Processing”Preference updates are executed asynchronously via background tasks, not affecting main operation response times.
Embedding Providers
Section titled “Embedding Providers”The system supports multiple embedding providers:
sentence-transformers (Default)
Section titled “sentence-transformers (Default)”Runs locally, no API key required:
EMBEDDING_PROVIDER=sentence-transformersEMBEDDING_MODEL=all-MiniLM-L6-v2EMBEDDING_DIMENSION=384OpenAI
Section titled “OpenAI”Use OpenAI Embedding API:
EMBEDDING_PROVIDER=openaiEMBEDDING_MODEL=text-embedding-3-smallEMBEDDING_DIMENSION=1536EMBEDDING_API_KEY=sk-xxxVolcengine
Section titled “Volcengine”Use ByteDance’s Embedding service:
EMBEDDING_PROVIDER=volc-engineEMBEDDING_MODEL=doubao-embeddingEMBEDDING_DIMENSION=1024EMBEDDING_API_KEY=your-api-keyUsage Tips
Section titled “Usage Tips”Quick Cold Start
Section titled “Quick Cold Start”- Actively give like/dislike feedback when browsing articles
- First 10-20 feedbacks have the greatest impact on the model
- Bookmarks also count as positive signals
Continuous Optimization
Section titled “Continuous Optimization”- Regularly provide feedback to keep the model updated
- Mark disliked content too, helps filter noise
- If recommendations are inaccurate, check if you’ve given enough feedback
Next Steps
Section titled “Next Steps”- Admin Dashboard - System management features
- Configuration - Embedding configuration details