Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
proekt
obuch
Commits
39556991
Commit
39556991
authored
1 week ago
by
Мазур Грета Евгеньевна
Browse files
Options
Download
Patches
Plain Diff
pereobuch2
parent
6a5ae95b
master
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
.ipynb_checkpoints/superPereObuch-checkpoint.py
+32
-10
.ipynb_checkpoints/superPereObuch-checkpoint.py
superPereObuch.py
+32
-10
superPereObuch.py
with
64 additions
and
20 deletions
+64
-20
.ipynb_checkpoints/superPereObuch-checkpoint.py
+
32
−
10
View file @
39556991
...
@@ -36,26 +36,31 @@ def load_and_balance_data():
...
@@ -36,26 +36,31 @@ def load_and_balance_data():
# Балансировка для редких классов атак
# Балансировка для редких классов атак
attack_types
=
unsafe_data
[
'type'
].
value_counts
()
attack_types
=
unsafe_data
[
'type'
].
value_counts
()
# Увеличиваем количество редких классов
# Увеличиваем количество редких классов
с заменой (replace=True)
balanced_unsafe
=
pd
.
concat
([
balanced_unsafe
=
pd
.
concat
([
unsafe_data
[
unsafe_data
[
'type'
]
==
'evasion'
].
sample
(
unsafe_data
[
unsafe_data
[
'type'
]
==
'evasion'
].
sample
(
n
=
int
(
len
(
unsafe_data
)
*
0.1
),
#
10% от общего числа unsafe
n
=
max
(
1
,
int
(
len
(
unsafe_data
)
*
0.1
)
)
,
#
Гарантируем хотя бы 1 пример
replace
=
True
,
replace
=
True
,
# Разрешаем повторения
random_state
=
42
random_state
=
42
),
),
unsafe_data
[
unsafe_data
[
'type'
]
==
'generic attack'
].
sample
(
unsafe_data
[
unsafe_data
[
'type'
]
==
'generic attack'
].
sample
(
n
=
int
(
len
(
unsafe_data
)
*
0.05
),
#
5% от общего числа unsafe
n
=
max
(
1
,
int
(
len
(
unsafe_data
)
*
0.05
)
)
,
#
Гарантируем хотя бы 1 пример
replace
=
True
,
replace
=
True
,
# Разрешаем повторения
random_state
=
42
random_state
=
42
),
),
unsafe_data
[
unsafe_data
[
'type'
].
isin
([
'jailbreak'
,
'injection'
])]
unsafe_data
[
unsafe_data
[
'type'
].
isin
([
'jailbreak'
,
'injection'
])]
])
])
# Финалный датасет (50/50 safe/unsafe)
# Берем выборку безопасных примеров с заменой, если нужно
balanced_data
=
pd
.
concat
([
n_samples
=
min
(
len
(
safe_data
),
len
(
balanced_unsafe
))
safe_data
.
sample
(
n
=
len
(
balanced_unsafe
)),
balanced_safe
=
safe_data
.
sample
(
balanced_unsafe
n
=
n_samples
,
]).
sample
(
frac
=
1
,
random_state
=
42
)
replace
=
len
(
safe_data
)
<
len
(
balanced_unsafe
),
# Разрешаем замену только если нужно
random_state
=
42
)
# Финалный датасет
balanced_data
=
pd
.
concat
([
balanced_safe
,
balanced_unsafe
]).
sample
(
frac
=
1
,
random_state
=
42
)
print
(
"
\n
Распределение после балансировки:"
)
print
(
"
\n
Распределение после балансировки:"
)
print
(
"Безопасность:"
,
balanced_data
[
'safety'
].
value_counts
(
normalize
=
True
))
print
(
"Безопасность:"
,
balanced_data
[
'safety'
].
value_counts
(
normalize
=
True
))
...
@@ -63,6 +68,7 @@ def load_and_balance_data():
...
@@ -63,6 +68,7 @@ def load_and_balance_data():
return
balanced_data
return
balanced_data
# 2. Токенизация с правильными именами колонок
# 2. Токенизация с правильными именами колонок
def
tokenize_data
(
tokenizer
,
df
):
def
tokenize_data
(
tokenizer
,
df
):
df
=
df
.
dropna
(
subset
=
[
'prompt'
])
df
=
df
.
dropna
(
subset
=
[
'prompt'
])
...
@@ -183,10 +189,26 @@ def compute_metrics(p):
...
@@ -183,10 +189,26 @@ def compute_metrics(p):
def
main
():
def
main
():
# 1. Подготовка данных
# 1. Подготовка данных
data
=
load_and_balance_data
()
data
=
load_and_balance_data
()
# Проверка что данные не пустые
if
len
(
data
)
==
0
:
raise
ValueError
(
"После балансировки получился пустой датасет. Проверьте исходные данные."
)
# Проверка распределения классов
print
(
"
\n
Проверка распределения перед обучением:"
)
print
(
"Safe:"
,
len
(
data
[
data
[
'safety'
]
==
'safe'
]))
print
(
"Unsafe:"
,
len
(
data
[
data
[
'safety'
]
==
'unsafe'
]))
train_data
,
test_data
=
train_test_split
(
data
,
test_size
=
0.2
,
stratify
=
data
[
'safety'
])
train_data
,
test_data
=
train_test_split
(
data
,
test_size
=
0.2
,
stratify
=
data
[
'safety'
])
train_data
,
val_data
=
train_test_split
(
train_data
,
test_size
=
0.1
,
stratify
=
train_data
[
'safety'
])
train_data
,
val_data
=
train_test_split
(
train_data
,
test_size
=
0.1
,
stratify
=
train_data
[
'safety'
])
# # ... остальной код
# data = load_and_balance_data()
# train_data, test_data = train_test_split(data, test_size=0.2, stratify=data['safety'])
# train_data, val_data = train_test_split(train_data, test_size=0.1, stratify=train_data['safety'])
# 2. Токенизация
# 2. Токенизация
tokenizer
=
BertTokenizer
.
from_pretrained
(
MODEL_NAME
)
tokenizer
=
BertTokenizer
.
from_pretrained
(
MODEL_NAME
)
train_dataset
=
tokenize_data
(
tokenizer
,
train_data
)
train_dataset
=
tokenize_data
(
tokenizer
,
train_data
)
...
...
This diff is collapsed.
Click to expand it.
superPereObuch.py
+
32
−
10
View file @
39556991
...
@@ -36,26 +36,31 @@ def load_and_balance_data():
...
@@ -36,26 +36,31 @@ def load_and_balance_data():
# Балансировка для редких классов атак
# Балансировка для редких классов атак
attack_types
=
unsafe_data
[
'type'
].
value_counts
()
attack_types
=
unsafe_data
[
'type'
].
value_counts
()
# Увеличиваем количество редких классов
# Увеличиваем количество редких классов
с заменой (replace=True)
balanced_unsafe
=
pd
.
concat
([
balanced_unsafe
=
pd
.
concat
([
unsafe_data
[
unsafe_data
[
'type'
]
==
'evasion'
].
sample
(
unsafe_data
[
unsafe_data
[
'type'
]
==
'evasion'
].
sample
(
n
=
int
(
len
(
unsafe_data
)
*
0.1
),
#
10% от общего числа unsafe
n
=
max
(
1
,
int
(
len
(
unsafe_data
)
*
0.1
)
)
,
#
Гарантируем хотя бы 1 пример
replace
=
True
,
replace
=
True
,
# Разрешаем повторения
random_state
=
42
random_state
=
42
),
),
unsafe_data
[
unsafe_data
[
'type'
]
==
'generic attack'
].
sample
(
unsafe_data
[
unsafe_data
[
'type'
]
==
'generic attack'
].
sample
(
n
=
int
(
len
(
unsafe_data
)
*
0.05
),
#
5% от общего числа unsafe
n
=
max
(
1
,
int
(
len
(
unsafe_data
)
*
0.05
)
)
,
#
Гарантируем хотя бы 1 пример
replace
=
True
,
replace
=
True
,
# Разрешаем повторения
random_state
=
42
random_state
=
42
),
),
unsafe_data
[
unsafe_data
[
'type'
].
isin
([
'jailbreak'
,
'injection'
])]
unsafe_data
[
unsafe_data
[
'type'
].
isin
([
'jailbreak'
,
'injection'
])]
])
])
# Финалный датасет (50/50 safe/unsafe)
# Берем выборку безопасных примеров с заменой, если нужно
balanced_data
=
pd
.
concat
([
n_samples
=
min
(
len
(
safe_data
),
len
(
balanced_unsafe
))
safe_data
.
sample
(
n
=
len
(
balanced_unsafe
)),
balanced_safe
=
safe_data
.
sample
(
balanced_unsafe
n
=
n_samples
,
]).
sample
(
frac
=
1
,
random_state
=
42
)
replace
=
len
(
safe_data
)
<
len
(
balanced_unsafe
),
# Разрешаем замену только если нужно
random_state
=
42
)
# Финалный датасет
balanced_data
=
pd
.
concat
([
balanced_safe
,
balanced_unsafe
]).
sample
(
frac
=
1
,
random_state
=
42
)
print
(
"
\n
Распределение после балансировки:"
)
print
(
"
\n
Распределение после балансировки:"
)
print
(
"Безопасность:"
,
balanced_data
[
'safety'
].
value_counts
(
normalize
=
True
))
print
(
"Безопасность:"
,
balanced_data
[
'safety'
].
value_counts
(
normalize
=
True
))
...
@@ -63,6 +68,7 @@ def load_and_balance_data():
...
@@ -63,6 +68,7 @@ def load_and_balance_data():
return
balanced_data
return
balanced_data
# 2. Токенизация с правильными именами колонок
# 2. Токенизация с правильными именами колонок
def
tokenize_data
(
tokenizer
,
df
):
def
tokenize_data
(
tokenizer
,
df
):
df
=
df
.
dropna
(
subset
=
[
'prompt'
])
df
=
df
.
dropna
(
subset
=
[
'prompt'
])
...
@@ -183,10 +189,26 @@ def compute_metrics(p):
...
@@ -183,10 +189,26 @@ def compute_metrics(p):
def
main
():
def
main
():
# 1. Подготовка данных
# 1. Подготовка данных
data
=
load_and_balance_data
()
data
=
load_and_balance_data
()
# Проверка что данные не пустые
if
len
(
data
)
==
0
:
raise
ValueError
(
"После балансировки получился пустой датасет. Проверьте исходные данные."
)
# Проверка распределения классов
print
(
"
\n
Проверка распределения перед обучением:"
)
print
(
"Safe:"
,
len
(
data
[
data
[
'safety'
]
==
'safe'
]))
print
(
"Unsafe:"
,
len
(
data
[
data
[
'safety'
]
==
'unsafe'
]))
train_data
,
test_data
=
train_test_split
(
data
,
test_size
=
0.2
,
stratify
=
data
[
'safety'
])
train_data
,
test_data
=
train_test_split
(
data
,
test_size
=
0.2
,
stratify
=
data
[
'safety'
])
train_data
,
val_data
=
train_test_split
(
train_data
,
test_size
=
0.1
,
stratify
=
train_data
[
'safety'
])
train_data
,
val_data
=
train_test_split
(
train_data
,
test_size
=
0.1
,
stratify
=
train_data
[
'safety'
])
# # ... остальной код
# data = load_and_balance_data()
# train_data, test_data = train_test_split(data, test_size=0.2, stratify=data['safety'])
# train_data, val_data = train_test_split(train_data, test_size=0.1, stratify=train_data['safety'])
# 2. Токенизация
# 2. Токенизация
tokenizer
=
BertTokenizer
.
from_pretrained
(
MODEL_NAME
)
tokenizer
=
BertTokenizer
.
from_pretrained
(
MODEL_NAME
)
train_dataset
=
tokenize_data
(
tokenizer
,
train_data
)
train_dataset
=
tokenize_data
(
tokenizer
,
train_data
)
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets