반응형
BERT 모델이 비밀번호 관련 문장을 학습하여 탐지할 수 있도록 설계하려면, 먼저 데이터셋을 준비하고, BERT 모델을 미세 조정(Fine-tuning)해야 합니다. 이 과정은 다음과 같이 구성됩니다:
1. 데이터 준비
먼저 비밀번호 관련 문장이 포함된 데이터셋이 필요합니다. 데이터셋은 "비밀번호가 포함된 문장"과 "비밀번호가 없는 문장"을 두 클래스로 나누어 구성해야 합니다.
예시 데이터셋 (CSV 형식 예):
문장 | 값 |
"The password is 1234." | 1 |
"This is just a normal sentence." | 0 |
"비밀번호는 qwerty입니다." | 1 |
"오늘 날씨가 참 좋네요." | 0 |
2. Hugging Face를 사용한 BERT 모델 Fine-tuning
아래 코드는 BERT 모델을 이용해 문장을 분류할 수 있도록 미세 조정하는 코드입니다.
예제 코드:
from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset, load_metric
# 데이터셋 로드 및 처리 (CSV 파일을 데이터셋으로 변환)
import pandas as pd
from datasets import Dataset
# 데이터 로드
data = {
"text": [
"The password is 1234.",
"This is just a normal sentence.",
"비밀번호는 qwerty입니다.",
"오늘 날씨가 참 좋네요."
],
"label": [1, 0, 1, 0]
}
df = pd.DataFrame(data)
dataset = Dataset.from_pandas(df)
# Tokenizer 설정
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
# 데이터 전처리
def preprocess_function(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True)
tokenized_dataset = dataset.map(preprocess_function, batched=True)
# 모델 초기화
model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
# 학습 설정
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=16,
num_train_epochs=3,
weight_decay=0.01,
save_steps=10_000,
save_total_limit=2,
)
# Trainer 생성
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset,
tokenizer=tokenizer,
)
# 모델 학습
trainer.train()
# 모델 저장
model.save_pretrained("./password_detection_model")
tokenizer.save_pretrained("./password_detection_model")
3. 학습된 모델로 비밀번호 문장 탐지
모델 학습 후, 새로운 문장에서 비밀번호 관련 문장을 탐지하려면 다음 코드를 사용하세요:
from transformers import BertTokenizer, BertForSequenceClassification
import torch
# 저장된 모델 로드
model = BertForSequenceClassification.from_pretrained("./password_detection_model")
tokenizer = BertTokenizer.from_pretrained("./password_detection_model")
# 문장 입력
sentence = "The password is 123456."
inputs = tokenizer(sentence, return_tensors="pt", padding="max_length", truncation=True, max_length=128)
outputs = model(**inputs)
# 결과 해석
logits = outputs.logits
predicted_class = torch.argmax(logits).item()
if predicted_class == 1:
print("Password-related sentence detected!")
else:
print("No password-related content detected.")
요약
- 데이터 준비: 비밀번호가 포함된 문장과 그렇지 않은 문장을 포함한 데이터셋 생성.
- Fine-tuning: BERT 모델을 사용해 미세 조정 진행.
- 예측: 학습된 모델을 활용하여 새로운 문장에서 비밀번호 관련 문장을 탐지.
반응형
'Python' 카테고리의 다른 글
Python - 내장 변수 관리 locals() (0) | 2025.04.09 |
---|---|
Python - 글로벌 인터프리터 락(GIL) 제거를 위한 주요 기술 (0) | 2025.04.09 |
FastAPI - Docs, Redoc 비활성화 하기 (0) | 2025.03.28 |
Python - (pymysql.err.OperationalError) (1241, 'Operand should contain 1 column(s)') INSERT (0) | 2025.01.13 |
Python - uv 패키지, 프로젝트 관리자 설치 및 사용법 (0) | 2025.01.08 |