From 799f08c491d89f8ef5e57971ccc8cd138ef449cd Mon Sep 17 00:00:00 2001 From: "l.gabrysiak" Date: Wed, 26 Feb 2025 12:08:47 +0100 Subject: [PATCH] mod allegro --- allegro.py | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/allegro.py b/allegro.py index 89c185b..e0cac0f 100644 --- a/allegro.py +++ b/allegro.py @@ -14,21 +14,17 @@ def prepare_dataset_from_file(file_path): with open(file_path, 'r', encoding='utf-8') as f: text = f.read() - # Wydziel artykuły za pomocą wyrażenia regularnego articles = re.findall(r'Art\.\s*\d+[a-z]*\..*?(?=\s*Art\.\s*\d+[a-z]*\.|\Z)', text, flags=re.DOTALL) formatted_articles = [] for article in articles: - # Usuń zbędne białe znaki article = ' '.join(article.strip().split()) - # Wydziel numer artykułu i treść art_match = re.match(r'Art\.\s*(\d+[a-z]*)\.?\s*(.*)', article, re.DOTALL) if art_match: art_number = art_match.group(1) art_text = art_match.group(2) - # Podziel na paragrafy, jeśli istnieją paragraphs = re.split(r'(§\s*\d+\.)', art_text) if len(paragraphs) > 1: formatted_paragraphs = [] @@ -42,23 +38,24 @@ def prepare_dataset_from_file(file_path): formatted_articles.append({"text": formatted}) - # Dodaj przykłady pytań i odpowiedzi - questions = [ - f"Zacytuj artykuł {art_number} Kodeksu pracy.", - f"Co mówi artykuł {art_number} Kodeksu pracy?", - f"Podaj treść artykułu {art_number} Kodeksu pracy." - ] - for question in questions: - formatted_articles.append({"text": f"{question}\n{formatted}"}) + questions = [ + f"Zacytuj artykuł {art_number} Kodeksu pracy.", + f"Co mówi artykuł {art_number} Kodeksu pracy?", + f"Podaj treść artykułu {art_number} Kodeksu pracy." + ] + for question in questions: + formatted_articles.append({"text": f"{question}\n{formatted}"}) return formatted_articles - def main(): # Inicjalizacja tokenizera tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) + tokenizer.pad_token = tokenizer.eos_token tokenizer.add_special_tokens({"additional_special_tokens": SPECIAL_TOKENS}) - tokenizer.pad_token = tokenizer.eos_token # Dodaj tę linię + + print(f"Pad token: {tokenizer.pad_token}") + print(f"Pad token ID: {tokenizer.pad_token_id}") # Przygotowanie danych data = prepare_dataset_from_file(TEXT_FILE_PATH) @@ -70,7 +67,7 @@ def main(): examples["text"], truncation=True, padding="max_length", - max_length=512, # Zwiększono dla dłuższych artykułów + max_length=512, return_tensors="pt" ) tokenized["labels"] = tokenized["input_ids"].clone() @@ -80,8 +77,8 @@ def main(): # Model i data collator model = AutoModelForCausalLM.from_pretrained(MODEL_NAME) - model.resize_token_embeddings(len(tokenizer)) # Dodaj tę linię - model.config.pad_token_id = tokenizer.pad_token_id # Dodaj tę linię + model.resize_token_embeddings(len(tokenizer)) + model.config.pad_token_id = tokenizer.pad_token_id data_collator = DataCollatorForLanguageModeling( tokenizer=tokenizer, @@ -91,22 +88,25 @@ def main(): # Konfiguracja treningu training_args = TrainingArguments( output_dir="./results", - num_train_epochs=32, # Zwiększono liczbę epok + num_train_epochs=32, per_device_train_batch_size=2, - learning_rate=1e-5, #precyzja uczenia + learning_rate=1e-5, logging_steps=10, weight_decay=0.01, report_to="none", - save_strategy="no", - load_best_model_at_end=True, # Ładowanie najlepszego modelu na końcu + save_strategy="steps", + save_steps=500, + evaluation_strategy="steps", + eval_steps=500, + load_best_model_at_end=True, ) - # Trainer trainer = Trainer( model=model, args=training_args, train_dataset=tokenized_dataset, + eval_dataset=tokenized_dataset, data_collator=data_collator ) @@ -116,4 +116,4 @@ def main(): tokenizer.save_pretrained("./trained_model/allegro") if __name__ == "__main__": - main() \ No newline at end of file + main()