--- id: wiki-2026-0508-adaptive-curation title: Adaptive Curation category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Dynamic Curation, Personalized Curation, Active Curation] duplicate_of: none source_trust_level: A confidence_score: 0.88 verification_status: applied tags: [recsys, curation, personalization, active-learning, feedback] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: Python framework: PyTorch/scikit-learn --- # Adaptive Curation ## 매 한 줄 > **"매 selection 의 close-loop — 매 user feedback 의 corpus 의 reshape."**. Adaptive curation 의 static collection 의 X, 매 user signal (click, dwell, rating, embedding drift) 의 use → 매 corpus / ranking / recommendation 의 dynamic adjust. 매 2026 의 LLM-augmented (semantic embedding + bandits + RLHF) 의 standard. ## 매 핵심 ### 매 Components - **Catalog / corpus**: candidate items. - **User signal**: explicit (rating, like) + implicit (click, dwell, scroll depth). - **Ranker / selector**: scoring function (often embedding sim + bandit + LTR). - **Update loop**: feedback → model update → next selection. ### 매 Algorithms - **Collaborative filtering**: matrix factorization (SVD, ALS). - **Content-based**: TF-IDF / semantic embedding (sentence-transformers, OpenAI ada-3, Cohere v4). - **Hybrid**: 매 collaborative + content. - **Bandits**: ε-greedy, UCB, Thompson sampling — 매 explore/exploit. - **Contextual bandit / LinUCB**: user feature 의 use. - **RLHF / DPO**: 매 LLM-era curation (Claude, GPT-5). ### 매 응용 1. News feed (TikTok, X). 2. E-commerce product ranking (Amazon, Coupang). 3. Knowledge base curation (Notion AI, Glean). 4. RAG corpus filtering — 매 LLM context 의 dynamic selection. ## 💻 패턴 ### Pattern 1 — Embedding-based candidate retrieval ```python import numpy as np from sentence_transformers import SentenceTransformer model = SentenceTransformer("all-MiniLM-L12-v2") docs = ["AI safety", "RAG patterns", "vector DB"] doc_emb = model.encode(docs, normalize_embeddings=True) def retrieve(query: str, k=5): q = model.encode(query, normalize_embeddings=True) scores = doc_emb @ q return np.argsort(-scores)[:k] ``` ### Pattern 2 — Thompson Sampling bandit ```python import numpy as np class ThompsonSampler: def __init__(self, n_arms): self.alpha = np.ones(n_arms) self.beta = np.ones(n_arms) def select(self): samples = np.random.beta(self.alpha, self.beta) return int(np.argmax(samples)) def update(self, arm, reward): if reward > 0: self.alpha[arm] += 1 else: self.beta[arm] += 1 ``` ### Pattern 3 — Click-through online update ```python def on_click(user_id, item_id, dwell_s): reward = 1 if dwell_s > 5 else 0 bandit.update(item_id, reward) feature_store.log(user_id, item_id, dwell_s) ``` ### Pattern 4 — Contextual ranker (LightGBM LTR) ```python import lightgbm as lgb ranker = lgb.LGBMRanker(objective="lambdarank", n_estimators=300) ranker.fit(X_train, y_train, group=group_train) scores = ranker.predict(X_val) ``` ### Pattern 5 — RAG with adaptive filter ```python def adaptive_rag(query, user_profile): candidates = vector_db.search(query, k=50) reranked = cross_encoder.rerank(query, candidates) filtered = [c for c in reranked if user_profile.relevance(c) > 0.6] return filtered[:5] ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | Cold start, no user data | Content-based + popularity prior | | Rich interaction logs | Hybrid + LTR | | Real-time exploration | Thompson / LinUCB | | LLM context curation | Embedding + cross-encoder rerank | | Long-tail discovery | UCB exploration boost | **기본값**: embedding retrieval + cross-encoder rerank + Thompson exploration. ## 🔗 Graph - 부모: [[Recommender-Systems]] · [[Active-Learning]] - 변형: [[Collaborative-Filtering]] · [[Multi-Armed-Bandit]] - 응용: [[RAG]] - Adjacent: [[Relevance-Feedback]] · [[Ranking-Algorithms]] ## 🤖 LLM 활용 **언제**: dynamic corpus, user feedback available, explore/exploit tradeoff matters, RAG context selection. **언제 X**: static catalog (use plain ranking), no feedback (cold start dominates), regulated content (use rule-based). ## ❌ 안티패턴 - **Filter bubble**: pure exploit 의 user 의 narrow exposure. - **Feedback contamination**: bot click 의 model 의 poison. - **No exploration decay**: ε constant — 매 mature system 의 ε ↓. - **Position bias ignore**: top item 의 click 의 inflate — debiasing essential. ## 🧪 검증 / 중복 - Verified (Netflix tech blog, TikTok recsys papers, RecSys 2024 proceedings). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — FULL content (bandits, LTR, RAG patterns) |