Lookadragon21 commited on
Commit
94593f2
·
verified ·
1 Parent(s): c446875

Upload folder using huggingface_hub

Browse files
Files changed (2) hide show
  1. Login.py +7 -0
  2. prepare_eli5_for_clm.py +76 -0
Login.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ from huggingface_hub import login, upload_folder
2
+
3
+ # (optional) Login with your Hugging Face credentials
4
+ login()
5
+
6
+ # Push your model files
7
+ upload_folder(folder_path="Modelo", repo_id="Lookadragon21/GPT2_distil-Hugging_face_tutorial", repo_type="model")
prepare_eli5_for_clm.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ========================================
2
+ # 1. LOAD DATASET
3
+ # ========================================
4
+ from datasets import load_dataset
5
+ eli5 = load_dataset("dany0407/eli5_category", split="train[:5000]")
6
+
7
+ # ========================================
8
+ # 2. SPLIT TRAIN/TEST
9
+ # ========================================
10
+ eli5 = eli5.train_test_split(test_size=0.2)
11
+
12
+ # ========================================
13
+ # 3. LOAD TOKENIZER
14
+ # ========================================
15
+ from transformers import AutoTokenizer
16
+ tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
17
+
18
+ # ========================================
19
+ # 4. FLATTEN NESTED STRUCTURE
20
+ # ========================================
21
+ eli5 = eli5.flatten()
22
+
23
+ # ========================================
24
+ # 5. TOKENIZAÇÃO (PREPROCESSING)
25
+ # ========================================
26
+ def preprocess_function(examples):
27
+ """Junta todas as respostas em uma string e tokeniza."""
28
+ return tokenizer(
29
+ [" ".join(x) for x in examples["answers.text"]],
30
+ truncation=True, # 👈 Corta textos muito longos
31
+ max_length=1024, # 👈 Limite máximo do GPT-2
32
+ )
33
+
34
+ # Aplicar a tokenização em todo o dataset
35
+ tokenized_eli5 = eli5.map(
36
+ preprocess_function,
37
+ batched=True, # Processa em lotes
38
+ num_proc=4, # 4 CPUs em paralelo
39
+ remove_columns=eli5["train"].column_names, # Remove colunas originais
40
+ )
41
+
42
+ print("✅ Tokenização concluída!")
43
+ print(tokenized_eli5)
44
+
45
+ # ========================================
46
+ # 6. AGRUPAR EM BLOCOS (CHUNKING)
47
+ # ========================================
48
+ block_size = 128
49
+
50
+ def group_texts(examples):
51
+ """Concatena textos e divide em blocos de tamanho fixo."""
52
+ # Concatena todos os textos
53
+ concatenated_examples = {k: sum(examples[k], []) for k in examples.keys()}
54
+ total_length = len(concatenated_examples[list(examples.keys())[0]])
55
+
56
+ # Descarta o resto que não completa um bloco
57
+ if total_length >= block_size:
58
+ total_length = (total_length // block_size) * block_size
59
+
60
+ # Divide em blocos de block_size
61
+ result = {
62
+ k: [t[i : i + block_size] for i in range(0, total_length, block_size)]
63
+ for k, t in concatenated_examples.items()
64
+ }
65
+
66
+ # Cria labels (cópia do input_ids para CLM)
67
+ result["labels"] = result["input_ids"].copy()
68
+ return result
69
+
70
+ lm_dataset = tokenized_eli5.map(group_texts, batched=True, num_proc=4)
71
+ print(lm_dataset)
72
+
73
+ from transformers import DataCollatorForLanguageModeling
74
+
75
+ tokenizer.pad_token = tokenizer.eos_token
76
+ data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)