2021.10.14 - [Data Science/NLP] - [전처리]. 한국어 존댓말과 반말을 구별하는 방법(feat. komoran)
1. 개발 배경
오래전에 존댓말 , 반말을 한국어 형태소 분석기로 분류하는 간단한 방법을 소개했다.
하지만 이 방법을 실제로 적용하려 했더니, 많은 부분에서 오류가 발생하였다.
예를 들면)
'저번에 교수님께서 자료 가져오라했는데 기억나?'
라는 문구를 "께서"라는 존칭때문에 전체문장을 존댓말로 판단하는 오류가 많이 발생했다.
그래서 이번에 딥러닝 모델을 만들고 그 과정을 공유해보고자한다.
2. 데이터 세트
먼저 데이터세트은 두 가지를 사용했다.
스마일게이트 말투 데이터 세트(korean SmileStyle Dataset)
: https://github.com/smilegate-ai/korean_smile_style_dataset
AI 허브 (감성 대화 말뭉치)
스마일게이트 데이터셋은 존댓말 분류모델에 가장 적합한 데이터가 많이 있었다 하지만,
딥러닝 모델을 학습하기엔 양이 부족하다 판단하여 AI 허브 데이터를 학습데이터로 추가하였다.
3. 전처리
스마일게이트 데이터 중에서
formal_cols = ['formal', 'gentle']
informal_cols = ['informal', 'chat', 'enfp', 'sosim', 'choding', 'joongding']
존댓말(formal), 신사(gentle) 칼럼을 존댓말로 치환했다,
반말(informal), 채팅(chat), 엔프피(enfp), 소심한 성격(sosim), 초딩(choding), 중딩(joongding)을 반말로 치환했다.
감성 대화 말뭉치는 사람과 챗봇의 대화 데이터가 존재하는데.
사람은 전부 반말이고 챗봇은 전부 존댓말이라 모델을 학습시키기에는 적합했다.
['시스템응답1', '시스템응답2', '시스템응답3', '시스템응답4']
['사람문장1', '사람문장2', '사람문장3', '사람문장4']
데이터 예시
sentence | label |
공부를 열심히 해도 열심히 한 만큼 성적이 잘 나오지 않아 | 0 |
아들에게 보내는 문자를 통해 관계가 회복되길 바랄게요 | 1 |
참 열심히 사신 보람이 있으시네요 | 1 |
나도 스시 좋아함 이번 달부터 영국 갈 듯 | 0 |
본부장님이 내가 할 수 없는 업무를 계속 주셔서 힘들어 | 0 |
총 데이터 분포
label | train | test |
0 | 133,430 | 34,908 |
1 | 112,828 | 29,839 |
전처리 코드 : https://github.com/alswhddh/formal_classifier/blob/main/data_engineering/get_train_data.py
4. 학습
학습은 허깅페이스와 파이토치 라이트닝코드를 상속받아 사용했고 사전 학습 모델(Pretrained model)은
beomi/kcbert-base를 사용하였다.
- GitHub : https://github.com/Beomi/KcBERT
- HuggingFace : https://huggingface.co/beomi/kcbert-base
처음에는 klue/roberta 모델을 사용했고 99%의 정확도를 기록했다, 하지만 실제로 예측했을때 결과가 이상하여
beomi/kcbert-base로 변경했고 변경 후에는 실제 테스트에서도 높은 성능을 보였다.
5. 결과
val_loss | 0.0051 |
Accuarcy | 0.997 |
테스트 결과
저번에 교수님께서 자료 가져오라하셨는데 기억나세요? : 존댓말입니다. ( 확률 99.19% )
저번에 교수님께서 자료 가져오라했는데 기억나? : 반말입니다. ( 확률 92.86% )
전체 소스 코드 : https://github.com/alswhddh/formal_classifier
감사합니다.
'Machine learning > NLP' 카테고리의 다른 글
[NLP]. MultipleNegativesRankingLoss 적용기(Sentence Transfomer) (0) | 2023.02.21 |
---|---|
[NLP]. 인공지능에서 골드 라벨(Gold Label)은 뭘까? (feat. ChatGPT) (0) | 2023.02.21 |
[NLP] KakaoGPT 사용해서 존댓말/반말 변환하기 (0) | 2023.01.04 |
[NLP]. SentenceTransformer Tokenize 멀티턴 형식으로 수정하기 (0) | 2022.12.22 |
[NLP]. 텍스트 데이터 정제(이모지 , 특수문자, url , 한자 제거) (0) | 2022.12.21 |