Recurrent Neural Network based Hate Speech Language Model for Korean Hate Speech Detection
- by 류병우
web service available (try it yourself!!!): https://hate-speech-main-c2eedpqzcq-an.a.run.app
demo video: https://www.youtube.com/watch?v=HnhS6BgmcDg
the models and datasets are available at https://www.kaggle.com/captainnemo9292/korean-hate-speech-dataset
안녕하세요 Github, 딥러닝에 관심있는 고등학생입니다. 이번에 발생한 n번방 사태에 대해 큰 충격을 받고, 우리나라의 혐오 문화를 AI로 접근할 방법이 있을까 생각하다가 인공지능 기반 혐오 발언 탐지 웹서비스를 구현해보았습니다. 극우 사이트 일간베스트의 댓글들을 학습 데이터로써 크롤링하여 혐오 발언 이진 분류 RNN 모델을 개발했고, NMF 토픽 모델 알고리즘을 활용하여 혐오 발언의 주제를 추출하여 multi-class classification 언어 모델을 학습시켰습니다. ( 주제 1 - 특정 지역에 대한 차별, 주제 2 - 정치적 성향이 다른 사람들에 대한 왜곡, 주제 3 - 다른 나라에 대한 차별, 주제 4 - 여성 차별 및 성적 발언) 한 번씩 봐주시면 감사하겠습니다. 다음은 제 토이프로젝트의 과정입니다.
- 웹크롤링을 통한 데이터 수집
극우 사이트인 ‘일간베스트‘의 댓글들은 거의 대 부분 혐오 게시물에 대한 답글이고 다수의 혐오 표현을 포함하기에 언어 모델링에 필요한 혐오 발언 데이터로써 적합하다고 생각했습니다. 따 라서 Selenium 모듈을 활용해 인기 포스트의 댓글 약 10만개를 크롤링했습니다.
- 텍스트 전처리
Tokenization: 혐오 및 왜곡 발언은 주로 명사의 형태를 띠는 혐오 표현을 포함하고 있기에 명사 단위의 토큰화가 적절하다고 생각했습니다. 따라서 한글 전용 NLP 전용 라이브러리, KoNLPY의 형태소추출 기능을 활용하여 명사 추출을 진행했습니다.
불용어 제거: 혐오 발언 텍스트에는 흔한 욕설이 자주 등 장하지만, 특정 집단에 대한 편견을 감지하는 것에 집중하고 싶었던 저는 그러한 비속어가 분석에 큰 도움이 되지 않을 것이라고 생각했습니다. 따라서, 평범한 욕설은 불용어로 취급하고 제거하는 과정을 거쳤습니다.
- 토픽 모델링
우리 사회의 혐오 문화가 어떠한 사회적 약자에 대한 차별과 왜곡을 조장하고 있는지 분석하는 과정이 필요하다고 생각했습니다. 혐오 발언의 차별 대상을 각각 특정한 주제로 취급하여 토픽 모델링을 적용하면 사회적 약자에 대한 왜곡된 인식을 밝혀낼 수 있을 것이라 생각했습니다.
Tf-idf 벡터화: 모든 문서에서 자주 등장하는 평범한 비속어에는 낮은 가중치를, 특정한 문서에서만 자주 등장하는 혐오 표현에는 높은 가중치를 부여하기 위해 Tf-idf 벡터화를 활용했습니다.
토픽 모델링: 이후 Tf-idf 벡터화된 데이터에서 NMF 알고리즘을 활용해 주제를 추출했습니다. 토픽 모델링 결과, (Topic 1) 특정 지역에 대한 차별적 발언, (Topic 2) 정치적 성향이 다른 사람들에 대한 왜곡, (Topic 3) 외국에 대한 차별적 발언, (Topic 4) 여성에 대한 혐오 및 성적 발언; 왼쪽 그림과 같이 4가지 주제를 추출할 수 있었습니다.
- 언어 모델링
혐오 발언 댓글을 네이버영화 리뷰 데이터셋과 섞어서 구성한 이진 분류 데이터셋과 혐오 표현을 주제별로 분류한 토픽 데이터셋을 각각 RNN 인공신경망에 훈련시켜 이진 분류 모델과 multi-class classification 모델을 개발했습니다. Multilingual BERT에도 전이 학습 시켜보았으나, 과도한 메모리 사용으로 인해 웹서비스에는 배포하지 못했습니다.
- 인공지능 기반 혐오표현 감지 웹서비스
Flask 웹 프레임워크를 활용해 백엔드를 구축하고 인터넷에 웹서비스로써 배포하였습니다. 인공지능 기반 혐오표현 감지 웹서비스의 구성은 매우 간단합니다. 사용자가 온라인에서 혐오 발언으로 의심되는 혐오 표현을 마주했을 때 웹 상에서 서비스를 손쉽게 이용할 수 있습니다. 글을 직접 작성하면 API로 배포되어 있는 혐오 발언 이진 분류 모델을 활용하여 혐오 표현인지 여부를 판단합니다. 인공지능이 혐오 표현이라고 판단한 문장들은 또다른 API로 배포되어 있는 혐오 발언 주제 분류 모델을 활용하여 위에 제시된 4가지 주제 중 어느 차별적 사상을 담고 있는지 분석합니다. 분석 결과 페이지에서 혐오 발언 문장과 각각의 차별 대상 데이터 표를 한눈에 파악할 수 있습니다. 글을 직접 입력하지 않더라도 의심되는 표현이 제시된 웹페이지의 URL 주소를 입력하면 웹 어플리케이션이 직접 해당 페이지의 텍스트를 크롤링하여 분석합니다. 위에 프로토타입 링크가 제시되어 있어 직접 사용해 볼 수 있고 데모 영상을 통해 작동 과정을 파악할 수 있습니다.
p.s. 본래 BERT에다 전이 학습 시켜서 성능이 훨씬 좋았는데, 메모리를 너무 많이 잡아먹어 웹 서비스가 다운된다는 문제게 생기기 때문에 간단한 RNN으로 대체했습니다. 따라서 성능이 좋지 않다고 보실 수도 있습니다. 제가 전문가가 아니라는 점 가만해 주십시오