한문 고전 원문-번역문 정렬 파이프라인
CSP는 한문 고전 문헌을 문단→문장으로 분할(P2S) 하고 문장→구로 분할하여 1:1 정렬(S2P) 하는 작업을 자동화하는 시스템입니다.
- P2S (Paragraph to Sentence): 문단을 문장으로 분할
- S2P (Sentence to Phrase): 문장을 구로 분할하고 1:1 정렬 (경계 모델 v3 기본 적용)
- 무결성 보장: 원문 문자 100% 보존 (공백 외 손실 없음)
- GPU 가속: CUDA 기반 고속 처리
docker-compose up -d
docker-compose exec csp bashpython p2s/main.py <input.csv> <output.xlsx>python s2p/main.py <input.csv> <output.xlsx> [--batch-size 32]입력:
| 문단(원문) | 문단(번역문) |
|---|---|
| 公子開方事君 不歸視死父. 衛懿公好鶴 不恤死國. 齊桓公得子亂國 | 공자개방이 군주를 섬기며 죽은 아버지를 돌아보지 않았다. 위의공은 학을 좋아하여 나라가 죽는 것을 돌보지 않았다. 제환공은 자란국을 얻었다 |
출력:
| 문단ID | 문장ID | 원문(분할) | 번역문(분할) |
|---|---|---|---|
| 1 | 1 | 公子開方事君 不歸視死父 | 공자개방이 군주를 섬기며 죽은 아버지를 돌아보지 않았다 |
| 1 | 2 | 衛懿公好鶴 不恤死國 | 위의공은 학을 좋아하여 나라가 죽는 것을 돌보지 않았다 |
| 1 | 3 | 齊桓公得子亂國 | 제환공은 자란국을 얻었다 |
입력:
| 원문(샘플) | 번역문(샘플) |
|---|---|
| 公子開方事君 不歸視死父 | 공자개방이 군주를 섬기며 죽은 아버지를 돌아보지 않았다 |
출력 (구병렬):
| 문장식별자 | 구식별자 | 원문구 | 번역구 |
|---|---|---|---|
| 1 | 1 | 公子開方 | 공자개방이 |
| 1 | 2 | 事君 | 군주를 섬기며 |
| 1 | 3 | 不歸視死父 | 죽은 아버지를 돌아보지 않았다 |
CSP/
├── p2s/ # Paragraph to Sentence 모듈
├── s2p/ # Sentence to Phrase 모듈
├── common/ # 공통 유틸리티 (embedders, tokenizers 등)
├── accuracy/ # 평가 스크립트
├── datasets/ # 입력 데이터셋
│ ├── paragraph/ # 문단 단위 (P2S 입력)
│ ├── sentence/ # 문장 단위 (P2S 정답 / S2P 입력)
│ └── phrase/ # 구 단위 (S2P 정답)
├── models/ # 학습된 경계 모델
└── test_results/ # 테스트 결과물
| 지표 | 값 |
|---|---|
| F1 | 0.8724 (87.24%) |
| 원문 유사도 | 0.9174 (91.74%) (번역문 일치 문장 기준) |
| 지표 | 값 |
|---|---|
| F1 | 0.8091 (80.91%) |
| 번역문 유사도 | 0.8323 (83.23%) |
| 파이프라인 | 전역 무결성 | 설명 |
|---|---|---|
| P2S | PASS | 원문 텍스트 100% 보존 (정규화 기준) |
| S2P | FAIL (-1 char) | 1글자(曰) 누락 확인됨. 그 외 99.999% 일치. |
- 폴더명 변경:
pa/→p2s/,sa/→s2p/ - 데이터셋 재구성:
datasets/paragraph,datasets/sentence,datasets/phrase
- 기본값 변경:
--use-boundary-model을 기본True로 설정 (F1 0.8315 재현용) - 인자 추가:
--batch-size인자 추가 (기본 32) - 무결성 체크 개선: 공백/개행/탭 무시하여 오탐 해결
- P2S: F1 0.85, 번역문 일치율 100%
- S2P: 테스트 중 (경계 모델 v3 정상 동작)
- 임베더: BGE-M3 FlagModel (GPU 가속)
- 경계 모델: Cross-Attention 기반 Boundary Tagger v3
- 구문분석: SuPar-Kanbun (한문) + Stanza (한국어)
- 토크나이저: SikuBERT (한문) + Kiwipiepy (현토)
GPU/CUDA 의존성과 재현성을 위해 Docker 사용을 권장합니다.
# 컨테이너 빌드 및 실행
docker-compose up -d
docker-compose exec csp bash
# 헬퍼 스크립트 (Windows)
./docker.ps1 python scripts/example.py- Docker:
uv를 사용한 고속 패키지 설치 (pip 대비 2-10배 빠름) - 로컬:
.venv+requirements.txt(torch 2.9.1) - 버전 차이: Docker는
torch==2.6.0(공식 이미지 기준), 로컬은torch==2.9.1
# 로컬 환경 취약점 점검
./scripts/safety_check.ps1
# Docker 환경 취약점 점검
./scripts/safety_check.ps1 -Docker
# 자동 수정 시도
./scripts/safety_check.ps1 -Fix최종 업데이트: 2026년 01월 24일 - 개발 환경 문서화 및 보안 점검 스크립트 추가