Deep Learning

Deep Learning - Twitter Hate Speech 판별하기 Part1

electronicprogrammer 2020. 10. 10. 03:33

데이터 출처 : www.kaggle.com/vkrahul/twitter-hate-speech

 

Twitter hate speech

 

www.kaggle.com

 

ipynb file : github.com/sangHa0411/DataScience/blob/main/Twitter_Sentiment%20HateSpeech.ipynb

 

sangHa0411/DataScience

Contribute to sangHa0411/DataScience development by creating an account on GitHub.

github.com

 

이번 포스팅에서는 트위터에 있는 Hate Speech에 관련된 Tweet을 판별하는 RNN을 설계하는 과정을 정리할려고 합니다.

Part1에서는 데이터 분석을 하고 Part2에서는 RNN을 이용해서 Hate Speech을 판별하는 모델을 만들고 이의 성능을 측정해보겠습니다.

 

먼저 Pandas를 이용해서 데이터를 불러오겠습니다.

여기서 test.csv는 label이 없기 때문에 train.csv에 있는 데이터을 훈련 데이터 , 테스트 데이터로 분할해서 RNN 모델을 만들어 보겠습니다.

 

먼저 데이터에 클래스의 갯수가 어떻게 되는지 확인해보겠습니다.

위에서 확인할 수 있듯이 hate speech에 관련된 데이터 갯수가 많이 적은 것을 확인할 수 있습니다.

이를 pie chart를 이용해서 시각화 해보겠습니다.

 

 

비율로 따지면 그냥 tweet 그리고 hate Speech tweet의 비율이 대략 93% 대 7% 인 것을 확인할 수 있습니다.

 

이제 hate speech와 그렇지 않은 것을 비교하기 위해서 데이터를 분할해보도록 하겠습니다.

위는 데이터를 hate speech 와 그 나머지를 분할 한 것이고 tweet의 길이를 확인하기 위해서 column을 하나 더 추가한 것입니다.

 

이를 통해서 tweet의 길이에 대한 히스토그램을 그려보겠습니다.

 

크게 차이는 없어 보이지만 hate speech의 경우에는 트위터의 길이가 조금 더 긴 것이 많이 분포된 것을 확인할 수 있습니다.

 

이제 트위터 텍스트 데이터에 대해서 전처리를 해보겠습니다.

아래는 일반적인 트위터 텍스트입니다.

 

# hashtag , @ mention 과 특수문자 등등 여러 단어가 있는 것을 확인할 수 있습니다.

 

여기서 hashtag 와 mention을 제거하고 특수 문자 및 개행문자 등을 제거하는 등의 함수를 정의합니다.

위 text는 함수를 통해서 tweet 텍스트를 전처리한 결과입니다.

 

여기서 nltk의 stopword를 이용해서 필요 없는 단어들을 걸러내고 유효한 단어들만 리스트 자료구조에 저장하도록 합니다,

위는 앞서 전처리한 텍스트에서 유효한 단어만 뽑아낸 뒤 리스트에 저장한 결과입니다.

to , in , from등의 단어가 필터링 된 것을 확인할 수 있습니다.

 

이제 분할된 데이터에 각각의 tweet 텍스트를 전처리 합니다.

그리고 이를 기반으로해서 각 데이터의 wordcloud를 만듭니다.

 

먼저 hate speech 입니다.

racist , white , black , women 등등 단어가 눈에 띄는 것을 확인할 수 있습니다.

 

다음은 평범한 tweet 입니다.

 

day , bew , make , toady , happy 등의 단어들이 눈에 띄는 것을 확인할 수 있습니다.

 

이제 text에서 유효 단어 vector가 된 데이터들의 길이를 히스토그램으로 만들어서 비교해보겠습니다.

vector의 길이가 평범한 tweet은 비교적 균일적인 것에 비해서 hate Speech의 tweet에 대해서는 길이가 3,4인 것이 많은 것을 확인 할 수 있습니다.

 

이로써 데이터 전처리 및 분석을 마치고 Part2에서 RNN을 만들고 학습해서 Hate Speech를 판별하는 모델을 만들어보도록 하겠습니다.