3단계 파이프라인 기반 의료/보험 문서 분류 시스템
이 시스템은 3단계 파이프라인을 통해 의료 및 보험 관련 문서를 자동으로 분류합니다:
- Step 1 (YOLO): 레이아웃 검출 및 1차 분류
- Step 2 (LayoutLM): 텍스트 기반 정밀 분류
- Step 3 (VLM): 예외 처리 (1~5% 문서만)
- 진단서
- 소견서
- 보험금청구서
- 입퇴원확인서
- 의료비영수증
- 처방전
# 저장소 클론
git clone <repository-url>
cd 문서분류기
# 가상환경 생성 (권장)
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 의존성 설치
pip install -r requirements.txt# 단일 이미지 분류
python main.py /path/to/document.jpg
# 디렉토리 내 모든 이미지 분류
python main.py /path/to/documents/
# 결과를 JSON으로 저장
python main.py /path/to/documents/ -o results.jsonpython main.py --help
옵션:
-c, --config 설정 파일 경로 (기본: config/config.yaml)
-o, --output 결과 출력 파일 (JSON)
--skip-step1 Step 1 (YOLO) 건너뛰기
--skip-step2 Step 2 (LayoutLM) 건너뛰기
--skip-step3 Step 3 (VLM) 건너뛰기
--skip-preprocessing 전처리 건너뛰기
--force-all-steps 모든 단계 강제 실행
-v, --verbose 상세 출력from src.pipeline import DocumentClassificationPipeline
# 파이프라인 초기화
pipeline = DocumentClassificationPipeline()
# 이미지 분류
result = pipeline.classify("document.jpg")
print(f"분류 결과: {result.predicted_class}")
print(f"신뢰도: {result.confidence:.2%}")
print(f"최종 단계: Step {result.final_step}")# 데이터 YAML 생성
python scripts/prepare_data.py yolo-yaml data/yolo_dataset
# 모델 학습
python scripts/train_yolo.py \
--data-yaml data/annotations/yolo_data.yaml \
--epochs 100 \
--batch-size 16# 어노테이션 생성
python scripts/prepare_data.py layoutlm-anno \
data/images data/ocr data/labels.tsv
# 모델 학습
python scripts/train_layoutlm.py \
--train-dir data/train \
--val-dir data/val \
--epochs 10python scripts/evaluate.py \
--test-dir data/test \
--labels data/test_labels.tsv \
--output evaluation_results.jsonconfig/config.yaml 파일에서 설정을 변경할 수 있습니다:
# YOLO 설정
yolo:
model_path: "data/models/yolo_document.pt"
confidence_threshold: 0.5
# LayoutLM 설정
layoutlm:
model_name: "microsoft/layoutlmv3-base"
confidence_threshold: 0.7 # 이 값 미만이면 VLM으로 전달
# VLM 설정
vlm:
provider: "openai" # openai 또는 anthropic
openai:
model: "gpt-4o"문서분류기/
├── config/
│ └── config.yaml # 전체 설정
├── src/
│ ├── pipeline.py # 메인 파이프라인
│ ├── preprocessor/ # 전처리 모듈
│ ├── step1_yolo/ # YOLO 검출/분류
│ ├── step2_layoutlm/ # LayoutLM 분류
│ ├── step3_vlm/ # VLM 예외 처리
│ └── utils/ # 유틸리티
├── data/
│ ├── raw/ # 원본 데이터
│ ├── processed/ # 전처리된 데이터
│ ├── annotations/ # 라벨링 데이터
│ └── models/ # 학습된 모델
├── scripts/ # 학습/평가 스크립트
├── tests/ # 테스트
├── main.py # 실행 진입점
└── requirements.txt
# 전체 테스트 실행
pytest tests/ -v
# 커버리지 포함
pytest tests/ -v --cov=srcVLM 사용 시 API 키 설정이 필요합니다:
# OpenAI 사용 시
export OPENAI_API_KEY="your-api-key"
# Anthropic 사용 시
export ANTHROPIC_API_KEY="your-api-key"MIT License