Link
04-22 22:17
«   2021/04   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
Archives
Today
2,368
Total
1,491,328
관리 메뉴

꿈 많은 사람의 이야기

파이썬 딥러닝 기반 욕설 탐지 시스템 개발(개인 프로젝트)해보기! 본문

deep learning(딥러닝)

파이썬 딥러닝 기반 욕설 탐지 시스템 개발(개인 프로젝트)해보기!

오키여 이수진의 블로그 2019. 5. 15. 15:54
반응형

이번 포스팅은 파이썬 케라스와 장고(python keras, python django)를 활용한 딥러닝 기반 욕설 탐지 시스템을 

개인적으로 만들어본 후기입니다.

데이터 특성 상 욕설이 포함되어 있을 수 있습니다! 만약 읽게 되신다면 감안 부탁드립니다 ㅠㅠ

 

프로젝트를 어쩌다가 하게 되었나?

어느 날 한 프로게이머가 은퇴했습니다. 제가 정말 좋아하는 프로게이머였고 리그오브레전드(롤) 선수였습니다.

유튜브도 유명한 프로게이머입니다. 프레이, 프짱이라고 불리우는 선수였죠

사실 은퇴 전에 이번 시즌을 쉰다고 했을 때도 복귀할 것이라 생각했습니다. 하지만 자신감을 잃었다고 하고 은퇴를 선언했죠. 

쉬는 기간에 챌린저도 가볍게 찍었던 그 였습니다.

왜 그런 그가 자신감이 없다고 했을까? 어느 댓글을 보니 이런 글이 있었습니다.

'더 성장할 수 있는 선수도 비난하고 욕하는 유저들 때문에 떠난다'

이때 문득 생각이 들었습니다. 이런 비난, 욕설에 대한 글을 탐지하는 시스템을 만들어보면 어떨까?

 

 

이러한 욕설은 정말 많이 있습니다.

댓글 뿐 아니라 각종 오픈 커뮤니티에서 많이 발생되고 있습니다

출처 : 구글, 검색어 롤 욕설

 

게임에서도 마찬가지입니다. 그냥 채팅창에서 상대방을 비난함을 넘어서 인격을 깎아내리는 욕설을 사용합니다.

저는 이러한 욕설을 탐지하는 것을 자연어처리 딥러닝 기술을 이용해서 만들어보고자 했습니다.

간단한 토이 프로젝트이지만 같이할 동료 1명을 모집했고 프로젝트를 진행했습니다

뭐.. 게임 데이터는 제가 어떻게 할 수 없기에 접근이 비교적 쉬운 오픈 커뮤니티를 타겟으로 했습니다.

dc인사이드, 인벤 등의 커뮤니티 입니다

 

 

먼저 데이터 수집을 해야했습니다. json 파일에 url 리스트를 작성했습니다.

위는 제가 수집한 사이트의 일부입니다. dc인사이트 이며 hit갤러리, 주갤(주식 갤러리), 롤(리그오브레전드) 등의 사이트가 있었습니다.

 

 

그리고 크롤러를 만들어서 데이터를 수집했고 위와 같이 db에 저장했습니다.

초기에 수집한 총 데이터는 대략 75만개 정도였습니다.

그리고 데이터 수집과 동시에 커뮤니티의 특성을 살펴보았고 조사했습니다.

왜냐하면 커뮤니티마다 또한 갤러리 마다 사용하는 은어(약어 등)이 다르기 때문입니다.

그래서 어떤 단어가 사용되는지 조사했고 그 게시판의 특징을 조사했습니다.

이 조사만 2주정도 걸린 것 같습니다.(조금씩 하느라..)

 

 

그리고 그렇게 알게 된 언어를 따로 정리했습니다.

이후 형태소 분석기를 사용하기 위해 사용자 단어 사전(user dic)을 만들었습니다.

이번 프로젝트에서 사용한 사용자 단어 사전은 3200여개 정도 됩니다.

모든 것을 다 태깅할 수는 없었지만 그래도 많이 사용하는 약어들과 은어들은 형태소 분석이 가능하였습니다.

형태소 분석은 은전한닢을 사용했습니다. 이번 기회에 카카오 형태소 분석기(khaii)를 사용해볼까 했는데

시간이 없어서 ㅠㅠ 기존에 하던 대로 은전한닢(Mecab)을 사용했습니다.

 

그리고 형태소 분석을 한 결과를 다시 데이터베이스에 넣었습니다.

위 사진은 그 결과입니다.

 

이제 데이터 수집이 끝나고 도메인 특징 조사, 형태소 분석까지 완료했습니다.

슬슬 어떻게 서비스를 만들 것인지 고민했습니다.

