법률 문서 요약 BERT 모델 (고급 PYTHON)
개요
한국어 판례 문서를 KoBART 기반 요약 모델로 자동 요약한다. Hugging Face Transformers 라이브러리를 사용하여 사전 학습된 한국어 요약 모델을 파인튜닝 없이 적용한다.
분석 절차
1단계: 모델 로드
gogamza/kobart-base-summarization 사전학습 모델을 로드한다. 이 모델은 한국어 텍스트 요약에 특화되어 있다.
2단계: 텍스트 전처리
판례 전문을 1024 토큰 이내로 자른다. 긴 판례는 분할하여 요약 후 결합한다.
3단계: 요약 생성
Beam Search(num_beams=4)로 고품질 요약을 생성한다. max_length=150, min_length=50으로 핵심 내용을 포함하면서 간결하게 요약한다.
4단계: 품질 평가
ROUGE 점수로 요약 품질을 평가한다. 사람이 작성한 요약과 비교하여 ROUGE-1, ROUGE-2, ROUGE-L을 계산한다.
주의사항
코드 예제
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import torch
# 한국어 BERT 요약 모델 로드
model_name = "gogamza/kobart-base-summarization"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
def summarize_judgment(text, max_length=150):
inputs = tokenizer(text, return_tensors="pt", max_length=1024,
truncation=True, padding="max_length")
summary_ids = model.generate(
inputs["input_ids"],
num_beams=4,
max_length=max_length,
min_length=50,
length_penalty=2.0,
early_stopping=True
)
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
return summary
# 판례 요약 실행
import pandas as pd
df = pd.read_csv('judgments.csv')
df['summary'] = df['full_text'].apply(summarize_judgment)
df[['case_id', 'summary']].to_csv('judgment_summaries.csv', index=False)
참고문헌
Lewis, M., Liu, Y., Goyal, N., et al. (2020). BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension. ACL 2020.
심화 내용
고급 분석에서는 다음을 추가로 고려해야 합니다:
- 부트스트래핑(Bootstrapping)을 통한 강건성 검증
- 교차 검증(Cross-validation)으로 모형 일반화 성능 평가
- 민감도 분석(Sensitivity Analysis)으로 가정 위반 시 영향 평가
코드 예제
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM import torch # 한국어 BERT 요약 모델 로드 model_name = "gogamza/kobart-base-summarization" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSeq2SeqLM.from_pretrained(model_name) def summarize_judgment(text, max_length=150): inputs = tokenizer(text, return_tensors="pt", max_length=1024, truncation=True, padding="max_length") summary_ids = model.generate( inputs["input_ids"], num_beams=4, max_length=max_length, min_length=50, length_penalty=2.0, early_stopping=True ) summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True) return summary # 판례 요약 실행 import pandas as pd df = pd.read_csv('judgments.csv') df['summary'] = df['full_text'].apply(summarize_judgment) df[['case_id', 'summary']].to_csv('judgment_summaries.csv', index=False)
참고문헌
Lewis, M., Liu, Y., Goyal, N., et al. (2020). BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension. ACL 2020.