[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:ai-engineer\u002Frag-retrieval-search":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-retrieval-search","Rag Retrieval Search","tr",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,90,93,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":88,"name":89,"count":11},"rag-reranking-fusion","Rag Reranking Fusion",{"key":91,"name":92,"count":11},"rag-retrieval","Rag Retrieval",{"key":8,"name":9,"count":11},{"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,140,154,167,181],{"id":110,"topic":9,"difficulty":111,"body":112,"options":113,"correct_key":118,"explanation":126},"019f667f-d9b8-7e1e-bdf4-1d3bac0efb54",1,"RAG için retrieval'da, dense (embedding tabanlı) retrieval ile sparse (keyword\u002FBM25) retrieval arasındaki temel fark nedir?",[114,117,120,123],{"key":115,"text":116},"a","Dense yalnızca kısa dökümanlarda, sparse yalnızca uzun dökümanlarda çalışır.",{"key":118,"text":119},"b","Dense anlama göre, sparse tam terim örtüşmesine göre eşleşir.",{"key":121,"text":122},"c","Dense hiç index gerektirmez, sparse her zaman graph index gerektirir.",{"key":124,"text":125},"d","Dense sonuçları alfabetik, sparse dosya boyutuna göre sıralar.","Dense retrieval, query ve döküman embedding'lerini semantik bir vektör uzayında karşılaştırır; bu yüzden ortak kelime olmasa bile eş anlamlı ya da yeniden ifade edilmiş metinler eşleşebilir. Sparse retrieval (ör. BM25) dökümanları tam token örtüşmesine göre, terim nadirliği ve frekansıyla ağırlıklandırarak skorlar; bu yüzden terimin birebir geçmesi gerekir. (a), (c) ve (d) bu iki yöntemin relevance'ı gerçekte nasıl hesapladığıyla ilgisi olmayan ayrımlar tarif eder.",{"id":128,"topic":9,"difficulty":111,"body":129,"options":130,"correct_key":115,"explanation":139},"019f667f-d9b9-7975-a437-3b736daee5c1","Genel hatlarıyla, BM25 skorlama fonksiyonu bir dökümanı bir sorgu için sıralarken neyi tartar?",[131,133,135,137],{"key":115,"text":132},"Terim frekansı, terim nadirliği (IDF) ve döküman uzunluğu.",{"key":118,"text":134},"Dökümanın index'e ne zaman eklendiği ve inbound link sayısı.",{"key":121,"text":136},"İki öğrenilmiş dense vektör arasındaki kosinüs açısı.",{"key":124,"text":138},"Sorguyu göz ardı ederek dökümandaki toplam benzersiz kelime sayısı.","BM25; terim frekansını (bir sorgu teriminin dökümanda ne sıklıkla geçtiği), inverse document frequency'yi (korpus genelinde daha nadir terimler daha fazla ağırlık alır) ve döküman uzunluğu normalizasyonunu (böylece uzun dökümanlar sadece terimi daha çok tekrarlayarak kazanmaz) birleştirir. (b) recency\u002Flink tabanlı sıralama sinyallerini tarif eder, BM25 ile ilgisizdir. (c) dense vektör benzerliğini tarif eder, sparse skorlama değil. (d) sorguyu tamamen göz ardı eder, BM25 bunu yapmaz.",{"id":141,"topic":9,"difficulty":142,"body":143,"options":144,"correct_key":121,"explanation":153},"019f667f-d9ba-7815-9c1c-ec60ee78b1e2",2,"4 dökümanlık bir korpus (boşlukla token'lanmış) `BM25Okapi` ile index'leniyor ve `\"what does error x401 mean\"` sorgusu her birine karşı skorlanıyor:\n```\ndoc0: \"restart the service after updating the configuration file\"\ndoc1: \"error code x401 means the authentication token has expired\"\ndoc2: \"authentication tokens can expire and usually require a refresh\"\ndoc3: \"server logs show timeout errors during periods of high load\"\n```\n`bm25.get_scores(query)` çalıştırıldığında gerçek skorlar `[0.0, 1.6946, 0.0, 0.0]` çıkıyor. doc1 diğerlerinden neden bu kadar yüksek skor alıyor?",[145,147,149,151],{"key":115,"text":146},"BM25 her zaman index'e ilk eklenen dökümanı kayırır.",{"key":118,"text":148},"doc1 en kısa döküman ve BM25 kısa dökümanları kayırır.",{"key":121,"text":150},"doc1, nadir sorgu token'ı \"x401\"i tek başına içeriyor.",{"key":124,"text":152},"Diğer dökümanlar stopword içerdiği için tokenizer'ca reddedildi.","\"x401\" sorguda geçiyor ve bu korpusta yalnızca doc1'de var, bu da ona yüksek bir inverse-document-frequency ağırlığı kazandırıyor; doc2 semantik olarak aynı konuyla ilgili (kimlik doğrulama token'ının süresi dolması) ama yüksek IDF'li tam sorgu token'larını paylaşmıyor, bu yüzden 0 skor alıyor. (a) yanlış — BM25'te ekleme sırası diye bir kavram yok. (b) gerçek ama ikincil bir faktör (BM25'te uzunluk normalizasyonu vardır), ama burada belirleyici faktör tek başına uzunluk değil, tam nadir-terim eşleşmesidir. (d) tokenizasyonu yanlış tarif ediyor — stopword'ler skoru düşürür, dökümanları tamamen sıfırlamaz.",{"id":155,"topic":9,"difficulty":142,"body":156,"options":157,"correct_key":124,"explanation":166},"019f667f-d9bc-73e7-b8d3-1ffbfa2e327e","İki aday döküman, semantik eksenler `[auth, error, server, refresh]` boyunca 4-boyutlu oyuncak embedding olarak temsil ediliyor:\n```\nquery = [0.90, 0.10, 0.00, 0.60]\ndoc1  = [0.85, 0.90, 0.00, 0.10]   # tam hata kodunu içeriyor, zayıf refresh sinyali\ndoc2  = [0.95, 0.05, 0.00, 0.90]   # yeniden ifade, kod yok, güçlü auth+refresh sinyali\n```\nGerçek kosinüs benzerliği hesaplandığında `cos(query, doc1) ≈ 0.6782` ve `cos(query, doc2) ≈ 0.9841` çıkıyor. Bu, dense retrieval hakkında burada bize ne söylüyor?",[158,160,162,164],{"key":115,"text":159},"Normalize vektörlerde kosinüs benzerliği 0.9'u geçemez.",{"key":118,"text":161},"doc1'de mutlaka bir yazım hatası var, çünkü daha düşük skor aldı.",{"key":121,"text":163},"Hiçbir döküman ilgili değil, çünkü hiçbir skor 1'e yakın değil.",{"key":124,"text":165},"doc2'nin semantik profili query ile daha yakın hizalanır.","Kosinüs benzerliği, mevcut tam token'lardan bağımsız olarak vektörler arasındaki açıyı ölçer; burada doc2'nin profili (güçlü auth + refresh, query'nin baskın sinyalleriyle eşleşiyor) query ile doc1'in profilinden daha yakın hizalanıyor, doc1 gerçek hata kodunu içeren döküman olsa bile. Bu, dense retrieval'ın belirli bir nadir terimin varlığına göre değil, genel semantik hizalanmaya göre sıraladığını gösterir. (a) yanlış bir kısıtlama — kosinüs benzerliği doğal olarak 1.0'a kadar çıkabilir. (b) ve (c) sayıların ne gösterdiğini yanlış yorumluyor.",{"id":168,"topic":9,"difficulty":169,"body":170,"options":171,"correct_key":118,"explanation":180},"019f667f-d9be-7db3-91d8-43ee0dc70844",3,"Aynı sorgu için BM25 (soru 3), \"x401\" içeren doc1'i 1.6946 skorla birinci sıraya koyarken doc2 0.0 alıyor. Semantik olarak karşılaştırılabilir bir çift üzerinde dense kosinüs benzerliği (soru 4) çalıştırıldığında ise yeniden-ifade dökümanı (0.9841) tam-kod dökümanının (0.6782) önüne geçiyor. Bu ayrışma, iki yöntemi birleştirmek hakkında ne gösteriyor?",[172,174,176,178],{"key":115,"text":173},"İki skorlama implementasyonundan biri mutlaka bug içeriyor.",{"key":118,"text":175},"Farklı sinyaller ölçülür, anlaşmazlık beklenir; hybrid'in nedeni budur.",{"key":121,"text":177},"BM25, dense retrieval lehine tamamen terk edilmeli.",{"key":124,"text":179},"BM25 skorları ve kosinüs benzerlikleri doğrudan karşılaştırılabilir.","Her iki skorlama çalışması da kendi bakış açısında doğru — sadece farklı türde relevance'ları ölçüyorlar. BM25 tam nadir-terim örtüşmesini ödüllendirir, dense embedding'ler genel semantik yakınlığı ödüllendirir. Hiçbiri \"yanlış\" değil; tam olarak bu tür anlaşmazlık, hybrid retrieval'ın motivasyonudur — hybrid, her iki sıralamayı birleştirerek her iki sinyalden birinde güçlü olan bir dökümanın yüzeye çıkmasını sağlar. (a) anlaşmazlığın bir bug ima ettiğini yanlış varsayar. (c) tek bir örnekten desteklenmeyen bir sonuç çıkarır. (d) kritik bir hatadır — BM25 ve kosinüs benzerliği farklı, karşılaştırılamaz ölçeklerde yaşar, fusion yöntemlerinin ham skor yerine rank pozisyonu kullanmasının nedeni tam olarak budur.",{"id":182,"topic":9,"difficulty":142,"body":183,"options":184,"correct_key":121,"explanation":193},"019f667f-d9c2-7070-b556-485ded5d6176","Bir retrieval çalışması şu sıralı döküman ID listesini döndürüyor: `[\"d7\", \"d3\", \"d1\", \"d9\", \"d2\"]`. Sorgu için tek ilgili döküman `\"d1\"`, 3. sırada yer alıyor. `recall@k`'yı gerçekten hesaplamak `recall@1 = 0.0`, `recall@2 = 0.0`, `recall@3 = 1.0` veriyor. Bu, `top-k`'nin recall üzerindeki etkisi hakkında somut olarak neyi gösteriyor?",[185,187,189,191],{"key":115,"text":186},"İlgili döküman ilk sırada değilse recall@k tanımsızdır.",{"key":118,"text":188},"k arttıkça recall düştü, yani daha fazla sonuç durumu kötüleştirdi.",{"key":121,"text":190},"Recall, k ilgili dökümanın rankına ulaşana kadar 0 kalır, sonra 1'e sıçrar.",{"key":124,"text":192},"Bu recall@k aslında precision'ı ölçüyor, recall'ı değil.","recall@k, ilgili döküman(lar)ın top-k sonuçları içinde herhangi bir yerde bulunup bulunmadığını sorar; d1 3. sırada olduğundan top-1 ve top-2 onu kaçırır (recall 0), top-3 (ve ötesi) onu içerir (recall 1). k'yı artırmak yalnızca daha fazla aday ekleyip hiçbirini çıkarmadığından, recall@k, k'de monoton olarak azalmayandır (sabit kalır ya da artar). (a) yanlış — recall@k 0'da bile iyi tanımlıdır. (b) sayıları yanlış okuyor, sayılar azalmıyor artıyor. (d) recall'ı precision ile karıştırıyor; precision aynı zamanda arasına kaç alakasız döküman karıştığını da hesaba katar, bu örnek bunu test etmiyor.",{"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":142,"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":169,"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},[10,379],"en",[381,382],"google","github",21750,true]