저희는 아래와 같이 서비스 흐름도를 생각했습니다.

 

1. 데이터 수집(웹 크롤러) 및 저장

2. 토크나이징 및 저장

3. 데이터를 활용한 딥러닝 모델 훈련 및 새로운 데이터를 딥러닝 모델을 활용해서 category 예측(욕설인지 아닌지)

4. web과 DB를 바로 바라보는 것이 아닌 Restful API 서버를 중간에 설정

5. Restful API는 swagger(스웨거)를 통한 관리

6. request 보안 관리

7. django를 활용한 back과 front 개발

 

위와 같은 흐름을 생각하였고 진행하였습니다.

스웨거를 통해서 restful api를 보게 되면 아래와 같습니다

 

 

게시판 부분만 보면 begin, count 등의 값에 따라서 요청을 보내고 그에 따른 응답을 받을 수 있습니다.

게시판 외에도

 

그래프 데이터를 위한 요청, 형태소 분석 결과를 가져오는 요청 등

각 기능에 따라서 api를 요청하고 받아올 수 있도록 만들었습니다.

이 api 서버는 spring boot를 사용해서 개발했습니다.

 

그리고 저희 일정관리는 트렐로(trello)를 활용하였습니다.

저장소는 gitlab을 활용해서 버전 관리 및 코드를 관리하였습니다.

 

이제 데이터를 분석할 차례입니다.

형태소 분석이 된 데이터를 가져와서 데이터를 살펴보면

 

 

이러한 단어들이 많이 사용된 것을 볼 수 있습니다. 정치적인 안좋은 용어와, 북한, 각종 욕설 등의 데이터가 보입니다.

역시나 사람들이 욕설을 많이 사용합니다. 뿐만 아니라 옳지 못한 정치적 단어도 사용합니다.

이러한 것들을 전부 감지해주는 모델을 만들어야 했습니다.

 

 

그래서 딥러닝 모델을 만들었습니다.

정확도는 대략 92% 정도 나왔습니다.

이제 새로 들어오는 데이터에 대해서 딥러닝 모델이 예측을 하고 그 결과 값을 데이터베이스에 저장하는 방법을 사용했습니다. 서버 성능이 무료 서버라서.. 너무 성능이 안좋았습니다.

그래서 이게 한계였습니다.

 

그리고 django를 활용해서 웹 개발을 진행했습니다.

웹 화면은 아래와 같은 메뉴가 있습니다.

1. 수집한 데이터가 욕설인지 아닌지 보여주는 게시판 형태

2. 최근 특정 기간 동안 수집한 데이터의 욕설 유무 개수 파이차트 및 많이 사용한 단어 wordcloud

3. 수집한 데이터 개수를 보여주는 라인 그래프

 

초기 버전이기에 일단 이정도만 사용하기로 했습니다.

나중에 규모가 커지만 더 많은 기능을 추가할 것입니다.

그 결과는 아래와 같습니다.

 

 

위 데이터는 최근 롤 게시판에서 수집한 데이터입니다.

오른쪽에 욕설인지 아닌지 보여주는데요. 1이 욕설입니다.

 

그리고 다음 메뉴에서는 최근 3개월 욕설/일반글 통계를 보여줍니다.

욕설이 아닌 것이 그래도 많습니다. 또한, 최근 많이 사용한 단어를 보여주고 있습니다.

 

 

그리고 마지막에 데이터 수집 상황을 보여줍니다.

이렇게 간단하게 딥러닝을 활용한 욕설 데이터 감지 서비스를 만들어보았습니다.

자연어처리 분야에 해당되죠 ㅎㅎ

어렵지 않았지만 부족한 점이 아직 많습니다.

욕설이 되게 애매하다는 것과, 특정 게시판에 따라 너무 글의 특성이 달라진다는 점 등등

다른 아이디어와 기술적 이슈를 더욱 고민해서 보완해야겠습니다.

 

