- Text Normalization for Korean Language (Number Part)
이 프로젝트는 한글 문서에서 숫자와 관련된 표현을 자연스러운 텍스트로 변환하는 수사 텍스트 정규화를 구현하는 주제입니다. 예를 들어, '1', '10', '백'과 같은 수를 문장 내에서 자연스럽게 표현하는 작업을 자동화합니다. 이 프로젝트에서는 T5 모델을 사용하여 수사 변환을 학습하고, 이를 통해 한글 문장에서 숫자 표현을 텍스트로 정규화하는 시스템을 개발합니다.
주요 목표는 한글 문장에서 숫자 관련 텍스트를 정확히 변환하는 모델을 구축하고, 이를 활용해 텍스트 데이터를 더욱 이해하기 쉬운 형태로 변환하는 것입니다.
-
주 언어: Python
-
프레임워크: PyTorch, Hugging Face Transformers
-
주요 라이브러리:
transformers
: 모델과 토크나이저를 위한 라이브러리torch
: PyTorch 딥러닝 프레임워크pandas
: 데이터 처리 및 분석re
: 정규 표현식 처리tqdm
: 학습 진행상황 표시
-
버전 관리 및 이슈 관리: GitHub
-
CUDA 지원 여부: 모델은 GPU를 사용하여 학습을 최적화합니다. CUDA가 사용 가능하면 GPU를 활용하여 학습합니다.
-
개발 기간: 2025-01 ~ 2025-02
├── README.md # 프로젝트 설명 파일
├── final.log # 모델 학습 로그
├── final.py # 학습 및 예측을 위한 코드 파일
├── data # 학습 및 예측을 위한 데이터 파일
│ ├── train.csv # 학습 데이터 (수사 정규화 관련)
│ ├── val.csv # 검증 데이터 (수사 정규화 관련)
│ ├── test.csv # 테스트 데이터 (수사 정규화 관련)
│ └── test_result.csv # 테스트 결과 (예측된 수사 텍스트)
├── best_model.pt # 최적 모델 (학습 후 저장된 모델)
└── requirements.txt # 필요한 라이브러리 목록
- 모델:
paust/pko-t5-large
는 한국어 자연어 처리에 최적화된 T5 모델을 사용합니다. T5는 텍스트-투-텍스트 모델로, 입력된 텍스트를 특정 작업에 맞게 변환할 수 있습니다. - 학습 목적: 숫자 관련 표현을 자연스러운 한국어 텍스트로 변환하는 학습을 합니다.
- 데이터셋:
train.csv
,val.csv
,test.csv
에는 숫자 관련 텍스트와 그에 맞는 정규화된 형태의 텍스트가 포함되어 있습니다. 학습 데이터셋은 모델이 숫자를 적절한 문맥에서 변환할 수 있도록 합니다. - 전처리: 데이터셋을 불러와서
scriptITN
(입력 텍스트)과scriptTN
(정규화된 텍스트)를 기반으로 모델 학습을 위한 입력값을 생성합니다.
- 커스텀 손실 함수:
CustomLoss
는 CrossEntropyLoss를 확장하여 손실 계산 방식에 변형을 추가하였습니다. 모델이 예측하는 값과 실제 값 간의 차이를 최소화하여 학습합니다.
- Bracket Accuracy: 예측된 텍스트와 실제 정답 텍스트에서 괄호 안의 내용이 얼마나 일치하는지 확인합니다.
- Text Preservation: 괄호를 제외한 텍스트 부분이 예측과 실제 결과에서 동일한지 비교합니다.
- 훈련:
train_epoch
함수에서는 배치 단위로 데이터를 받아 모델을 학습시키고,evaluate
함수에서는 검증 데이터셋을 사용해 모델 성능을 평가합니다. - 최적화: AdamW 최적화 알고리즘을 사용하여 모델의 학습률을 조정하고 최적의 파라미터를 찾습니다.
훈련된 모델을 사용하여 새로운 텍스트에 대해 예측을 수행합니다. 예를 들어, "참석자는 10분입니다."와 같은 문장에 대해 모델은 수사를 자연스러운 한국어로 변환합니다.
- 수사 텍스트 정규화: 입력된 텍스트에서 숫자 관련 표현을 변환하여 자연스러운 한글 표현으로 정규화합니다.
- 모델 평가: 학습된 모델을 검증 데이터셋 및 테스트 데이터셋에 대해 평가하고, 성능을 개선합니다.
- 예측 결과 저장: 테스트 데이터셋에 대한 예측 결과를
test_result.csv
파일로 저장하여 쉽게 결과를 확인할 수 있습니다.
-
모델 학습:
final.py
파일을 실행하여 학습을 시작합니다. 모델은 주어진 데이터셋을 사용하여 수사 정규화 작업을 학습합니다. -
예측: 학습이 완료된 후, 모델을 사용하여 새로운 텍스트에 대해 예측을 수행합니다.
sample_text = "참석자는 10분입니다." predicted_text = predict_text(sample_text, model, tokenizer, device) print(predicted_text)