LLM에 대해 대략적(겉핥기~)으로 살펴보고 약간은 이해를 하기도 했으니.. 새로운 모델을 하나 만들어볼 수 있을까 싶어 gpt에게 시켜봤습니다. 실제로 동작하지는 않겠지만 대략저긴 코드 이해하는데 역시 큰 도움이 되었습니다.
트랜스포머 모델은 수학적 개념이지만, 이걸 학습하고 실행하는건 코드로 되어 있을거고, 이 코드를 쉽게 만들 수 있도록 pytorch나 tensorflow와 같은 프레임워크가 존재하는거지?
자 그럼 신규 트랜스포머 모델을 활용한 GPTx 라는 모델을 만들려고하고 이 GPTx 모델은 pretrained 모델로 하고 싶어. 이 모델은 법률전문 모델이라고 가정할게. 기존에 사전트레이닝된 모델없이 처음부터 한땀한땀 만든다고 가정하고, GPTx pretrained모델을 만드는 과정을 pytorch로 구현하거나 설명해줘
네! 정확하게 이해했어. GPTx라는 새로운 트랜스포머 기반 모델을 만들고, 이를 법률 전문 AI로 사전 학습(Pretrained)하려면 어떻게 해야 할까?
우리가 해야 할 일은 크게 5단계로 나눌 수 있어:
1️⃣ 데이터 수집 & 정제: 법률 관련 텍스트 데이터를 모으고 정리
2️⃣ 토크나이징(Tokenization) 정의: 입력 데이터를 모델이 이해할 수 있도록 변환
3️⃣ 트랜스포머 모델(GPTx) 구현: PyTorch로 트랜스포머 모델을 직접 만들기
4️⃣ 사전 학습(Pretraining): 모델을 대량의 법률 데이터로 학습
5️⃣ 저장 및 추론(Finetuning & Inference): 모델을 저장하고 실제로 활용
1. 법률 전문 모델을 위한 데이터 수집 & 정제
법률 AI를 만들려면 법률 관련 데이터가 필요해. 일반적으로 사용할 수 있는 법률 데이터셋은 다음과 같아:
✅ 법률 문서 데이터셋 예시
- 법률 판례 데이터 (예: 미국 판례 데이터, 한국 대법원 판결문 등)
- 법률 조항 및 법률 서적 (예: 헌법, 민법, 형법 등)
- 계약서 데이터 (익명화된 실제 계약 문서)
- 법률 논문 및 연구 보고서
데이터를 웹 크롤링하거나 이미 정리된 오픈소스 데이터셋을 활용할 수도 있어.
데이터 정제 과정 (Python 예제)
모은 데이터에서 불필요한 공백, 특수 문자, 중복 문장 등을 정리해야 함.
import re
def clean_text(text):
text = text.lower() # 소문자로 변환
text = re.sub(r'\n+', ' ', text) # 여러 개의 줄바꿈을 하나로 정리
text = re.sub(r'\s+', ' ', text).strip() # 공백 정리
text = re.sub(r'[^\w\s.,!?]', '', text) # 특수 문자 제거
return text
# 예제 데이터
raw_text = "이 사건의 법률적 쟁점은 다음과 같다. \n\n 첫째, 계약의 성립 여부..."
cleaned_text = clean_text(raw_text)
print(cleaned_text)
✅ 이렇게 하면 텍스트가 깔끔하게 정리됨!
2. 토크나이저(Tokenization) 정의
트랜스포머 모델은 텍스트를 숫자로 변환해야 이해할 수 있어.
이를 위해 토크나이저를 사용해 단어 또는 서브워드 단위로 변환해야 해.
법률 특화 모델이므로 법률 용어를 잘 반영한 토크나이저가 필요!
- 기존 토크나이저(BPE, WordPiece 등)를 사용하거나,
- 직접 새로운 법률 전문 토크나이저를 학습할 수도 있음.
Hugging Face의 BPE 기반 토크나이저 생성 예제 (법률 데이터 학습)
from tokenizers import Tokenizer, models, pre_tokenizers, trainers, processors
# 새로운 토크나이저 정의 (법률 데이터에 맞춰 학습)
tokenizer = Tokenizer(models.BPE())
tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()
trainer = trainers.BpeTrainer(vocab_size=50000, special_tokens=["[PAD]", "[CLS]", "[SEP]", "[UNK]"])
# 법률 데이터로 토크나이저 학습
files = ["legal_text_1.txt", "legal_text_2.txt"] # 법률 텍스트 파일 목록
tokenizer.train(files, trainer)
# 저장 및 사용 예제
tokenizer.save("legal_tokenizer.json")
encoded = tokenizer.encode("이 사건의 법률적 쟁점은 계약의 성립 여부입니다.")
print(encoded.tokens)
✅ 이렇게 하면 법률 문장에 최적화된 토크나이저를 만들 수 있음!
3. GPTx 트랜스포머 모델 구현 (PyTorch)
이제 트랜스포머 모델(GPTx)을 직접 PyTorch로 구현해야 해.
GPT 모델은 디코더(Decoder)만 사용하는 구조이므로, GPT 기반 트랜스포머를 만든다!
GPTx 트랜스포머 구현 (PyTorch)
import torch
import torch.nn as nn
import torch.nn.functional as F
class GPTx(nn.Module):
def __init__(self, vocab_size, d_model=768, num_heads=12, num_layers=12):
super(GPTx, self).__init__()
self.embedding = nn.Embedding(vocab_size, d_model)
self.transformer_blocks = nn.TransformerDecoder(
nn.TransformerDecoderLayer(d_model=d_model, nhead=num_heads), num_layers=num_layers
)
self.fc_out = nn.Linear(d_model, vocab_size)
def forward(self, input_ids):
x = self.embedding(input_ids)
x = self.transformer_blocks(x, x) # GPT는 디코더만 사용
logits = self.fc_out(x)
return logits
# 모델 초기화
vocab_size = 50000 # 토크나이저에서 만든 단어 수
gptx = GPTx(vocab_size)
이 모델이 GPTx 법률 특화 트랜스포머 모델이 됨!
4. 모델 학습 (Pretraining)
이제 법률 데이터를 사용하여 모델을 사전 학습해야 해!
- Pretraining 목표: GPTx가 법률 문장을 학습하여 자연스러운 법률 문장을 생성할 수 있도록 함.
- 데이터: 방대한 법률 텍스트
- 손실 함수: CrossEntropyLoss (다음 단어 예측)
- 최적화 알고리즘: AdamW
법률 데이터로 GPTx 학습하기 (PyTorch)
from torch.utils.data import DataLoader, Dataset
import torch.optim as optim
# 데이터셋 정의
class LegalDataset(Dataset):
def __init__(self, texts, tokenizer):
self.tokenized_data = [tokenizer.encode(t).ids for t in texts]
def __len__(self):
return len(self.tokenized_data)
def __getitem__(self, idx):
input_ids = torch.tensor(self.tokenized_data[idx], dtype=torch.long)
return input_ids, input_ids.clone() # GPT는 자기 자신을 예측하는 모델
# 학습 데이터 로딩
texts = ["이 사건의 법률적 쟁점은...", "계약법에 따르면..."] # 예제 데이터
dataset = LegalDataset(texts, tokenizer)
dataloader = DataLoader(dataset, batch_size=8, shuffle=True)
# 학습 설정
optimizer = optim.AdamW(gptx.parameters(), lr=1e-4)
loss_fn = nn.CrossEntropyLoss()
# 학습 루프
for epoch in range(10): # 10 에포크
for input_ids, target_ids in dataloader:
optimizer.zero_grad()
outputs = gptx(input_ids)
loss = loss_fn(outputs.view(-1, vocab_size), target_ids.view(-1))
loss.backward()
optimizer.step()
print(f"Epoch {epoch + 1}, Loss: {loss.item()}")
✅ 이제 GPTx 모델이 법률 문장을 학습 중! 🚀
5. 모델 저장 및 사용
학습된 모델을 저장하고, 법률 질의응답 AI로 활용할 수도 있어!
모델 저장
torch.save(gptx.state_dict(), "gptx_legal_model.pth")
법률 질문 예제
def generate_text(model, input_text, tokenizer, max_length=100):
input_ids = torch.tensor(tokenizer.encode(input_text).ids, dtype=torch.long).unsqueeze(0)
output = model(input_ids)
return tokenizer.decode(output.argmax(dim=-1).squeeze().tolist())
print(generate_text(gptx, "계약서에서 중요한 요소는", tokenizer))
✅ 법률 GPTx가 법률 문장을 생성할 수 있음!
결론: GPTx(법률 특화 모델) 만드는 과정
✅ 1. 데이터 수집 & 정제 → 법률 문서 수집
✅ 2. 토크나이징 → 법률 용어 최적화 토크나이저
✅ 3. 트랜스포머 모델 구현 → PyTorch로 GPT 기반 모델 생성
✅ 4. 사전 학습(Pretraining) → 법률 데이터를 학습
✅ 5. 모델 저장 및 사용 → 실제 법률 Q&A에 활용