# 텍스트 분류 모델
requirements.txt
```
pip install mxnet
pip install gluonnlp pandas tqdm
pip install sentencepiece
pip install transformers==3.0.2
pip install torch
pip install git+https://git@github.com/SKTBrain/KoBERT.git@master
```
## KoBERT
- 위키피디아나 뉴스 등에서 수집한 수백만개의 한국어 문장으로 이루어진 corpus를 학습
- 한국어의 불규칙한 언어 변화의 특성을 반영하기 위해서 데이터 기반 토큰화 기법을 적용하여 기존 BERT 모델 대비 27%의 토큰만으로 MaskedLM predict, Next sentence predict accuracy에서 2.6%의 성능 향상을 이끌어냄
- 대량의 데이터를 빠른 시간에 학습하기 위해서 ring-reduce 기반 분산 학습 기술을 사용하여 10억 개 이상의 문장을 다수의 머신에서 빠르게 학습


출처: SKT AI 블로그 (Data-driven Tokenizaton, Ring-reduce Distributed Training)
- 콜센터 상담사들의 업무 효율화를 위해서 상담 챗봇에 활용
- 법무 및 특허 등록 업무 효율화를 위한 AI 검색 서비스에 활용
- "문서 단위의 컨텍스트가 반영된 벡터를 생성하는 방법 및 그 방법을 이용한 유사 문서 추천" 이라는 특허로 출원
### Subtask
- NSMC Dataset - Naver Sentimental Analysis
- KoBERT + CRF로 만든 한국어 NER
## 데이터
AI Hub에서 뉴스 기사 데이터 다운로드 후 Train, Valid로 나눔
- Train
총 271093개의 뉴스 기사
종합: 197022, 경제: 27286, 사회: 19649, 정치: 18007, 스포츠: 5455, IT,과학: 2331, 교육/입시/NIE: 1190, 부동산: 74, 보건/의료: 55, 기업: 17, 북한/한반도정세: 5, 선거: 2
- Valid
종합: 13666, IT,과학: 10997, 경제: 3403, 사회: 1503, 스포츠: 392, 정치: 161
- 종합 분야 기사는 제외하고 경제, 기업, IT/과학 관련 기사에 라벨 1을 주고 나머지는 0을 줘서 분류하도록 라벨링함
## Hyperparameter
```
max_len = 64
batch_size = 64
warmup_ratio = 0.1
num_epochs = 5
max_grad_norm = 1
log_interval = 200
learning_rate = 5e-5
```
- Result
```
max_len = 200
batch_size = 64
warmup_ratio = 0.1
num_epochs = 5
max_grad_norm = 1
log_interval = 200
learning_rate = 5e-5
```
- Result
```
max_len = 100
batch_size = 64
warmup_ratio = 0.1
num_epochs = 5
max_grad_norm = 1
log_interval = 200
learning_rate = 5e-5
```
- Result
### Train,valid - article
```
max_len = 500
batch_size = 8
warmup_ratio = 0.1
num_epochs = 5
max_grad_norm = 1
log_interval = 200
learning_rate = 5e-5
```
- Result
epoch 1 validation acc 0.36069651741293535
epoch 2 validation acc 0.36069651741293535