728x90
반응형
14 Comments
  • 프로필사진 송규상 2019.08.27 17:36 안녕하세요! 글 잘 보고 있습니다.
    혹시 장고와 케라스를 어떻게 연동시키셨는지 여쭤봐도 될까요??
    저는 지금까지 장고를 rest API를 쓰지 않고 돌리고 있었는데, 구글링을 했을 때 나오는 것들은 전부 rest API를 썼을 때 어떻게 연동하는지만 나오더라구요.
    혹시 restAPI를 쓰지 않고 장고와 케라스를 연동시키셨다면, 그 방법을 알고 싶습니다. 감사합니다 !
  • 프로필사진 오키여 이수진의 블로그 2019.08.27 19:51 신고 안녕하세요.

    rest api는 선택사항입니다.

    만약 딥러닝 모델을 사용하실꺼면 굳이 rest api를 사용하실 필요가 없을 것 같네요.

    예를 들자면 django에서 하나의 디렉토리를 만들어 거기에 keras model을 넣고 해당 페이지를 띄울 때나 등등 model load 시기를 정해서 model을 띄우고 사용할 때 model을 부르고 predict를 수행하거나 그러면 되는 것이죠!

    방법은 딱 정해지지 않습니다. 어쩄든 둘다 python 기반으로 돌아가기 때문에 background에서 keras를 돌리면 되는 것이구요 ㅎㅎ

    규상님께서 어떤 의도로 사용하실 것인지는 모르겠지만요.

    추천드리고 싶은 것은 주로 view단에서 이용하시면 될 것 같아요 ㅎㅎ
  • 프로필사진 핵펀치 2020.05.08 16:50 안녕하세요. 글 잘 읽었습니다.
    궁금한 점이 있는데요. 혹시 데이터를 크롤링하시고 나서 각 데이터의 레이블은 직접 일일히 달아주신건가요?
  • 프로필사진 오키여 이수진의 블로그 2020.05.09 14:56 신고 안녕하세요.
    네 크롤링하고 직접 달아주긴 했지만, 손수 작업은 하지 않았습니다.

    욕설 단어 사전을 구축하고, 그 구축된 것을 기반으로 태깅 작업을 했습니다.
    손수 작업 한 것도 있지만, 횟수는 많지 않아요 ㅎㅎ
  • 프로필사진 Good 2020.05.20 15:55 정말 훌륭한 프로젝트 입니다. 잘보고 갑니다.
  • 프로필사진 오키여 이수진의 블로그 2020.05.20 18:51 신고 감사합니다 ~
  • 프로필사진 gg 2020.07.07 20:00 안녕하세요, 재밌는 글 잘 읽었습니다.
    딥러닝 모델은 어떤 모델을 어떻게 선정하게되었는지, 실험은 어떻게 진행했는지 궁금하네요 ~
  • 프로필사진 오키여 이수진의 블로그 2020.07.08 09:26 신고 안녕하세요.
    딥러닝 모델은 일단 간단한 것으로 사용하였습니다. 장황하게 어텐션이니, 버트이니 이런 기술을 사용하지도 않았어요 ~
    LSTM으로도 충분히 성능이 나왔습니다.
    실험은 어떤 실험을 말씀하시는 걸까요?
    일단, 모델에 대한 실험은
    모델을 만들고 신규 데이터를 수집하면서 라벨링이 제대로 되는지를 모니터링 했습니다 ~
  • 프로필사진 gg 2020.07.08 10:44 그렇군요 ~ 실험은 어떤 모델들과 비교해보셨는지, LSTM 모델 성능 높이기 위해 여러가지 실험해보신내용 (전처리, 파라미터 조정 등등)이 있는지 궁금했습니다 ㅎㅎ
  • 프로필사진 오키여 이수진의 블로그 2020.07.09 09:49 신고 아 모델에 대한 실험이군요.
    사실, 모델에 대한 파라미터 튜닝은 딱히 할 것이 없었습니다. (깊게 쌓으면 모델이 무겁고, training하는데 시간도 오래 걸리고 등등 이슈가 있어서요)
    대신, user dictionary 구축과 전처리 부분, 수집 데이터 관리 부분 등이 굉장히 이슈였습니다 ㅎㅎ
  • 프로필사진 연권 2020.07.15 14:59 신고 수집한 데이터의 학습전 욕설 유무체크는 만드신 단어사전에 기반해서 하신건가요?
  • 프로필사진 오키여 이수진의 블로그 2020.07.15 18:58 신고 안녕하세요.
    수작업 + 단어 사전 기반 전부 포함입니다.
  • 프로필사진 열공 2021.02.01 15:47 글 잘 읽어보았습니다!!
    파이썬 관련해서 공부중인데요...
    아직 초보라 그런지 이해하는데 한참걸렸네요ㅋㅋ;;
    이 정도 수준까지 가는데 직접 실습해보는게 가장 이해가 빠르기는 하지만 그래도 혹시 참고할만한 서적이 있을까요??
  • 프로필사진 오키여 이수진의 블로그 2021.02.03 08:52 신고 안녕하세요~

    음 이번에 Do it 책 시리즈 중에 Django책도 나오고 Flask책도 있는 것으로 알고 있습니다 ~
    그리고 Do it 시리즈 중 데이터 분석? 관련 책도 있구요

    Do it 시리즈가 책도 두껍지 않고 잘 나와있어서 조심스래 추천드립니다
댓글쓰기 폼