CoolFace
Datasetpublic

ysn-rfd/text-dataset-tiny-code-script-py-format

USED of tahamajs/medicine_ds_persian for .parquet file USED of Alijafarixcs2/persian-it-llama2-2k for .parquet file USED of Abirate/english_quotes for .jsonl file NEW FILES (05/12/2025) NEW FILES (12/26/2025) NEW FILES (02/15/2026)

sourceHugging Faceapache-2.0updated 4mo agoView on Hugging Face
3likes1.6kdownloads
f4_test_optimized.py121 linesDownload Raw Back to pytorch_fine_tuning_code
1import torch
2import torch.nn as nn
3from torch.utils.data import Dataset, DataLoader
4import numpy as np
5
6# Configuration
7FILE_PATH = 'dataset.txt'
8SEQ_LENGTH = 32
9BATCH_SIZE = 8
10EPOCHS = 5
11EMBEDDING_DIM = 32
12HIDDEN_DIM = 64
13LEARNING_RATE = 0.01
14
15# Read and process text
16with open(FILE_PATH, 'r', encoding='utf-8') as f:
17    text = f.read()
18
19# Vocabulary setup
20chars = sorted(set(text))
21vocab_size = len(chars)
22char_to_idx = {ch: i for i, ch in enumerate(chars)}
23idx_to_char = {i: ch for i, ch in enumerate(chars)}
24
25# Encode text
26encoded_text = np.array([char_to_idx[ch] for ch in text], dtype=np.int64)
27
28# Dataset class
29class TextDataset(Dataset):
30    def __init__(self, data, seq_length):
31        self.data = data
32        self.seq_length = seq_length
33        
34    def __len__(self):
35        return len(self.data) - self.seq_length
36    
37    def __getitem__(self, idx):
38        x = torch.tensor(self.data[idx:idx+self.seq_length], dtype=torch.long)
39        y = torch.tensor(self.data[idx+1:idx+self.seq_length+1], dtype=torch.long)
40        return x, y
41
42dataset = TextDataset(encoded_text, SEQ_LENGTH)
43dataloader = DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=0)
44
45# Model architecture
46class CharLM(nn.Module):
47    def __init__(self):
48        super(CharLM, self).__init__()
49        self.embedding = nn.Embedding(vocab_size, EMBEDDING_DIM)
50        self.rnn = nn.GRU(EMBEDDING_DIM, HIDDEN_DIM, batch_first=True)
51        self.fc = nn.Linear(HIDDEN_DIM, vocab_size)
52        
53    def forward(self, x, hidden=None):
54        x = self.embedding(x)
55        out, hidden = self.rnn(x, hidden)
56        out = self.fc(out)
57        return out, hidden
58
59device = torch.device("cpu")
60model = CharLM().to(device)
61criterion = nn.CrossEntropyLoss()
62optimizer = torch.optim.Adam(model.parameters(), lr=LEARNING_RATE)
63
64# Training loop
65for epoch in range(EPOCHS):
66    model.train()
67    total_loss = 0
68    
69    for inputs, targets in dataloader:
70        inputs, targets = inputs.to(device), targets.to(device)
71
72        optimizer.zero_grad()
73        outputs, _ = model(inputs)
74        loss = criterion(outputs.reshape(-1, vocab_size), targets.reshape(-1))
75        loss.backward()
76        optimizer.step()
77        total_loss += loss.item()
78    
79    print(f'Epoch {epoch+1}/{EPOCHS}, Loss: {total_loss / len(dataloader):.4f}')
80
81# Enhanced Text Generation Function
82def generate_text(model, start_str, length=100, temperature=0.7, top_k=0):
83    """
84    Generate text with temperature scaling and top-k sampling
85    temperature: >1.0 more random, <1.0 more conservative
86    top_k: 0=no sampling, >0 top-k tokens to consider
87    """
88    model.eval()
89    chars = [ch for ch in start_str]
90    input_seq = torch.tensor([char_to_idx[ch] for ch in chars], dtype=torch.long).unsqueeze(0).to(device)
91    hidden = None
92    
93    with torch.no_grad():
94        for _ in range(length):
95            outputs, hidden = model(input_seq, hidden)
96            logits = outputs[0, -1] / temperature
97
98            if top_k > 0:
99                top_vals, top_idx = torch.topk(logits, top_k)
100                logits[logits < top_vals[-1]] = -float('Inf')
101            
102            probs = torch.softmax(logits, dim=-1)
103            next_char = torch.multinomial(probs, num_samples=1).item()
104            chars.append(idx_to_char[next_char])
105            input_seq = torch.tensor([[next_char]], dtype=torch.long).to(device)
106    
107    return ''.join(chars)
108
109# Text generation examples
110print("\nGreedy sampling (temperature=0.5):")
111print(generate_text(model, "The ", temperature=0.5))
112
113print("\nCreative sampling (temperature=1.2):")
114print(generate_text(model, "Once ", temperature=1.2))
115
116print("\nTop-k sampling (k=5):")
117print(generate_text(model, "In ", top_k=5))
118
119print("\nCombined (temp=0.7, top_k=3):")
120print(generate_text(model, "AI ", temperature=0.7, top_k=3))
121