File size: 3,417 Bytes
7d91ba4
 
 
 
 
 
 
 
 
 
 
 
 
 
5f0e511
7d91ba4
 
 
 
 
 
 
5f0e511
 
 
 
 
7d91ba4
5f0e511
7d91ba4
 
5f0e511
7d91ba4
5f0e511
7d91ba4
5f0e511
7d91ba4
 
5f0e511
 
 
7d91ba4
 
 
 
 
 
 
 
 
5f0e511
7d91ba4
 
 
 
 
 
 
 
 
 
 
 
 
 
5f0e511
7d91ba4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5f0e511
7d91ba4
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
---
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.