| --- |
| 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. |
|
|