[NLP]. 한국어 존댓말/반말 분류모델 (formal classifier)

jongmin-oh·2023년 5월 1일
0

Korean-NLP-model

목록 보기
1/4

이전 글 : 한국어 존댓말과 반말을 구별하는 방법(feat. komoran)

1. 개발 배경

오래전에 존댓말 , 반말을 한국어 형태소 분석기로 분류하는 간단한 방법을 소개했다.
하지만 이 방법을 실제로 적용하려 했더니, 많은 부분에서 오류가 발생하였다.

예를 들면)

'저번에 교수님께서 자료 가져오라했는데 기억나?'

라는 문구를 "께서"라는 존칭때문에 전체문장을 존댓말로 판단하는 오류가 많이 발생했다.
그래서 이번에 딥러닝 분류 모델을 만들고 그 과정을 공유 해보고자한다.

2. 데이터 세트

먼저 데이터세트은 두 가지를 사용했다.

스마일게이트 말투 데이터 세트(korean SmileStyle Dataset)
: https://github.com/smilegate-ai/korean_smile_style_dataset

AI 허브 (감성 대화 말뭉치)
: https://www.aihub.or.kr/

스마일게이트 데이터셋은 존댓말 분류모델에 가장 적합한 데이터가 많이 있었다 하지만,
딥러닝 모델을 학습하기엔 양이 부족하다 판단하여 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']

데이터 예시

sentencelabel
공부를 열심히 해도 열심히 한 만큼 성적이 잘 나오지 않아0
아들에게 보내는 문자를 통해 관계가 회복되길 바랄게요1
참 열심히 사신 보람이 있으시네요1
나도 스시 좋아함 이번 달부터 영국 갈 듯0
본부장님이 내가 할 수 없는 업무를 계속 주셔서 힘들어0

총 데이터 분포

labeltraintest
0133,43034,908
1112,82829,839

전처리 코드 Github

4. 학습

학습은 허깅페이스와 파이토치 라이트닝코드를 상속받아 사용했고 사전 학습 모델(Pretrained model)은 

beomi/kcbert-base를 사용하였다.

처음에는 klue/roberta 모델을 사용했고 99%의 정확도를 기록했다, 하지만 실제로 예측했을때 결과가 이상하여

beomi/kcbert-base로 변경했고 변경 후에는 실제 테스트에서도 높은 성능을 보였다.

5. 결과

val_loss0.0051
Accuarcy0.997

테스트 결과

저번에 교수님께서 자료 가져오라하셨는데 기억나세요? : 존댓말입니다. ( 확률 99.19% )
저번에 교수님께서 자료 가져오라했는데 기억나? : 반말입니다. ( 확률 92.86% )

전체 소스 코드 Github

감사합니다.

profile
스타트업에서 자연어처리 챗봇을 연구하는 머신러닝 개발자입니다.

0개의 댓글