PEGEAI / src /dataset.py
Alp Ege Bedir
PEGEAI dosyaları yükleniyor
db5e0ee
Raw
History Blame Contribute Delete
1.95 kB
import os
import torch
import numpy as np
from torch.utils.data import Dataset
import glob
import json
class TextDataset(Dataset):
"""
Pre-tokenize edilmiş binary dosyadan okur (wikipedia_tokens.bin).
__getitem__ sadece numpy slice - çok hızlı.
"""
def __init__(self, data_dir, tokenizer, max_length=512):
self.tokenizer = tokenizer
self.max_length = max_length
bin_path = os.path.join(data_dir, "wikipedia_tokens.bin")
if not os.path.exists(bin_path):
raise FileNotFoundError(
f"{bin_path} bulunamadı!\n"
"Önce çalıştır: cd ~/pege && python3 pretokenize.py"
)
print(f"Token verisi yükleniyor: {bin_path}")
self.tokens = np.memmap(bin_path, dtype=np.uint16, mode='r')
print(f"Toplam token: {len(self.tokens):,}")
def __len__(self):
return max(0, len(self.tokens) - self.max_length - 1)
def __getitem__(self, idx):
chunk = self.tokens[idx : idx + self.max_length + 1].astype(np.int64)
x = torch.from_numpy(chunk[:self.max_length])
y = torch.from_numpy(chunk[1:self.max_length + 1])
return x, y
class ConversationDataset(Dataset):
"""RLHF için konuşma verisi"""
def __init__(self, feedback_file, tokenizer):
self.tokenizer = tokenizer
self.conversations = []
if os.path.exists(feedback_file):
with open(feedback_file, 'r', encoding='utf-8') as f:
for line in f:
self.conversations.append(json.loads(line))
def __len__(self):
return len(self.conversations)
def __getitem__(self, idx):
conv = self.conversations[idx]
text = f"{self.tokenizer.USER}{conv['input']}{self.tokenizer.ASSISTANT}{conv['output']}"
tokens = self.tokenizer.encode(text)
reward = 1.0 if conv['feedback'] == 'good' else -1.0
return tokens, reward