--- id: [[P-Reinforce|P-Reinforce]]-AUTO-LTR-001 category: AI_and_ML confidence_score: 1.00 tags: [auto-reinforced, learning-to-rank, ltr, reranking, machine-learning, ranking-algorithms] last_reinforced: 2026-05-04 --- # [[Learning to Rank (LTR)|Learning to Rank (LTR)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > "λ°μ΄ν„°λ‘œ ν•™μŠ΅ν•˜λŠ” 졜적의 μ •λ ¬: λ‹¨μˆœνžˆ 단어 λΉˆλ„λ₯Ό μ„ΈλŠ” 것을 λ„˜μ–΄, 클릭 λ°μ΄ν„°λ‚˜ μΈκ°„μ˜ ν”Όλ“œλ°±μ„ λ¨Έμ‹ λŸ¬λ‹ λͺ¨λΈλ‘œ ν•™μŠ΅μ‹œμΌœ μ‚¬μš©μžκ°€ κ°€μž₯ λ§Œμ‘±ν•  λ§Œν•œ μˆœμ„œλ‘œ 검색 κ²°κ³Όλ₯Ό μž¬λ°°μΉ˜ν•˜λŠ” 기술." ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) Learning to Rank(LTR)λŠ” 지도 ν•™μŠ΅(Supervised Learning)을 톡해 정보 검색 μ‹œμŠ€ν…œμ˜ λž­ν‚Ή λͺ¨λΈμ„ κ΅¬μΆ•ν•˜λŠ” 기계 ν•™μŠ΅μ˜ ν•œ λΆ„μ•Όμž…λ‹ˆλ‹€. 1. **3λŒ€ μ£Όμš” μ ‘κ·Ό 방식**: * **[[Pointwise Approach|Pointwise Approach]]**: 각 λ¬Έμ„œμ˜ 관련성을 κ°œλ³„μ μœΌλ‘œ μ˜ˆμΈ‘ν•©λ‹ˆλ‹€ (νšŒκ·€/λΆ„λ₯˜). * **[[Pairwise Approach|Pairwise Approach]]**: 두 λ¬Έμ„œ 쀑 μ–΄λŠ 것이 더 관련성이 높은지λ₯Ό λΉ„κ΅ν•˜λ©° ν•™μŠ΅ν•©λ‹ˆλ‹€ (RankNet, LambdaMART λ“±). * **[[Listwise Approach|Listwise Approach]]**: 전체 λ¬Έμ„œ 리슀트의 μˆœμœ„ ꡬ쑰λ₯Ό μ΅œμ ν™”ν•©λ‹ˆλ‹€ (SoftRank, ListNet λ“±). 2. **데이터 μ†ŒμŠ€ (Judgment List)**: * **인간 평가 (Explicit Feedback)**: ν‰κ°€μžκ°€ 직접 질문-λ¬Έμ„œ μŒμ— 점수λ₯Ό λ§€κΈ΄ 데이터. * **μ‚¬μš©μž 행동 (Implicit Feedback)**: 클릭 둜그, 체λ₯˜ μ‹œκ°„, ꡬ맀 이λ ₯ 등을 톡해 μ„ ν˜Έλ„λ₯Ό μΆ”μ •ν•©λ‹ˆλ‹€. 3. **ν™œμš© 사둀: [[Reranking|Reranking]]**: * 1단계 검색(예: BM25)μ—μ„œ 수천 개의 후보ꡰ을 λΉ λ₯΄κ²Œ 뽑아낸 λ’€, 2λ‹¨κ³„μ—μ„œ κ³ μ„±λŠ₯ LTR λͺ¨λΈ(λ˜λŠ” Cross-Encoder)을 μ‚¬μš©ν•˜μ—¬ μˆ˜μ‹­ 개의 μ΅œμƒμœ„ κ²°κ³Όλ₯Ό 맀우 μ •λ°€ν•˜κ²Œ μž¬μ •λ ¬ν•©λ‹ˆλ‹€. ## βš–οΈ Trade-offs & Caveats * **데이터 μ˜€μ—Ό 및 편ν–₯**: μ‚¬μš©μžκ°€ 상단에 μžˆλŠ” κ²°κ³Όλ₯Ό 더 많이 ν΄λ¦­ν•˜λŠ” [[Position Bias|Position Bias]] λ“±μœΌλ‘œ 인해 ν•™μŠ΅ 데이터가 μ™œκ³‘λ  수 μžˆμŠ΅λ‹ˆλ‹€. * **λͺ¨λΈ λ³΅μž‘λ„**: LTR λͺ¨λΈ(특히 Deep LTR)은 μΆ”λ‘  속도가 느렀 μ‹€μ‹œκ°„ 검색 ν™˜κ²½μ—μ„œλŠ” λž­ν‚Ή λŒ€μƒ λ¬Έμ„œ 수λ₯Ό μ œν•œν•΄μ•Ό ν•˜λŠ” λ“± μ§€μ—° μ‹œκ°„(Latency) 관리가 ν•„μˆ˜μ μž…λ‹ˆλ‹€. ## πŸ’» μ‹€μ „ κ΅¬ν˜„ μ½”λ“œ (Boilerplate) `XGBoost` 라이브러리의 `XGBRanker`λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°„λ‹¨ν•œ LTR λͺ¨λΈμ„ ν•™μŠ΅μ‹œν‚€λŠ” κ°œλ… μ˜ˆμ‹œμž…λ‹ˆλ‹€. ```python import xgboost as xgb import numpy as np # 1. ν›ˆλ ¨ 데이터 μ€€λΉ„ (νŠΉμ§•κ°’ X, κ΄€λ ¨μ„± 점수 y, κ·Έλ£Ή 정보 qid) # X: [λ¬Έμ„œ 길이, ν‚€μ›Œλ“œ λΉˆλ„, 클릭λ₯  λ“±] X = np.random.rand(100, 5) y = np.random.randint(0, 5, 100) # 0~4점 척도 groups = [10, 10, 10, 10, 10, 10, 10, 10, 10, 10] # 쿼리당 10κ°œμ”© λ¬Έμ„œκ°€ 맀칭됨 # 2. XGBRanker λͺ¨λΈ μ„€μ • 및 ν•™μŠ΅ ranker = xgb.XGBRanker( objective="rank:ndcg", lambdarank_pair_method="topk", eta=0.1, max_depth=6 ) ranker.fit(X, y, group=groups) # 3. μƒˆλ‘œμš΄ λ¬Έμ„œ μ„ΈνŠΈμ— λŒ€ν•œ λž­ν‚Ή 예츑 test_docs_features = np.random.rand(10, 5) scores = ranker.predict(test_docs_features) sorted_indices = np.argsort(scores)[::-1] print(f"Top Recommended Doc Index: {sorted_indices[0]}") ``` ## πŸ”— 지식 μ—°κ²° (Graph) * **기반 기술**: [[Machine Learning (Machine Learning)|Machine Learning]], [[Information Retrieval (IR)|Information Retrieval (IR)]] * **평가 μ§€ν‘œ**: [[nDCG|nDCG]], [[MAP|MAP]], [[ERR|ERR]] * **고도화 기법**: [[Reranking|Reranking]], [[LambdaMART|LambdaMART]], [[Cross-Encoder|Cross-Encoder]] --- *Last updated: 2026-05-04*