고양국제고/더브레인

[더브레인] 머신러닝을 통한 뉴스 기사 댓글 혐오 표현 분석

카루-R 2022. 4. 14. 21:26
반응형

환영합니다, Rolling Ress의 카루입니다.

어제는 뭐라도 했어요. 그나마 다행입니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ...

자, 그래서 저는 주말동안 여러 데이터를 찾아다녔습니다. 근데 여기가 제일 쓸만하더라고요. 뉴스 기사의 댓글에 혐오 표현 라벨을 붙여줬습니다.

https://github.com/kocohub/korean-hate-speech

 

GitHub - kocohub/korean-hate-speech: Korean HateSpeech Dataset

Korean HateSpeech Dataset. Contribute to kocohub/korean-hate-speech development by creating an account on GitHub.

github.com

 

git clone https://github.com/kocohub/korean-hate-speech​

다운받아봅시다. 생각보다 파일이 풍성하게 들어있어요. 코랩에서는 따로 다운받지 않고 바로 불러들일 겁니다.

import koco

train_dev = koco.load_dataset('korean-hate-speech', mode='train_dev')

train_comments: list[str] = []
gender_list: list[bool] = []
bias_list: list[str] = []
hate_list: list[str] = []
title_list: list[str] = []

for dict in train_dev['train']:
    train_comments.append(dict['comments'])
    gender_list.append(dict['contain_gender_bias'])
    bias_list.append(dict['bias'])
    hate_list.append(dict['hate'])
    title_list.append(dict['news_title'])

파이썬에서는 이렇게 사용할 수 있습니다. 참고로 이거 나중에 사이킷런 머신러닝에 넣을 것들이니 리스트로 분리해줬어요.

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import StandardScaler

# label 인코딩은 선형회귀에서 사용하면 안 됨.
# One-hot 인코딩 필요

le = LabelEncoder()
le.fit(train_comments)
train_encoded = le.transform(train_comments)
test_encoded = le.transform(['이 빨갱이 놈들을 잡아 족쳐야 나라가 산다'])
print(train_encoded)

# 2차원 데이터 변환
train_encoded = train_encoded.reshape(-1, 1)
test_encoded = test_encoded.reshape(-1, 1)
print(train_encoded)

# One-hot Encoding
oh = OneHotEncoder()
oh.fit(train_encoded)
train_onehot = oh.transform(train_encoded)
test_onehot = oh.transform(test_encoded)
print(train_onehot.toarray())

lr = LogisticRegression()
lr.fit(train_onehot, gender_list)

print(test_onehot)
lr.predict(test_onehot)

그리고 이건 하다 망함. sklearn이 문자열을 받지 않는데, 이거 원핫 인코딩 변환하고 뭐기 까다롭습니다. 저거 그냥 실행하면 오류 나요. 이건 나중에 제가 수정해서 알려드리겠습니다.

그나마 C# 은 모델 빌더 덕분에 인공지능 훈련시키기 쉬워요. 참고로 이걸... 다항회귀로 만들 수도 있을 것 같은데 그냥 특정 label은 꺼버리고 학습을 시켰습니다. 그래서 학습한 모델은 총 세 개.

이렇게 세 가지를 만들었어요.

잡아내는 건 정확합니다. 자세한 건 다음 시간에 만나서 확인해보도록 합시다 :)

반응형