vector2000 commited on
Commit
a67cce9
·
verified ·
1 Parent(s): 0733c90

Upload check.py

Browse files
Files changed (1) hide show
  1. check.py +99 -0
check.py ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from transformers import AutoModelForCausalLM, AutoTokenizer
3
+ from datasets import Dataset # , load_dataset
4
+ from tqdm import tqdm
5
+
6
+ # Завантаження моделей та токенізатора
7
+ # original_model_name = "meta-llama/Meta-Llama-3.1-8B"
8
+ original_model_name = "facebook/opt-350m" # Це відкрита модель, яку можно використовувати для тестування
9
+
10
+ fine_tuned_model_path = "./fine_tuned_model" # Шлях до вашої донавченної моделі
11
+
12
+ tokenizer = AutoTokenizer.from_pretrained(original_model_name)
13
+ original_model = AutoModelForCausalLM.from_pretrained(original_model_name)
14
+ fine_tuned_model = AutoModelForCausalLM.from_pretrained(fine_tuned_model_path)
15
+
16
+ # Завантаження тестового набора данних
17
+ # test_dataset = load_dataset("wikitext", "wikitext-2-raw-v1", split="test")
18
+
19
+ # Завантаження данних з локального тестового файлу
20
+ with open("ilya_klimov_data.txt", "r", encoding="utf-8") as file:
21
+ text_data = file.read().strip()
22
+
23
+ # Створення датасету
24
+ test_dataset = Dataset.from_dict({"text": [text_data]})
25
+
26
+ def calculate_perplexity(model, tokenizer, dataset, max_length=1024):
27
+ model.eval()
28
+ total_loss = 0
29
+ total_length = 0
30
+
31
+ for item in tqdm(dataset, desc="Calculating perplexity"):
32
+ encodings = tokenizer(item['text'], return_tensors='pt', truncation=True, max_length=max_length)
33
+ input_ids = encodings.input_ids.to(model.device)
34
+
35
+ with torch.no_grad():
36
+ outputs = model(input_ids, labels=input_ids)
37
+
38
+ total_loss += outputs.loss.item() * input_ids.size(1)
39
+ total_length += input_ids.size(1)
40
+
41
+ avg_loss = total_loss / total_length
42
+ perplexity = torch.exp(torch.tensor(avg_loss)).item()
43
+ return perplexity
44
+
45
+ # Розрахунок реплексії для обох моделей
46
+ print("Calculating perplexity for the original model...")
47
+ original_perplexity = calculate_perplexity(original_model, tokenizer, test_dataset)
48
+
49
+ print("Calculating perplexity for the fine-tuned model...")
50
+ fine_tuned_perplexity = calculate_perplexity(fine_tuned_model, tokenizer, test_dataset)
51
+
52
+ print(f"Original model perplexity: {original_perplexity:.2f}")
53
+ print(f"Fine-tuned model perplexity: {fine_tuned_perplexity:.2f}")
54
+
55
+ # Порівняння генерації текста
56
+ def generate_text(model, tokenizer, prompt, max_length=150):
57
+ input_ids = tokenizer.encode(prompt, return_tensors="pt")
58
+ with torch.no_grad():
59
+ output = model.generate(input_ids, max_length=max_length, num_return_sequences=1, no_repeat_ngram_size=2)
60
+ return tokenizer.decode(output[0], skip_special_tokens=True)
61
+
62
+ # prompt = "The history of artificial intelligence"
63
+ prompt = "Илья Климов - разработчик из Харькова, работающий в GitLab. Его основной язык программирования"
64
+
65
+ print("\nText generation comparison:")
66
+ print("Original model output:")
67
+ print(generate_text(original_model, tokenizer, prompt))
68
+ print("\nFine-tuned model output:")
69
+ print(generate_text(fine_tuned_model, tokenizer, prompt))
70
+
71
+ # Порівняння втрат на декількох прикладах
72
+ def compare_losses(original_model, fine_tuned_model, tokenizer, texts):
73
+ original_model.eval()
74
+ fine_tuned_model.eval()
75
+
76
+ for i, text in enumerate(texts, 1):
77
+ inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
78
+
79
+ with torch.no_grad():
80
+ original_loss = original_model(**inputs, labels=inputs["input_ids"]).loss.item()
81
+ fine_tuned_loss = fine_tuned_model(**inputs, labels=inputs["input_ids"]).loss.item()
82
+
83
+ print(f"\nExample {i}:")
84
+ print(f"Original model loss: {original_loss:.4f}")
85
+ print(f"Fine-tuned model loss: {fine_tuned_loss:.4f}")
86
+
87
+ print("\nComparing losses on specific examples:")
88
+ #example_texts = [
89
+ # "Artificial intelligence has revolutionized many fields of science and technology.",
90
+ # "The development of machine learning algorithms has led to significant advancements in data analysis.",
91
+ # "Neural networks are a fundamental component of modern AI systems."
92
+ #]
93
+ example_texts = [
94
+ "Илья Климов работает в компании GitLab и использует JavaScript.",
95
+ "Основной фреймворк, который использует Илья Климов для работы в GitLab - это VueJS.",
96
+ "Илья Климов выступает на IT-конференциях и продает курсы по программированию.",
97
+ "У Ильи Климова есть желтый лотос, что является интересным фактом о нем."
98
+ ]
99
+ compare_losses(original_model, fine_tuned_model, tokenizer, example_texts)