본문 바로가기
Python

BERT 모델을 이용해서 이상 문장 학습 및 탐지하기

by 올엠 2025. 4. 16.
반응형

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.")

요약

  1. 데이터 준비: 비밀번호가 포함된 문장과 그렇지 않은 문장을 포함한 데이터셋 생성.
  2. Fine-tuning: BERT 모델을 사용해 미세 조정 진행.
  3. 예측: 학습된 모델을 활용하여 새로운 문장에서 비밀번호 관련 문장을 탐지.
반응형