법률 문서 요약 BERT 모델 (Python)
중급
정성 분석
legal
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.
코드 예제
PYTHON
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.