mc-answer-filter / README.md
Behlul
Refactor: strip all options + produce plain-text answer
5f0e511
---
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.