Doküman Türü: Tasarım Raporu (Design Document)
Durum: Taslak — uygulama öncesi kavramsal çerçeve
Son Güncelleme: Nisan 2026
Wiki Konumu:Anlamsal-Arama/Veri-Kumesi-Tasarimi/→ bu sayfa.
Karar kartı için önce./README.mdokunmalı.
Bu doküman bir tasarım raporudur; kesinleşmiş bir uygulama spesifikasyonu değildir. Aşağıdaki hususlar göz önünde bulundurulmalıdır:
Mevcut veriye dayalı tahminlerdir. Bu rapordaki tüm hacim hesaplamaları, oran önerileri ve compute tahminleri, elimizdeki yaklaşık 300 bin .md dosyası ve bunlara ait metadata yapısı baz alınarak üretilmiştir. Gerçek uygulama sürecinde bu rakamlar farklılık gösterebilir. Örneğin kalite filtreleri uygulandığında temiz belge sayısı tahmin edilenden düşük veya yüksek çıkabilir; chunk üretim oranları makale uzunluğuna ve alan dağılımına göre değişebilir; pozitif çift sayıları belge başına bölüm ve paragraf yoğunluğuna bağlıdır.
Veri kümesi özellikleri değişkenlik gösterebilir. Akademik makalelerin alan dağılımı (tıp, mühendislik, sosyal bilimler vb.), dil dağılımı (tamamen Türkçe, tamamen İngilizce, iki dilli), yapısal kalitesi (iyi segmentlenmiş vs. bozuk layout) ve metadata tutarlılığı homojen değildir. Bu heterojenlik, burada önerilen eşik değerlerinin, filtreleme kurallarının ve örnekleme oranlarının pilot çalışma sonuçlarına göre revize edilmesini gerektirebilir.
Öneriler referans çalışmalara dayanır ancak doğrudan aktarım garantisi yoktur. SPECTER, SciDocs, SciRepEval, BEIR, MTEB ve TR-MTEB gibi referans çalışmalardan çıkarılan ilkeler ve oranlar, ağırlıklı olarak İngilizce akademik veri kümeleri üzerinde doğrulanmıştır. Türkçe akademik yazının kendine özgü özellikleri (çift dilli özet yapısı, Türkçe tokenizasyon farklılıkları, alan terminolojisi vb.) bu oranların ayarlanmasını gerektirebilir.
Yol haritası ve zaman tahminleri koşullara bağlıdır. Ekip büyüklüğü, donanım erişimi, annotator mevcudiyeti ve ara sonuçlara göre yöntem değişiklikleri zamanlamayı doğrudan etkiler. Bu rapordaki haftalık plan, tam zamanlı çalışan küçük bir teknik ekip varsayımına dayanır.
Bu doküman yaşayan bir dokümandır. Pipeline'ın her aşamasında elde edilen bulgulara göre güncellenmelidir. Özellikle pilot aşama sonuçları, buradaki birçok varsayımı doğrulayacak veya revize edecek birincil veri kaynağı olacaktır.
Bu rapor, yaklaşık 300 bin Marker kaynaklı .md akademik makale dosyasından iki ayrı ürün oluşturma planını tanımlar:
Bu ayrım tesadüfi değildir. SciDocs, BEIR ve MTEB gibi referans çalışmalar, eğitim verisi ile değerlendirme benchmarkının kesinlikle ayrı tutulması gerektiğini; tek görevde yüksek skor alan modellerin genel olarak en iyi model olmadığını göstermiştir. TR-MTEB de Türkçe embedding değerlendirmesinde dil ve kültür bağlamına uyarlanan benchmarkların farklı içgörüler verdiğini ortaya koymuştur.
Wiki bağlamı: Marker kaynaklı
.mdüretimi için bkz. PDF Çıkarım Araçları ve Deney 06 — Marker Performans. Bu raporun çıktısı (eğitim korpusu + altın benchmark) doğrudan Embedding Modelleri ve MTEB Değerlendirme sayfalarındaki seçim kararlarını besleyecektir.
Başlık + Özet omurgadır. SPECTER'in temel bulgusu, bilimsel belge embeddinglerinde başlık+özet birleşiminin güçlü bir temel sunduğunu; yazar/dergi gibi ek alanların belirgin kazanım getirmediğini gösterir. Tam metin ise doğrudan girdi yerine, chunk tabanlı ek eğitim sinyali üretmek için kullanılmalıdır.
Belge temsili ile chunk temsili karıştırılmamalıdır. Belge düzeyinde başlık+özet ile "doc encoder", paragraf/bölüm düzeyinde ise "chunk encoder" davranışı ayrı ayrı öğretilir. Bu, hem belge retrieval hem de RAG/passage retrieval için çift katmanlı bir yetenek sağlar.
Görev çeşitliliği şarttır. Benchmark yalnızca retrieval'dan ibaretse, modelin zayıf olduğu alanlar gizlenir. Retrieval, similarity, classification ve recommendation görevleri birlikte ele alınmalıdır.
Split sızıntısı önlenmelidir. Train/dev/test ayrımı belge ailesi (family_id) düzeyinde yapılmalıdır; asla çift düzeyinde değil. Aynı çalışmanın tez/makale/kongre sürümleri aynı aile altında tutulmalıdır.
documents.jsonl)Her belge kaydında şu alanlar bulunur:
| Alan | Açıklama |
|---|---|
doc_id |
Benzersiz belge kimliği |
family_id |
Near-duplicate / aynı çalışmanın sürümlerini gruplayan aile kimliği |
source_type |
thesis, article, conference_paper vb. |
lang |
Belgenin ana dili |
title |
Başlık |
abstract_tr |
Türkçe özet (çekirdek veri için zorunlu) |
abstract_en |
İngilizce özet |
sections |
Bölüm listesi (id, başlık, metin) |
keywords |
Anahtar kelimeler |
references |
Kaynakça (ham metin, DOI, normalize başlık) |
quality_flags |
Kalite bayrakları (Türkçe özet var mı, dedupe durumu, artifact skoru) |
split |
train / dev / test — aile düzeyinde atanır |
chunks.jsonl)| Alan | Açıklama |
|---|---|
chunk_id |
{doc_id}_{section_id}_{chunk_no} |
doc_id |
Bağlı belge |
section_title |
Bölüm başlığı |
chunk_text |
Parça metni |
token_len |
Token uzunluğu |
position |
Bölüm içi sıra |
is_table_heavy |
Tablo/formül ağırlıklı mı |
is_reference_zone |
Kaynakça bölgesi mi |
quality_score |
0–1 arası kalite puanı |
Pair formatı (pairs_train.jsonl): anchor_text + positive_text + görev etiketi + kalite skoru.
Triplet formatı (triplets_train.jsonl): anchor + positive + negative(s) + zorluk skoru.
| Dosya | İçerik |
|---|---|
queries.jsonl |
Sorgu metinleri, türleri, dilleri |
qrels.tsv |
Sorgu-belge ilişkilendirme etiketleri (0/1/2) |
sts.jsonl |
Benzerlik çiftleri (0–5 ölçeği, çoklu annotator) |
classification.jsonl |
Alan sınıflandırma etiketleri |
recommendation.jsonl |
İlgili belge önerileri |
Marker .md dosyaları
→ Markdown parser + bölüm tanıma
→ Dil tespiti + kalite filtreleri
→ documents.jsonl
→ Yapısal chunking (paragraf sınırları korunur)
→ Kayan pencere fallback (çok uzun paragraflar için)
→ chunks.jsonl
| Kural | Uygulama | Amaç |
|---|---|---|
| Unicode normalizasyonu | NFKC + tek boşluk | Yazım tutarlılığı |
| Özet çıkarımı | "Öz/Abstract" başlık eşleme | Belge omurgası |
| Kaynakça ayıklama | Heading + regex + satır biçimi | Gürültü azaltma |
| Tablo/formül filtresi | Non-letter oranı > %35 → bayrak | Paragraf kalitesi |
| Dil filtresi | lang=tr + güven > 0.80 |
Türkçe odak |
| Dedupe | Title+abstract MinHash + family_id | Split sızıntısını önleme |
| Kısa parça düşürme | < 60 token veya düşük kalite | Zayıf sinyal temizliği |
Başlık en az 5 token, Türkçe özet en az 80 token, chunk başına en az 60 token, alfabetik karakter oranı en az %60, tekrarlanan satır oranı en fazla %20.
| Paragraf Uzunluğu | Strateji |
|---|---|
| 80–320 token | Olduğu gibi al, overlap yok |
| 320–900 token | 220 token pencere, 40 token overlap |
| 900+ token | Alt başlık/cümle sonu ara, bulamazsan 256 token pencere, 48 overlap |
Hedef chunk boyutu 180–300 token, tavan 384 token. Overlap yalnızca kayan pencere fallback'inde uygulanır.
| Tip | Oran | Açıklama | Belge Başına |
|---|---|---|---|
| title ↔ abstract | %25 | En güvenilir sinyal, SPECTER omurgası | 1 çift |
| abstract ↔ paragraph | %35 | Retrieval/RAG için kritik, hibrit skorlama ile seçilir | 3 paragraf |
| section ↔ paragraph | %20 | Yapısal semantik öğretir, anchor = "bölüm başlığı | belge başlığı" | 2 çift |
| intra_doc paragraphs | %20 | Belge içi bağlam sürekliliği | 2 çift |
| Tip | Tahmini Çift Sayısı |
|---|---|
| title ↔ abstract | ~220K |
| abstract ↔ paragraph | ~660K |
| section ↔ paragraph | ~440K |
| intra_doc | ~440K |
| Toplam | ~1.76M pozitif çift |
skor = 0.55 × teacher_cosine + 0.25 × bm25_norm + 0.20 × keyword_overlap
Her belge için üç farklı bölgeden birer paragraf seçilir (giriş, yöntem, bulgu/sonuç) — özetin sadece girişle hizalanması engellenir.
Katman 1 — In-batch negatives: InfoNCE/MNRL tabanlı eğitimde varsayılan ve en ucuz kaynak. CachedMultipleNegativesRankingLoss ile büyük efektif batch'lere çıkılır.
Katman 2 — Random negatives: Belgeler arası alan farkı yüksek örneklerden seçilir (ör. bilgisayar bilimi özeti için tarım alanından). Yardımcı sinyal — tek başına yetersiz.
Katman 3 — Hard negatives: Benchmarkı gerçekten değerli kılan katman. Üç otomatik strateji:
| Strateji | Yöntem |
|---|---|
| Küme tabanlı | Öğretmen model embeddinglari → 2K–4K küme → aynı/komşu kümedeki non-positive belgeler |
| Bibliyografik | Ortak 2+ kaynak paylaşan ama aynı çalışma olmayan belgeler |
| Anahtar kelime | Aynı 2+ normalize anahtar kelimeyi paylaşan farklı yönelimdeki belgeler |
Aday belge şu koşulları karşılamalıdır: aynı family_id içinde olmamalı, teacher cosine 0.55–0.82 aralığında olmalı, BM25 ilk 50'de veya aynı kümede bulunmalı, title trigram overlap 0.80'i aşmamalı, near-duplicate skoru 0.90'dan düşük olmalı.
| Oran | İçerik |
|---|---|
| %60 | Yalnız pozitif çift + in-batch negatives |
| %25 | Bir hard negative içeren genişletilmiş çift |
| %10 | Bir hard + bir random negative triplet |
| %5 | Yalnız explicit random negative |
İlk epoch'ta hard-negative oranı düşük tutulur, ikinci epoch'ta artırılır (curriculum etkisi).
| Görev | Ölçek | Birincil Metrik | İkincil Metrikler |
|---|---|---|---|
| Retrieval | 1500–2000 sorgu × 20 aday | nDCG@10 | MRR@10, MAP@100, Recall@100 |
| Similarity (STS) | 3000 çift, 0–5 ölçek | Spearman korelasyon | Pearson korelasyon |
| Classification | 20K belge, 12–20 üst sınıf | Macro-F1 | Accuracy |
| Recommendation | Yardımcı görev | nDCG@10 | MAP@10, Recall@20 |
Wiki bağlamı: Görev türlerinin MTEB içindeki rolleri için bkz. Görev Türleri ve Görev Türleri (detaylı).
Dört farklı sorgu türü: kısa başlık-benzeri sorgular, doğal dil bilgi ihtiyacı cümleleri, anahtar kelime yoğun sorgular ve section-aware sorgular. Sorgular başlığın doğrudan kopyası olmamalı, paraphrase edilmelidir.
Candidate pool üç kaynaktan birleşir: BM25 üst sonuçları + dense baseline üst sonuçları + rastgele hard distractor havuzu.
| Aşama | İçerik | İş Yükü |
|---|---|---|
| Pilot | 150–200 retrieval sorgusu, 300 STS çifti, 100 recommendation seed | Yönerge netleştirme |
| Ana | 1500 sorgu × 20 aday × 2 annotator = 60K yargı; 3K STS × 3 annotator = 9K puan | ~500–650 annotator-saat |
| Kalite | Cohen's kappa ≥ 0.70 (retrieval), Spearman ≥ 0.75 (STS) | Düşük uyumlu örnekler çıkarılır |
2 araştırma görevlisi + 1 uzlaştırıcı ile 4–6 haftada tamamlanabilir.
| Model | Güçlü Yanı | Kullanım |
|---|---|---|
| multilingual-e5-large | 512 token, olgun, retrieval odaklı, query:/passage: prefix |
Birincil baseline — doc-level ve chunk-level |
| bge-m3 | 8192 token, dense+sparse+multi-vector, 100+ dil | Uzun doküman ve hibrit retrieval deneyleri |
| Parametre | Değer |
|---|---|
| Loss | CachedMultipleNegativesRankingLoss |
| Learning rate | 2e-5 |
| Warmup | %10 |
| Decay | Cosine |
| Epoch | 2–3 |
| Efektif batch | 2048–8192 (cached loss ile) |
| Max token (doc) | 512 |
| Max token (chunk) | 320–384 |
Faz 1: Cached-MNRL ile tüm pozitif çiftler + in-batch negatives üzerinde contrastive pretraining.
Faz 2: Hard-negative miner çıktısından 200–400K örneklik subset üzerinde kısa triplet fine-tune (SPECTER tarzı, margin=1, 2 epoch).
composite = 0.50 × nDCG@10 + 0.20 × MRR@10 + 0.15 × STS_Spearman + 0.15 × MacroF1
300K ham belge → ~220K temiz belge → 15–25 chunk/belge → 3.3–5.5M chunk. 1024 boyutlu float16 dense embeddingler yalnız vektör tarafında 7–11 GB; ANN indeksleri ile 30–80 GB.
| Bileşen | Minimum |
|---|---|
| Depolama | 1 TB NVMe |
| RAM | 128–256 GB |
| GPU (ilk model) | 1× A100 80GB |
| GPU (full varyant) | 2–4× A100 80GB |
| ANN mining | Faiss |
| Varyant | Çift Sayısı | GPU-Saat |
|---|---|---|
| Prototype | 300–500K | 10–30 |
| Standard | 0.9–1.3M | 40–120 |
| Full/SOTA | 2–3M | 150–400 |
| Lite | Standard (Önerilen) | Full | |
|---|---|---|---|
| Temiz belge | 35–40K | 120–150K | 220–260K |
| Pozitif çift | 250–350K | 0.9–1.3M | 2.0–3.0M |
| Gold retrieval | 400–500 sorgu | 1200–1500 sorgu | 1800–2000 sorgu |
| Gold STS | 800–1000 çift | ~3000 çift | 4000–5000 çift |
| Hard negative | Lexical + teacher NN | Cluster + keyword + bibliographic | İteratif üç katmanlı |
| Süre | 2–4 hafta | 6–10 hafta | 3–6 ay |
Öneri: Doğrudan Standard varyantla başlanmalıdır. Lite hızlı doğrulama sağlar ama referans değeri taşımaz. Full ancak standard stabil çalıştıktan sonra anlamlıdır.
5–10K .md dosyasında md → documents/chunks JSONL hattını doğrula. Kalite filtreleri ve family_id dedupe mantığını oturt.
Yalnız title↔abstract ve abstract↔paragraph ile ilk 100–150K çifti üret. Seed encoder ile hard-negative miner'ı kur. multilingual-e5-large baseline'ı küçük dev set üzerinde eğit.
Retrieval ve STS için pilot gold annotation turunu başlat. Pilot sonuçları tutarlıysa standard varyanta genişle.
Dört çekirdek pair tipinin tamamını üret. Üç katmanlı hard-negative mining'i çalıştır. İki fazlı eğitimi tamamla. Benchmark'ı sürümlendirip raporla.
Wiki bağlamı: Bu yol haritasının kısa kart özeti
90_Roadmap/Embedding-Veri-Kumesi-MVP.mdsayfasında tutulur.
| Script | Görev | Öncelik |
|---|---|---|
md_to_jsonl.py |
Marker .md → documents.jsonl + chunks.jsonl | 1 |
build_pairs.py |
Dört çekirdek pair tipini üretir | 2 |
train_embedding_baseline.py |
Cached-MNRL ile ilk baseline eğitimi | 3 |
mine_hard_negatives.py |
Teacher + BM25 + keyword + bibliographic mining | 4 |
build_gold_benchmark.py |
Retrieval query havuzu + candidate pooling + annotation export | 5 |
eval_beir_mteb_style.py |
Retrieval, STS, classification, recommendation metrikleri | 6 |
package_hf_dataset.py |
Hugging Face dataset formatında paketleme | 7 |
İlk üç script çıkmadan hard-negative mining ve gold benchmark adımlarına geçmek verimsizdir. Doğru sıra: pipeline → çiftler → baseline → mining → benchmark.
Bu raporda sunulan tüm rakamlar, oranlar ve mimari kararlar mevcut ~300K veri tabanı üzerinde yapılmış bir düşünce egzersizinin ürünüdür. Gerçek uygulama sürecinde veri profili netleştikçe (alan dağılımı, kalite oranları, chunk istatistikleri) bu doküman güncellenmelidir. Raporun değeri kesin reçeteler sunmasında değil, karar noktalarını ve trade-off'ları görünür kılmasındadır. Pilot aşamadan çıkacak somut metrikler, buradaki tasarım kararlarının nihai doğrulayıcısı olacaktır.
90_Roadmap/Embedding-Veri-Kumesi-MVP.md — kısa MVP kartı40_Yontemler/ — retrieval / STS / classification metrikleri