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
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  # Context window size
9BATCH_SIZE = 8
10EPOCHS = 1
11EMBEDDING_DIM = 64
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(list(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])
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 - 1
36    
37    def __getitem__(self, idx):
38        x = self.data[idx:idx+self.seq_length]
39        y = self.data[idx+1:idx+self.seq_length+1]
40        return torch.from_numpy(x).long(), torch.from_numpy(y).long()
41
42dataset = TextDataset(encoded_text, SEQ_LENGTH)
43dataloader = DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True)
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
59model = CharLM()
60criterion = nn.CrossEntropyLoss()
61optimizer = torch.optim.Adam(model.parameters(), lr=LEARNING_RATE)
62
63# Training loop
64for epoch in range(EPOCHS):
65    model.train()
66    total_loss = 0
67    
68    for inputs, targets in dataloader:
69        optimizer.zero_grad()
70        outputs, _ = model(inputs)
71        loss = criterion(outputs.reshape(-1, vocab_size), targets.reshape(-1))
72        loss.backward()
73        optimizer.step()
74        total_loss += loss.item()
75    
76    print(f'Epoch {epoch+1}/{EPOCHS}, Loss: {total_loss/len(dataloader):.4f}')
77
78# Enhanced Text Generation Functions
79def generate_text(model, start_str, length=100, temperature=0.7, top_k=0):
80    """
81    Generate text with temperature scaling and top-k sampling
82    temperature: >1.0 more random, <1.0 more conservative
83    top_k: 0=no sampling, >0 top-k tokens to consider
84    """
85    model.eval()
86    chars = [ch for ch in start_str]
87    input_seq = torch.tensor([char_to_idx[ch] for ch in chars]).unsqueeze(0)
88    hidden = None
89    
90    with torch.no_grad():
91        for _ in range(length):
92            outputs, hidden = model(input_seq, hidden)
93            logits = outputs[0, -1] / temperature
94            
95            if top_k > 0:
96                top_vals, top_idx = torch.topk(logits, top_k)
97                logits[logits < top_vals[-1]] = -float('Inf')
98            
99            probs = torch.softmax(logits, dim=-1)
100            next_char = torch.multinomial(probs, num_samples=1).item()
101            chars.append(idx_to_char[next_char])
102            input_seq = torch.tensor([[next_char]])
103    
104    return ''.join(chars)
105
106# Generation examples
107print("\nGreedy sampling (temperature=0.5):")
108print(generate_text(model, "The ", temperature=0.5))
109
110print("\nCreative sampling (temperature=1.2):")
111print(generate_text(model, "Once ", temperature=1.2))
112
113print("\nTop-k sampling (k=5):")
114print(generate_text(model, "In ", top_k=5))
115
116print("\nCombined (temp=0.7, top_k=3):")
117print(generate_text(model, "AI ", temperature=0.7, top_k=3))
118
119