--- license: apache-2.0 language: - tr - en tags: - dataset-tools - multiple-choice - sft - data-cleaning --- # Multiple-Choice Correct-Answer Filter Çoktan seçmeli SFT dataset'lerinde **şıkları tamamen kaldırıp soruyu saf metne indiren ve cevap mesajını doğru şıkkın düz metnine çeviren** küçük bir Python aracı. Fizik, matematik, tarih gibi derslere özgü kurulmamıştır — `conversations` veya `messages` formatındaki herhangi bir JSONL çoktan seçmeli veri setinde çalışır. ## Ne yapar? **Önce:** ``` user: Soru: Termodinamiğin birinci yasası neyi ifade eder? A) Entropi her zaman artar B) Enerji korunur C) Mutlak sıcaklık sıfıra ulaşılamaz D) Isı soğuktan sıcağa akar assistant: Cevap: B) Enerji korunur ``` **Sonra:** ``` user: Termodinamiğin birinci yasası neyi ifade eder? assistant: Enerji korunur ``` - Soru metnindeki tüm şık satırları ve "Soru:" / "Question:" prefix'i temizlenir. - Cevap mesajı, doğru şıkkın harf/prefix'siz düz metnine dönüşür. - Serbest metinli (çoktan seçmeli olmayan) kayıtlar varsayılan olarak olduğu gibi geçirilir. ## Desteklenen formatlar | Yapı | Örnek | |------|-------| | `conversations` | `[{"from": "human/gpt", "value": "..."}]` | | `messages` | `[{"role": "user/assistant", "content": "..."}]` | Desteklenen cevap prefixleri: - Türkçe: `Cevap: B)`, `Doğru cevap: B`, `**Cevap:** **B) ...**` - İngilizce: `Answer: B`, `The answer is B`, `**Answer:** B`, `B is correct` A–Z arası harfler (fizik80k örneklerinde A–J'ye kadar şık olabiliyor). ## Kurulum Dependency yok, pure Python 3.10+. ```bash wget https://huggingface.co/MRBeDev/mc-answer-filter/resolve/main/filter_correct_answer.py ``` ## Kullanım **1) HF'ten otomatik indir + temizle (tüm split'ler birden):** ```bash export HF_TOKEN=hf_... # private dataset için python3 filter_correct_answer.py \ --hf mrbe-share/fizik80k \ --outdir ./out/fizik ``` **2) Tek lokal dosya:** ```bash python3 filter_correct_answer.py \ --file train.jsonl \ --output train_clean.jsonl ``` **3) Çoktan seçmeli olmayanları at:** ```bash python3 filter_correct_answer.py \ --hf mrbe-share/fizik80k \ --outdir ./out/fizik \ --drop-non-mc ``` **4) Sadece belirli bir split:** ```bash python3 filter_correct_answer.py \ --hf MRBeDev/physics-reasoning-dataset \ --split-path train.jsonl \ --outdir ./out/physics ``` ## CLI flag'leri | Flag | Açıklama | |------|----------| | `--hf REPO` | HuggingFace dataset id | | `--file PATH` | Lokal .jsonl (--hf yerine) | | `--output PATH` | Tek dosya modu çıktı (--file ile) | | `--outdir DIR` | Çoklu dosya modu çıkış dizini (--hf ile) | | `--split-path X` | Belirli dosya(lar)ı işle (birden fazla kez verilebilir) | | `--drop-non-mc` | Çoktan seçmeli olmayan kayıtları at | | `--token TOKEN` | HF API token (private için) | | `--cache-dir DIR` | İndirilen dosyaların cache'i (default `/tmp/hf_dataset_cache`) | | `--force-download` | Cache'i yok say | ## Dataset bütünlüğü Default olarak çoktan seçmeli olmayan kayıtlar **olduğu gibi** geçirilir, böylece dataset boyutu korunur. Sadece çoktan seçmeli soruların içi temizlenir ve cevap mesajı sadeleştirilir. `--drop-non-mc` ile bu davranışı değiştirebilirsin. ## Lisans Apache 2.0. İstediğin gibi kullan.