# 텍스트 분류 모델 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억 개 이상의 문장을 다수의 머신에서 빠르게 학습 ![](https://i.imgur.com/wY6lAUL.png) ![](https://i.imgur.com/xr2nnaZ.png) 출처: 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