[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:ai-engineer\u002Frag-reranking-fusion":4,"config":194},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":97,"samples":108},"ai-engineer","AI Engineer","","rag-reranking-fusion","Rag Reranking Fusion","en",75,2025,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,88,91,94],{"key":19,"name":20,"count":11},"agents-tool-use","Agents Tool Use",{"key":22,"name":23,"count":11},"aimlops-deployment-strategies-ml","Aimlops Deployment Strategies Ml",{"key":25,"name":26,"count":11},"aimlops-experiment-tracking-reproducibility","Aimlops Experiment Tracking Reproducibility",{"key":28,"name":29,"count":11},"aimlops-feature-store-data-versioning","Aimlops Feature Store Data Versioning",{"key":31,"name":32,"count":11},"aimlops-ml-cicd-pipelines","Aimlops Ml Cicd Pipelines",{"key":34,"name":35,"count":11},"aimlops-model-monitoring-drift-detection","Aimlops Model Monitoring Drift Detection",{"key":37,"name":38,"count":11},"aimlops-model-versioning-registry","Aimlops Model Versioning Registry",{"key":40,"name":41,"count":11},"aipy-async-concurrency-ml-serving","Aipy Async Concurrency Ml Serving",{"key":43,"name":44,"count":11},"aipy-data-pipeline-dataloader","Aipy Data Pipeline Dataloader",{"key":46,"name":47,"count":11},"aipy-gpu-memory-management","Aipy Gpu Memory Management",{"key":49,"name":50,"count":11},"aipy-numpy-vectorization-broadcasting","Aipy Numpy Vectorization Broadcasting",{"key":52,"name":53,"count":11},"aipy-python-ml-packaging-environments","Aipy Python Ml Packaging Environments",{"key":55,"name":56,"count":11},"aipy-tensor-ops-autograd","Aipy Tensor Ops Autograd",{"key":58,"name":59,"count":11},"embeddings-vector-search","Embeddings Vector Search",{"key":61,"name":62,"count":11},"evaluation-testing","Evaluation Testing",{"key":64,"name":65,"count":11},"fine-tuning-adaptation","Fine Tuning Adaptation",{"key":67,"name":68,"count":11},"inference-serving","Inference Serving",{"key":70,"name":71,"count":11},"llm-fundamentals","Llm Fundamentals",{"key":73,"name":74,"count":11},"prompt-engineering","Prompt Engineering",{"key":76,"name":77,"count":11},"rag-chunking-indexing","Rag Chunking Indexing",{"key":79,"name":80,"count":11},"rag-embeddings-similarity","Rag Embeddings Similarity",{"key":82,"name":83,"count":11},"rag-evaluation","Rag Evaluation",{"key":85,"name":86,"count":11},"rag-generation-context","Rag Generation Context",{"key":8,"name":9,"count":11},{"key":89,"name":90,"count":11},"rag-retrieval","Rag Retrieval",{"key":92,"name":93,"count":11},"rag-retrieval-search","Rag Retrieval Search",{"key":95,"name":96,"count":11},"safety-guardrails","Safety Guardrails",[98,102,105],{"key":99,"name":100,"count":101},"llm-rag","LLM\u002FRAG",450,{"key":103,"name":104,"count":101},"mlops","MLOps",{"key":106,"name":107,"count":101},"python","Python",[109,127,141,155,168,181],{"id":110,"topic":9,"difficulty":111,"body":112,"options":113,"correct_key":118,"explanation":126},"019f667f-d99b-7e9a-819d-e604ec752ba7",1,"Reciprocal Rank Fusion (RRF) combines two ranked lists by scoring each document as score(d) = sum over lists of 1\u002F(k + rank_i(d)), where rank_i(d) is the document's 1-indexed position in list i. What role does the constant k play?",[114,117,120,123],{"key":115,"text":116},"a","It sets the maximum number of documents that can be fused from each list.",{"key":118,"text":119},"b","It dampens top-rank influence, keeping scores from exploding at very small ranks.",{"key":121,"text":122},"c","It converts BM25 scores into cosine similarity scores before fusion.",{"key":124,"text":125},"d","It defines how many result lists must agree before a document is kept.","k is added to the rank before inverting it. Without k, rank 1 would produce 1\u002F1 = 1.0, an extremely large score compared to rank 10 (1\u002F10 = 0.1) — a 10x gap. Adding k (e.g. 60) makes it 1\u002F61 vs 1\u002F70, a much smaller relative gap. So k smooths out the score curve across ranks, preventing the very top of one list from completely dominating the fused score.",{"id":128,"topic":9,"difficulty":129,"body":130,"options":131,"correct_key":115,"explanation":140},"019f667f-d99c-7ef2-a5bc-865488545b8c",2,"Dense retrieval ranks document D1 at position 1. Keyword (BM25) retrieval ranks the same D1 at position 2. Using RRF with k=60, what is D1's fused score (score(d) = 1\u002F(k+rank_dense) + 1\u002F(k+rank_bm25))?",[132,134,136,138],{"key":115,"text":133},"About 0.0325 (1\u002F61 + 1\u002F62).",{"key":118,"text":135},"About 0.0164 (only the dense list's contribution, 1\u002F61).",{"key":121,"text":137},"About 1.5 (average of the two raw rank positions).",{"key":124,"text":139},"About 0.5 (rank 1 and rank 2 averaged and normalized to [0,1]).","score(D1) = 1\u002F(60+1) + 1\u002F(60+2) = 1\u002F61 + 1\u002F62 = 0.016393... + 0.016129... = 0.032522..., i.e. about 0.0325. RRF sums a term per list where the document appears; it never averages raw positions or produces a value near 1.5 or 0.5.",{"id":142,"topic":9,"difficulty":143,"body":144,"options":145,"correct_key":121,"explanation":154},"019f667f-d99d-7838-8fed-e0748bef3f06",3,"Dense ranking: D1,D2,D3,D4,D5 (positions 1-5). BM25 ranking: D3,D1,D5,D2,D4 (positions 1-5). Using RRF with k=60, the fused scores come out to D1=0.032522, D3=0.032266, D2=0.031754, D5=0.031258, D4=0.031010. What is the correct fused ranking (highest score first)?",[146,148,150,152],{"key":115,"text":147},"D3, D1, D2, D4, D5 — because D3 is rank 1 in BM25, ties always go to the keyword-search winner.",{"key":118,"text":149},"D1, D2, D3, D4, D5 — fusion just keeps the dense ranking unchanged since dense was listed first.",{"key":121,"text":151},"D1, D3, D2, D5, D4 — D1 edges out D3 since D1's ranks (1,2) sum higher than D3's (3,1).",{"key":124,"text":153},"D3, D5, D1, D2, D4 — BM25's ranking is used directly since it produced the top score for D3.","Sorting the given scores descending: 0.032522 (D1) > 0.032266 (D3) > 0.031754 (D2) > 0.031258 (D5) > 0.031010 (D4). So the fused order is D1, D3, D2, D5, D4. Even though D3 is BM25's #1, D1 being #1 in dense and #2 in BM25 (a strong position in both lists) narrowly outscores D3 being #1 in BM25 but only #3 in dense.",{"id":156,"topic":9,"difficulty":143,"body":157,"options":158,"correct_key":118,"explanation":167},"019f667f-d99e-72c3-b6f1-90fffecf0d44","A team fuses BM25 scores (raw range roughly 0-20, unbounded) directly with cosine similarity scores (range -1 to 1) by simple addition, and results look dominated by whichever retriever happens to produce larger raw numbers. Why does RRF avoid this failure mode?",[159,161,163,165],{"key":115,"text":160},"RRF first converts BM25 scores to cosine similarity using a learned linear mapping, then adds them.",{"key":118,"text":162},"RRF discards raw scores and uses only each document's rank in each list, so no retriever's scale can dominate.",{"key":121,"text":164},"RRF clips every score to the [0,1] range using min-max normalization before summing.",{"key":124,"text":166},"RRF only works when both retrievers happen to already share the same scale, so the scenario described would make RRF fail too.","RRF's formula, 1\u002F(k+rank), takes only the rank (an integer position: 1st, 2nd, 3rd...), never the underlying score value. Since every retrieval method inherently produces a rank ordering regardless of its scoring scale, RRF sidesteps the scale-mismatch problem entirely — it never touches the raw BM25 or cosine numbers, so their different ranges can't skew the fusion.",{"id":169,"topic":9,"difficulty":129,"body":170,"options":171,"correct_key":124,"explanation":180},"019f667f-d99f-74bc-917f-e4796f7b352a","Using the same two rankings, D1's fused score relative to D4's is computed at two different k values. At k=1: D1=0.8333, D4=0.3667 (ratio ~2.27x). At k=60: D1=0.0325, D4=0.0310 (ratio ~1.05x). What does this show about increasing k?",[172,174,176,178],{"key":115,"text":173},"Increasing k makes RRF ignore BM25 entirely and rely only on dense retrieval.",{"key":118,"text":175},"Increasing k always changes which document ends up ranked first.",{"key":121,"text":177},"Increasing k converts the fused scores into true probabilities that sum to 1.",{"key":124,"text":179},"Increasing k flattens score differences across ranks, making fusion less sensitive to rank gaps.","At k=1, the gap between rank 1 and rank 5 is proportionally huge (dividing by 2 vs 6). At k=60, adding 60 to every rank shrinks that same gap to dividing by 61 vs 65 — a much smaller relative difference. So larger k compresses (flattens) the score spread across ranks; it doesn't touch which retriever is used, doesn't produce a probability distribution, and doesn't guarantee a ranking change.",{"id":182,"topic":9,"difficulty":129,"body":183,"options":184,"correct_key":115,"explanation":193},"019f667f-d99f-7dba-8bbb-1a1b09964e12","RRF is extended from 2 lists to 3 ranked lists (e.g. dense, BM25, and a recency-boosted list) by summing 1\u002F(k+rank) across all three. With k=60 and ranks: A=(1,2,2), B=(2,1,3), C=(3,4,1), D=(4,3,4), the computed sums are A=0.048652, B=0.048395, C=0.047891, D=0.047123. What does this confirm about RRF?",[185,187,189,191],{"key":115,"text":186},"RRF generalizes to any number of lists — it's a sum of one reciprocal-rank term per list.",{"key":118,"text":188},"RRF can only combine exactly two ranked lists at a time; three-way fusion requires running RRF twice in sequence.",{"key":121,"text":190},"With three lists, k must be divided by 3 to keep the scores in the same numeric range as two-list RRF.",{"key":124,"text":192},"Adding a third list always increases every document's score proportionally, so the ranking order never changes.","score(d) = sum_i 1\u002F(k+rank_i(d)) is defined as a sum over however many ranked lists are supplied — nothing in the formula caps it at two. Here A wins with 0.048652 because it holds strong positions (1,2,2) across all three lists; the formula and the resulting order confirm RRF scales naturally to N lists without modification.",{"fields":195,"seniorities":372,"interview_shapes":373,"locales":378,"oauth":380,"question_count":383,"coach_enabled":384,"jd_match_enabled":384},[196,219,239,255,279,286,305,324,346,353,359,366],{"key":197,"name_tr":198,"name_en":198,"sort":111,"specializations":199},"backend","Backend",[200,203,206,207,210,213,216],{"key":201,"name":202,"field":197},"general","Genel",{"key":204,"name":205,"field":197},"go","Go",{"key":106,"name":107,"field":197},{"key":208,"name":209,"field":197},"java","Java",{"key":211,"name":212,"field":197},"csharp","C#\u002F.NET",{"key":214,"name":215,"field":197},"nodejs","Node.js",{"key":217,"name":218,"field":197},"php","PHP",{"key":220,"name_tr":221,"name_en":221,"sort":129,"specializations":222},"frontend","Frontend",[223,224,227,230,233,236],{"key":201,"name":202,"field":220},{"key":225,"name":226,"field":220},"javascript","JavaScript",{"key":228,"name":229,"field":220},"typescript","TypeScript",{"key":231,"name":232,"field":220},"react","React",{"key":234,"name":235,"field":220},"vue","Vue",{"key":237,"name":238,"field":220},"angular","Angular",{"key":240,"name_tr":241,"name_en":241,"sort":143,"specializations":242},"fullstack","Fullstack",[243,244,245,246,247,248,249,250,251,252,253,254],{"key":201,"name":202,"field":240},{"key":204,"name":205,"field":197},{"key":106,"name":107,"field":197},{"key":208,"name":209,"field":197},{"key":211,"name":212,"field":197},{"key":214,"name":215,"field":197},{"key":217,"name":218,"field":197},{"key":225,"name":226,"field":220},{"key":228,"name":229,"field":220},{"key":231,"name":232,"field":220},{"key":234,"name":235,"field":220},{"key":237,"name":238,"field":220},{"key":256,"name_tr":257,"name_en":257,"sort":258,"specializations":259},"devops-cloud","DevOps \u002F Cloud",4,[260,261,264,267,270,273,276],{"key":201,"name":202,"field":256},{"key":262,"name":263,"field":256},"aws","AWS",{"key":265,"name":266,"field":256},"gcp","GCP",{"key":268,"name":269,"field":256},"azure","Azure",{"key":271,"name":272,"field":256},"kubernetes","Kubernetes",{"key":274,"name":275,"field":256},"terraform","Terraform",{"key":277,"name":278,"field":256},"linux","Linux",{"key":5,"name_tr":6,"name_en":6,"sort":280,"specializations":281},5,[282,283,284,285],{"key":201,"name":202,"field":5},{"key":106,"name":107,"field":5},{"key":99,"name":100,"field":5},{"key":103,"name":104,"field":5},{"key":287,"name_tr":288,"name_en":289,"sort":290,"specializations":291},"database","Veritabanı","Database",6,[292,293,296,299,302],{"key":201,"name":202,"field":287},{"key":294,"name":295,"field":287},"postgresql","PostgreSQL",{"key":297,"name":298,"field":287},"mysql","MySQL",{"key":300,"name":301,"field":287},"mongodb","MongoDB",{"key":303,"name":304,"field":287},"redis","Redis",{"key":306,"name_tr":307,"name_en":308,"sort":309,"specializations":310},"mobile","Mobil","Mobile",7,[311,312,315,318,321],{"key":201,"name":202,"field":306},{"key":313,"name":314,"field":306},"ios-swift","iOS (Swift)",{"key":316,"name":317,"field":306},"android-kotlin","Android (Kotlin)",{"key":319,"name":320,"field":306},"flutter","Flutter",{"key":322,"name":323,"field":306},"react-native","React Native",{"key":325,"name_tr":326,"name_en":327,"sort":328,"specializations":329},"security","Güvenlik","Security",8,[330,331,334,337,340,343],{"key":201,"name":202,"field":325},{"key":332,"name":333,"field":325},"appsec","AppSec",{"key":335,"name":336,"field":325},"offensive-pentest","Offensive \u002F Pentest",{"key":338,"name":339,"field":325},"cloud-security","Cloud Security",{"key":341,"name":342,"field":325},"devsecops","DevSecOps",{"key":344,"name":345,"field":325},"blue-team-incident","Blue Team \u002F Incident",{"key":347,"name_tr":348,"name_en":349,"sort":350,"specializations":351},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[352],{"key":201,"name":202,"field":347},{"key":354,"name_tr":355,"name_en":355,"sort":356,"specializations":357},"data-engineer","Data Engineer",10,[358],{"key":201,"name":202,"field":354},{"key":360,"name_tr":361,"name_en":362,"sort":363,"specializations":364},"game-dev","Oyun Geliştirme","Game Development",11,[365],{"key":201,"name":202,"field":360},{"key":367,"name_tr":368,"name_en":368,"sort":369,"specializations":370},"ml-engineer","ML Engineer",12,[371],{"key":201,"name":202,"field":367},[14,15,16],{"junior":374,"mid":376,"senior":377},{"questions":375,"median_sec":3},20,{"questions":375,"median_sec":3},{"questions":375,"median_sec":3},[379,10],"tr",[381,382],"google","github",21750,true]