반응형

💬 비윤리적 텍스트 검출 데이터셋 분석

 

  • 딥러닝의 학습 모델 및 학습 방법에서 가장 중요한 것은 내가 풀고자 하는 문제가 무엇인지에 관한 것이다. 이를 위해 가장 좋은 방법은 내가 풀고자 하는 문제의 데이터들을 분석하는 것이다.
  • 사실, AI Hub는 데이터셋 사용자를 위해, 구성된 데이터에 대해서 자세한 설명을 적어두었다. 따라서, 그냥 설명을 읽어도 되지만, 그냥 스스로 분석해보고 싶어서 해당 장을 적었다. (데이터 분석이 익숙한 사람들은 해당 장의 내용은 넘어가도 된다.) 
  • 나는 원래 Jupyter Notebook을 좋아하지 않았다. (뭔가 코드를 짠다는 느낌보다는 단순히 입력한다는 느낌이 강하다.) 하지만, 데이터 분석을 간단하게 하기에는 Jupyter Notebook만 한 툴이 없기에, 의식적으로 Jupyter Notebook을 사용하여 데이터를 분석해볼 것이다. 

우리가 다운 받은 데이터는 데이터 수집된 자체의 Raw 데이터와 윤리/비윤리 판정을 위해, 전처리가 된 데이터가 있다. 이번 장에서는 전처리 데이터만 다루기로 한다.

 

 

전 장에서 전처리 데이터를 다운로드하였으면, 해당 디렉토리의 data 디렉토리에 들어가 본다. (해당 데이터들이 NLP 공부를 위해 사용될 데이터들이다.)

 

전처리된 데이터들

 

파일들을 메모장을 통해서 열어보면, 대략적인 데이터가 어떻게 생겼는지 확인할 수 있다.(용량이 크므로, 가장 작은 test 데이터셋을 열어보길 권유함)

 

 

jupyter notebook

Jupyter notebook을 이용한 다양한 분석을 위해, anaconda cmd 창에 "jupyter notebook"을 입력해 준다.

 

Jupyter notebook 창이 뜨면, New-Python3을 클릭하여 새로운 창을 띄운다. 

 

%pip install pandas
%pip install numpy
%pip install pillow
%pip install konlpy
%pip install wordcloud

 

 

Jupyter notebook 창이 뜨면, 첫 block에 위의 명령어를 실행하여 pandas, numpy, pillow와 konlpy(한글 형태소 분석기)와 wordcloud(wordcloud)를 설치한다. 

 

import pandas as pd

from wordcloud import WordCloud
import matplotlib.pyplot as plt
from collections import Counter
from konlpy.tag import Hannanum
from PIL import Image
import numpy as np

 

설치가 완료되었다면, 위처럼 각 패키지를 import 한다. (konlpy에서는 다양한 태깅 라이브러리를 제공하지만, Hannanum으로 사용: 실사용에서는 내가 처리하고자 하는 텍스트 데이터를 가장 잘 parsing 하는 형태소를 테스트 및 선택하는 과정이 필요)

 

 

패키지를 import 했다면, 데이터를 살펴볼 차례이다. 

 

data_dir = r"{설치위치}\data\train"
df = pd.read_csv(data_dir, sep='\t', header=None)

 

pandas에서는 데이터를 쉽게 import 할 수 있는 "read_csv" 함수를 제공한다. read_csv로 우선 train 데이터를 불러온다. 이제 df의 dataframe에는 "train" 데이터가 담겨있다.  

 

 

데이터 샘플

다음 블럭에서 df를 출력하여, 데이터의 형태를 확인한다. 출력 결과를 보면, "train" 데이터는 약 348,073개의 윤리적/비윤리적 문장들로 구성되어 있다는 것을 확인할 수 있다. 

 

 

홈페이지에서 데이터셋의 설명을 미리 읽었다면 확인 할 수 있겠지만, 해당 데이터셋의 Raw 데이터는 단순히 윤리적/비윤리적 구분을 위해서만 구성된 것이 아니기 때문에 추가적인 다양한 정보들을 가지고 있다. (비윤리적 강도, 비윤리적 문장의 유형 등...)

 

 

우리가 관심 있어 하는 부분은 "1"번 칼럼(비윤리성), "5"번 칼럼(텍스트 데이터)이기 때문에, "1"번 칼럼과 "5"번 칼럼을 집중적으로 살펴본다.

list(df[1].unique())

출력값 : [True, False]

1번 데이터에 존재하는 데이터는 True와 False 2개의 class로 구성되어 있다.

각 Class에 해당하는 문장은 어느 것들이 있는지 확인해 보자.

 

df_true = df[df[1]==True]

 

True(비윤리적 문장)은 총 192,187개의 문장으로 구성되어 있다. 텍스트 데이터를 몇 개 확인해 보니, 문장 그 자체로도 비윤리적으로 판정되는 데이터도 있고, 문맥 파악 없이 그 문장 자체로는 그다지 비윤리적인 것 같지 않은 문장들도 다수 존재한다.

df_false =df[df[1]==False]

False(윤리적 문장)은 총 155,886개의 문장으로 구성되어 있다. 텍스트 데이터를 몇 개 확인해보니, 이게 윤리적인 것 맞나 하는 데이터도 다수 포함되어 있다. (사람마다 윤리적 기준이 다르기 때문에 그런 것 같다.)

 

 

비슷하게 train, val, test 파일에 대해서도 다음을 수행해 준다. 각 파일에서 각 class에 포함된 데이터 개수를 세면, 아래와 같다. 

 

  Total 비윤리적 문장(True) 윤리적 문장(False)
Train (train 파일) 348,073 192,187 155,886
Validate (val 파일) 40,612 22,430 18,182
Test (test 파일) 44,998 26,011 18,987

 

다음 장에서는 데이터셋 내, 텍스트 데이터를 조금 더 자세히 분석해 보기로 한다. 

+ Recent posts