⚖️

계약서·법률 문서 특화 OCR — 조항 추출, 당사자 식별, 구조화

Legal-BERT + LayoutLMv3 + CUAD 데이터셋으로 계약서를 구조화된 데이터로 변환

계약서 처리 파이프라인

계약서 처리는 2단계다:

1단계: OCR — 계약서 이미지/PDF → 텍스트
2단계: NLU — 텍스트 → 구조화된 데이터 (조항, 당사자, 기한, 금액)

1단계는 일반 OCR(PaddleOCR, Marker 등)로 충분하다. 핵심은 2단계 — 법률 텍스트를 이해하는 것.

Legal-BERT — 법률 언어 전용 BERT

일반 BERT는 Wikipedia/인터넷으로 훈련됐다. Legal-BERT는 12GB의 법률 텍스트(법률, 판례, 계약서)로 추가 훈련됐다.

from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("nlpaueb/legal-bert-base-uncased")
model = AutoModel.from_pretrained("nlpaueb/legal-bert-base-uncased")
# 법률 용어("indemnification", "force majeure")를 일반 BERT보다 잘 이해

이걸 CUAD 데이터셋으로 파인튜닝하면 계약서 조항을 분류할 수 있다.

CUAD — 계약서 이해 데이터셋

500개 이상의 실제 계약서에 13,000개의 전문가 어노테이션. 41개 라벨 카테고리:

  • 해지 조항 (Termination)

  • 책임 한도 (Liability Cap)

  • IP 소유권 (IP Ownership)

  • 경쟁 금지 (Non-Compete)

  • 갱신 조건 (Renewal Term)

  • 등등 41개

from datasets import load_dataset
dataset = load_dataset("theatticusproject/cuad-qa")
print(dataset["train"][0])
# → {'question': 'What is the termination clause?',
#    'context': '계약서 텍스트...',
#    'answers': {'text': ['Either party may terminate...'], 'answer_start': [1234]}}

Legal-BERT + CUAD = 계약서에서 "해지 조항이 뭐야?" "책임 한도가 얼마야?" 같은 질문에 답하는 모델.

LayoutLMv3 — 문서 레이아웃까지 이해

Legal-BERT는 텍스트만 본다. LayoutLMv3는 텍스트 + 레이아웃(위치) + 이미지를 함께 본다.

Legal-BERT: "이 텍스트가 해지 조항인가?" (텍스트만)
LayoutLMv3: "이 위치의 이 텍스트가 해지 조항인가?" (텍스트+위치+이미지)

계약서에서 서명란, 날짜란, 조항 번호 등은 위치가 중요하다. LayoutLMv3는 이걸 이해한다.

OpenContracts — 법률 문서 분석 플랫폼

Latham & Watkins 변호사가 만든 오픈소스 플랫폼:

  • 계약서 업로드 → 자동 분석

  • 어노테이션 인터페이스 (전문가 라벨링)

  • 시맨틱 검색 (pgvector)

  • LlamaIndex 연동

git clone https://github.com/Open-Source-Legal/OpenContracts
docker-compose up

Azure Document Intelligence — 상용 대안

Microsoft의 클라우드 API. 계약서 전용 모델이 있다:

  • 당사자 (Parties)

  • 관할권 (Jurisdictions)

  • 계약 ID, 제목

  • 품목 (Line Items)

from azure.ai.documentintelligence import DocumentIntelligenceClient
client = DocumentIntelligenceClient(endpoint, credential)
result = client.begin_analyze_document("prebuilt-contract", document)
for contract in result.documents:
    print(contract.fields["Parties"].value)

$10/1,000 페이지. 영어만 지원.

실전 파이프라인 예시

계약서 PDF
  ↓ Marker/PaddleOCR (텍스트 추출)
텍스트
  ↓ Legal-BERT + CUAD 파인튜닝 모델 (조항 분류)
구조화 데이터:

  - 당사자: A사, B사

  - 계약 기간: 2026.01.01 ~ 2028.12.31

  - 해지 조건: 30일 전 서면 통지

  - 책임 한도: 계약 금액의 200%

  - 준거법: 대한민국 법

핵심 개념

1

OCR로 계약서 텍스트 추출 — Marker/PaddleOCR 등 일반 도구로 충분

2

Legal-BERT로 법률 언어 이해 — 12GB 법률 텍스트로 사전 훈련된 BERT

3

CUAD 데이터셋으로 파인튜닝 — 41개 조항 카테고리 분류 학습

4

LayoutLMv3로 문서 구조 이해 — 텍스트+위치+이미지를 함께 처리

사용 사례

계약서 자동 검토 — 해지 조항, 책임 한도, 경쟁 금지 등 핵심 조항 추출 계약서 비교 — 두 계약서의 조항 차이를 자동 비교 법률 QA — \"이 계약의 해지 조건은?\" 같은 질문에 자동 답변