Proje Özeti
İngilizce dünyasında Elicit ve Consensus.app gibi araştırmacılara
kaynak-temelli özet üreten LLM tabanlı asistanlar var. Türkçe için eşdeğeri yoktu.
TürkResearcher bu açığı kapatmak için geliştirdiğim açık kaynak (MIT) bir
çok-ajanlı RAG sistemidir: kullanıcı Türkçe bir araştırma sorusu sorar, sistem 633K Türkçe
tez üzerinde (fine-tuned trakad-embed-v2 + cross-encoder reranker ile) delil
toplar ve gerçek tez.yok.gov.tr kayıtlarına bağlanan IEEE atıflı Türkçe akademik
bir özet üretir. Gerçek sistem HF Space'te canlı; sağlayıcı-bağımsız (lokal model de çalışır).
Proje, İstanbul Medipol Üniversitesi'nde aldığım Large Language Models dersinin final projesidir (Track 1 — Novel Idea).
Mimari
LangGraph state machine. Erişimden sonra bir cross-encoder reranker adayları
yeniden sıralayıp gürültüyü filtreler (asıl kalite kazancı burada). Critic ajanı
kapsam yetersizse Retriever'a döner. LiveSearch (OpenAlex/SS/DergiPark)
isteğe bağlıdır; ürün varsayılanında kapalı (ölçülen sistemle tutarlı).
Veri
İki kaynaktan birleşik Türkçe akademik korpus:
| Kaynak | Kayıt | Toplama yöntemi |
|---|---|---|
| YÖK Ulusal Tez Merkezi | 633.998 | Hugging Face Hub (CC-BY-4.0) → kalite filtresi |
| DergiPark dergi makaleleri | 106.641 | OAI-PMH harvest (kendi yazdığım resumable scraper) |
| Toplam | 740.639 | Chroma, cosine, fine-tuned trakad-embed-v2 (768-dim). Ürün 633K v2 indeksini kullanır. |
Index Colab T4 GPU üzerinde inşa edildi ve açık kaynak olarak Hugging Face Hub'a yüklendi (hakansabunis/tr-academic-research-agent-index, 16 GB).
Değerlendirme
30 soruluk Türkçe benchmark, 10 farklı konu kategorisi (sağlık, eğitim, mühendislik, hukuk, bilgisayar, ekonomi, vb.). LLM-as-judge ile dört metrik:
- Citation accuracy — atıflar gerçekten iddiayı destekliyor mu?
- Faithfulness — yanıt kaynaklara ne kadar grounded?
- Coverage — alt soruların kaçı kapsanmış?
- Holistic (1-5) — genel akademik kalite
İki konfigürasyonu karşılaştırdım: 633K tez-yalnız ve 740K + DergiPark:
| Metrik | 633K | 740K | Δ |
|---|---|---|---|
| Citation accuracy | 0.60 | 0.51 | −0.10 |
| Faithfulness | 0.59 | 0.49 | −0.10 |
| Coverage | 0.49 | 0.47 | −0.03 |
| Holistic | 2.63 | 2.40 | −0.23 |
| #Citations | 30.1 | 32.8 | +2.7 |
Sürpriz Bulgu — "Corpus Expansion Paradox"
Naif corpus genişletme her zaman daha iyi metrik getirmiyor: kapsamı zayıf kategorilerde (CS, business) iyileşme, kapsamı zaten güçlü kategorilerde (sağlık, mühendislik, hukuk) gerileme. Üç sebep belirledim:
- Abstract uzunluk dağılım kayması — tezler ~1600 char, dergi makaleleri ~500 char; yazarın ifade groundlama alanı azaldı.
- Citation enflasyonu — yazar +2.7 daha çok atıf üretiyor; her ek atıf zayıf grounded.
- Source-mixing — tezler geniş-tutarlı, makaleler dar-ampirik. Yazar prompt'u bunu ayırt etmiyor.
Bu, basit bir "biz yaptık çalıştı" sonucu değil — gerçek bir bilimsel gözlem.
Teknik Yığın
- Dil: Python 3.13
- Orchestration: LangChain + LangGraph (5+1 ajan, conditional routing)
- Vector store: ChromaDB (cosine, 768-dim)
- Embedder:
trakad-embed-v2— 633K tezle fine-tuned (citation +%9.9) - Reranker: cross-encoder
bge-reranker-base(citation +%16, $0) - LLM: sağlayıcı-bağımsız — herhangi OpenAI-uyumlu (DeepSeek/OpenRouter/OpenAI) veya lokal Ollama/vLLM
- Live API'ler: OpenAlex/Semantic Scholar/DergiPark (isteğe bağlı, varsayılan kapalı)
- Eval: 30 soru × 4 metrik (LLM-as-judge), per-category breakdown
- Reproducibility: tüm kod GitHub'da, 16 GB index Hugging Face'de
Yapılanlar & Öğrenilenler (dürüst)
Yol haritası kanıta dayalı yürütüldü; ne çalışmadığı da raporlandı:
- ✅ Custom embedder —
trakad-embed-v2fine-tune edildi: citation accuracy +%9.9, CS kategorisi +%42.6. - ✅ Cross-encoder reranker — 30-soru A/B: citation 0.557→0.647 (+%16), $0 compute. Asıl kalite kazancı.
- ❌ Naif continued pre-train (Trendyol-7b) — register mode-collapse, başarısız (dürüst negatif).
- ❌ Writer distilasyonu (Gemma QLoRA) — teşhis darboğazın writer değil retrieval olduğunu gösterdi; fine-tune veriyle dürüstçe atlandı.
- 🔭 Kalan: akademik makale (bulguların derlenmesi).
Anlatı: embedder erişimi iyileştirdi ama korpus büyüyünce gürültü arttı (Corpus Expansion Paradox); writer'ı iyileştirmek işe yaramadı çünkü darboğaz writer değildi; reranker tam o gürültüyü filtreleyerek paradoksu kapattı.