Commit 803e8126 authored by Мазур Грета Евгеньевна's avatar Мазур Грета Евгеньевна
Browse files

micro zapusk no cross

parent ae43c80d
No related merge requests found
Showing with 54 additions and 28 deletions
+54 -28
...@@ -293,19 +293,29 @@ ...@@ -293,19 +293,29 @@
from transformers import BertTokenizer, BertForSequenceClassification from transformers import BertTokenizer, BertForSequenceClassification
from peft import PeftModel from peft import PeftModel
import torch import torch
from micro_no_cross import MultiTaskBert
# Пути к сохранённой модели # Пути к сохранённой модели
BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base" # BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base"
LORA_PATH = "./micro_no_cross_fine_tuned/lora" # LORA_PATH = "./micro_no_cross_fine_tuned/lora"
BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base2"
LORA_PATH = "./micro_no_cross_fine_tuned/lora2"
# Загружаем токенизатор # Загружаем токенизатор
tokenizer = BertTokenizer.from_pretrained("./micro_no_cross_fine_tuned") tokenizer = BertTokenizer.from_pretrained("./micro_no_cross_fine_tuned2")
# # Загружаем базовую модель
# base_model = BertForSequenceClassification.from_pretrained(BASE_MODEL_PATH)
# # Загружаем LoRA-адаптацию
# model = PeftModel.from_pretrained(base_model, LORA_PATH)
# Загружаем базовую модель base_model = MultiTaskBert.from_pretrained('bert-base-uncased').to(device)
base_model = BertForSequenceClassification.from_pretrained(BASE_MODEL_PATH)
# Загружаем LoRA-адаптацию model = PeftModel.from_pretrained(base_model, "./micro_no_cross_fine_tuned/lora2", strict=False)
model = PeftModel.from_pretrained(base_model, LORA_PATH)
# Переводим модель в режим оценки # Переводим модель в режим оценки
model.eval() model.eval()
......
...@@ -18,14 +18,14 @@ torch.cuda.empty_cache() ...@@ -18,14 +18,14 @@ torch.cuda.empty_cache()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Пути для сохранения токенизированных данных # Пути для сохранения токенизированных данных
TOKENIZED_DATA_DIR = "./tokenized_data_micro" TOKENIZED_DATA_DIR = "./tokenized_data_micro2"
TRAIN_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "train") TRAIN_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "train")
VAL_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "val") VAL_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "val")
TEST_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "test") TEST_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "test")
# Загрузка данных # Загрузка данных
data = pd.read_csv('all_dataset.csv') data = pd.read_csv('all_dataset.csv')
data = data.sample(frac=0.1, random_state=42).copy() # Берем 10% случайных данных data = data.sample(frac=0.05, random_state=42).copy() # Берем 10% случайных данных
...@@ -103,7 +103,7 @@ class MultiTaskBert(BertPreTrainedModel): ...@@ -103,7 +103,7 @@ class MultiTaskBert(BertPreTrainedModel):
# Создание модели # Создание модели
base_model = MultiTaskBert.from_pretrained('bert-base-uncased').to(device) base_model = MultiTaskBert.from_pretrained('bert-base-uncased').to(device)
base_model.save_pretrained('./micro_no_cross_fine_tuned/base') # Сохраняет модель и её веса base_model.save_pretrained('./micro_no_cross_fine_tuned/base2') # Сохраняет модель и её веса
# Настройка LoRA. # Настройка LoRA.
# Явно исключаем сохранение модулей, не адаптированных LoRA (например, классификаторов), # Явно исключаем сохранение модулей, не адаптированных LoRA (например, классификаторов),
...@@ -114,7 +114,9 @@ lora_config = LoraConfig( ...@@ -114,7 +114,9 @@ lora_config = LoraConfig(
lora_alpha=32, lora_alpha=32,
lora_dropout=0.1, lora_dropout=0.1,
target_modules=["query", "value"], target_modules=["query", "value"],
modules_to_save=["classifier"] # Не сохраняем дополнительные модули (classifier и т.д.) # modules_to_save=["classifier"] # Не сохраняем дополнительные модули (classifier и т.д.)
modules_to_save=["classifier_safety", "classifier_attack"] # Явно указываем оба классификатора
)
) )
model = get_peft_model(base_model, lora_config) model = get_peft_model(base_model, lora_config)
...@@ -181,9 +183,9 @@ plt.show() ...@@ -181,9 +183,9 @@ plt.show()
# tokenizer.save_pretrained('./fine-tuned-bert-lora_new') # tokenizer.save_pretrained('./fine-tuned-bert-lora_new')
# Сохранение модели, адаптеров LoRA и токенизатора # Сохранение модели, адаптеров LoRA и токенизатора
# base_model.save_pretrained('./micro_no_cross_fine_tuned/base') # Сохраняет модель и её веса # base_model.save_pretrained('./micro_no_cross_fine_tuned/base') # Сохраняет модель и её веса
tokenizer.save_pretrained('./micro_no_cross_fine_tuned') # Сохраняет токенизатор tokenizer.save_pretrained('./micro_no_cross_fine_tuned2') # Сохраняет токенизатор
# model.save_pretrained("./micro_no_cross_fine_tuned") # model.save_pretrained("./micro_no_cross_fine_tuned")
model.save_pretrained("./micro_no_cross_fine_tuned/lora") model.save_pretrained("./micro_no_cross_fine_tuned/lora2")
# model.save_adapter('./micro_no_cross_fine_tuned') # Сохраняет адаптеры LoRA # model.save_adapter('./micro_no_cross_fine_tuned') # Сохраняет адаптеры LoRA
print("Все сохранено") print("Все сохранено")
...@@ -193,6 +195,7 @@ print("Все сохранено") ...@@ -193,6 +195,7 @@ print("Все сохранено")
def predict(text): def predict(text):
# Токенизация (убедимся, что не передаем labels) # Токенизация (убедимся, что не передаем labels)
model.eval()
inputs = tokenizer( inputs = tokenizer(
text, text,
return_tensors="pt", return_tensors="pt",
......
...@@ -293,19 +293,29 @@ ...@@ -293,19 +293,29 @@
from transformers import BertTokenizer, BertForSequenceClassification from transformers import BertTokenizer, BertForSequenceClassification
from peft import PeftModel from peft import PeftModel
import torch import torch
from micro_no_cross import MultiTaskBert
# Пути к сохранённой модели # Пути к сохранённой модели
BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base" # BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base"
LORA_PATH = "./micro_no_cross_fine_tuned/lora" # LORA_PATH = "./micro_no_cross_fine_tuned/lora"
BASE_MODEL_PATH = "./micro_no_cross_fine_tuned/base2"
LORA_PATH = "./micro_no_cross_fine_tuned/lora2"
# Загружаем токенизатор # Загружаем токенизатор
tokenizer = BertTokenizer.from_pretrained("./micro_no_cross_fine_tuned") tokenizer = BertTokenizer.from_pretrained("./micro_no_cross_fine_tuned2")
# # Загружаем базовую модель
# base_model = BertForSequenceClassification.from_pretrained(BASE_MODEL_PATH)
# # Загружаем LoRA-адаптацию
# model = PeftModel.from_pretrained(base_model, LORA_PATH)
# Загружаем базовую модель base_model = MultiTaskBert.from_pretrained('bert-base-uncased').to(device)
base_model = BertForSequenceClassification.from_pretrained(BASE_MODEL_PATH)
# Загружаем LoRA-адаптацию model = PeftModel.from_pretrained(base_model, "./micro_no_cross_fine_tuned/lora2", strict=False)
model = PeftModel.from_pretrained(base_model, LORA_PATH)
# Переводим модель в режим оценки # Переводим модель в режим оценки
model.eval() model.eval()
......
...@@ -18,14 +18,14 @@ torch.cuda.empty_cache() ...@@ -18,14 +18,14 @@ torch.cuda.empty_cache()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Пути для сохранения токенизированных данных # Пути для сохранения токенизированных данных
TOKENIZED_DATA_DIR = "./tokenized_data_micro" TOKENIZED_DATA_DIR = "./tokenized_data_micro2"
TRAIN_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "train") TRAIN_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "train")
VAL_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "val") VAL_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "val")
TEST_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "test") TEST_TOKENIZED_PATH = os.path.join(TOKENIZED_DATA_DIR, "test")
# Загрузка данных # Загрузка данных
data = pd.read_csv('all_dataset.csv') data = pd.read_csv('all_dataset.csv')
data = data.sample(frac=0.1, random_state=42).copy() # Берем 10% случайных данных data = data.sample(frac=0.05, random_state=42).copy() # Берем 10% случайных данных
...@@ -103,7 +103,7 @@ class MultiTaskBert(BertPreTrainedModel): ...@@ -103,7 +103,7 @@ class MultiTaskBert(BertPreTrainedModel):
# Создание модели # Создание модели
base_model = MultiTaskBert.from_pretrained('bert-base-uncased').to(device) base_model = MultiTaskBert.from_pretrained('bert-base-uncased').to(device)
base_model.save_pretrained('./micro_no_cross_fine_tuned/base') # Сохраняет модель и её веса base_model.save_pretrained('./micro_no_cross_fine_tuned/base2') # Сохраняет модель и её веса
# Настройка LoRA. # Настройка LoRA.
# Явно исключаем сохранение модулей, не адаптированных LoRA (например, классификаторов), # Явно исключаем сохранение модулей, не адаптированных LoRA (например, классификаторов),
...@@ -114,7 +114,9 @@ lora_config = LoraConfig( ...@@ -114,7 +114,9 @@ lora_config = LoraConfig(
lora_alpha=32, lora_alpha=32,
lora_dropout=0.1, lora_dropout=0.1,
target_modules=["query", "value"], target_modules=["query", "value"],
modules_to_save=["classifier"] # Не сохраняем дополнительные модули (classifier и т.д.) # modules_to_save=["classifier"] # Не сохраняем дополнительные модули (classifier и т.д.)
modules_to_save=["classifier_safety", "classifier_attack"] # Явно указываем оба классификатора
)
) )
model = get_peft_model(base_model, lora_config) model = get_peft_model(base_model, lora_config)
...@@ -181,9 +183,9 @@ plt.show() ...@@ -181,9 +183,9 @@ plt.show()
# tokenizer.save_pretrained('./fine-tuned-bert-lora_new') # tokenizer.save_pretrained('./fine-tuned-bert-lora_new')
# Сохранение модели, адаптеров LoRA и токенизатора # Сохранение модели, адаптеров LoRA и токенизатора
# base_model.save_pretrained('./micro_no_cross_fine_tuned/base') # Сохраняет модель и её веса # base_model.save_pretrained('./micro_no_cross_fine_tuned/base') # Сохраняет модель и её веса
tokenizer.save_pretrained('./micro_no_cross_fine_tuned') # Сохраняет токенизатор tokenizer.save_pretrained('./micro_no_cross_fine_tuned2') # Сохраняет токенизатор
# model.save_pretrained("./micro_no_cross_fine_tuned") # model.save_pretrained("./micro_no_cross_fine_tuned")
model.save_pretrained("./micro_no_cross_fine_tuned/lora") model.save_pretrained("./micro_no_cross_fine_tuned/lora2")
# model.save_adapter('./micro_no_cross_fine_tuned') # Сохраняет адаптеры LoRA # model.save_adapter('./micro_no_cross_fine_tuned') # Сохраняет адаптеры LoRA
print("Все сохранено") print("Все сохранено")
...@@ -193,6 +195,7 @@ print("Все сохранено") ...@@ -193,6 +195,7 @@ print("Все сохранено")
def predict(text): def predict(text):
# Токенизация (убедимся, что не передаем labels) # Токенизация (убедимся, что не передаем labels)
model.eval()
inputs = tokenizer( inputs = tokenizer(
text, text,
return_tensors="pt", return_tensors="pt",
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment