머신러닝(TensorFlow)을 이용한 게시글 및 댓글 카테고리 분류

자연어로 된 내용인 뉴스, 블로그 게시글, 댓글 등의 데이터를 카테고리별로 분류해주는 머신러닝을 구현해 보겠습니다.
( 참고로 머신러닝을 개발하기 위해 필요한 모델은 오픈 소스를 이용할 예정입니다 )

데이터 수집

기계를 학습시키기 위해선 Train Data 즉 라벨링이 된 데이터를 필요로 합니다.
Train Data를 보여드리자면 아래와 같은 형식입니다.

필자의 경우 Train Data를 뉴스 기사, 본문, 언론사, 카테고리로 만들었습니다. ( 확장자는 csv 이며 DB를 이용할 수 있으신 분이면 DB를 이용하셔도 됩니다. )

정부에서 운영하고 있는 공공데이터포털은 존재하지만 국내에는 Kaggle과 같은 빅데이터를 공유하는 활성화가 잘 된 포럼이 없습니다. 그래서 저는 기사를 크롤링해서 뉴스 데이터를 수집했습니다. 크롤링한 사이트는 네이버 뉴스 카테고리입니다. 제가 크롤링한 데이터를 배포하고 싶지만 저작권 문제가 있어 배포할 수 없습니다. 하지만 저와 같은 데이터를 가지고 싶으시다면 제 github에 올라와 있는 크롤러를 이용하시면 됩니다. 뉴스 크롤러: https://github.com/lumyjuwon/newscrawler

데이터 셔플

크롤링을 통해 많은 데이터를 수집하셨다면 그 다음 필요한 것은 데이터 셔플입니다. 이 프로젝트를 진행할 때 데이터 셔플을 진행하지 않고 10만 개 사회 데이터 -> 10만 개 정치 데이터-> 10만 개 스포츠 데이터 순서로 된 30만 개의 데이터를 학습시켰던 적이 있습니다. 이렇게 학습시킬 경우 사회 데이터를 Optimizing 한 다음 정치 카테고리를 사회 카테고리로 인식해버립니다.
즉 10만 개 사회 데이터만 연속으로 학습을 시키다 보니깐 최적의 W를 사회 카테고리에서만 발견하게 되고 다음 카테고리 데이터에서는 별 효율이 없는 학습을 진행하게 된다는 것입니다.
데이터 셔플이 안 된 데이터를 가지고 학습 시킨 머신러닝에게  정치 데이터를 입력시켜도 사회라고 출력하며 스포츠를 입력해도 사회를 출력합니다.

이러한 결과를 만들어 내지 않기 위해서 csv를 합친 후에 셔플하는 방법에 대해서 말씀드리겠습니다.

제가 올려둔 크롤러를 통해 모은 데이터를 하나의 데이터로 합칩니다.
데이터를 하나의 csv로 합치기 어려우신 분은 아래 코드를 참고하시면 됩니다.

위 코드를 이용해 모든 데이터를 하나의 csv로 통합시킵니다.

통합시킨 csv를 가지고 이제 shuffle을 할 차례입니다.
참고로 여기서 shuffle이라는 것은 순서대로 되어 있는 데이터를 섞는다는 뜻입니다.

위 코드를 이용해 데이터 셔플을 해주시면 됩니다.

* Csv 용량이 커서 마이크로소프트 엑셀로 못 여는 경우가 생깁니다. 이런 경우 파이썬에서 Csv를 열어 한 줄 한 줄 씩 출력하시는 수밖에 없습니다. Csv 열어 확인하는 방법은 아래 코드를 참고하시기 바랍니다.

형태소 분석 및 Word2Vec

위 코드를 이용해 shuffle 된 통합 데이터를 형태소 분석 한 다음 분석 된 데이터를 가지고 Word2Vec을 진행합니다.
참고로 Word2Vec을 진행하는데 시간이 오래 걸리니 참고하시기 바랍니다.
* 본문에서는 뉴스 기사의 제목을 가지고 Word2Vec을 진행하게 됩니다. 그래픽카드 TensorFlow 버전 및 메모리가 충분하신 분들은 뉴스 기사 본문을 가지고 Word2Vec 하셔도 됩니다 *

머신러닝 학습 Bi_LSTM 모델

Bi_LSTM 모델을 이용하여 머신을 학습시킵니다.
형태소 분석 및 Word2Vec ~ BI_LSTM 학습까지에 관한 소스를 아래 Github에 올려두었습니다.
+ 기사 제목이 Word2Vec (embedding) 된 파일을 github에 같이 넣어 뒀으므로 Classifier.py를 실행하셔서 테스트 해보시기 바랍니다.

게시글 및 댓글 카테고리 분석기: https://github.com/lumyjuwon/CategoryClassifier

결과

AI 서비스 ‘목소리’는 누굴까
IT과학 73.96 %
경제 18.72 %
정치 0.11 %
e스포츠 1.91 %
골프 0.0 %
농구 0.0 %
배구 0.0 %
야구 0.0 %
일반 스포츠 0.02 %
축구 0.0 %
사회 3.24 %
생활문화 2.03 %

티몬, 독립운동가 후손 주거 개선에 2500만원 기부
IT과학 4.53 %
경제 85.36 %
정치 0.83 %
e스포츠 0.0 %
골프 0.0 %
농구 0.0 %
배구 0.0 %
야구 0.0 %
일반 스포츠 0.11 %
축구 0.0 %
사회 3.31 %
생활문화 5.86 %

한국기자협회 창립 54주년 기념식…”언론자유 위한 노력 박차”
IT과학 0.47 %
경제 3.59 %
정치 4.22 %
e스포츠 0.04 %
골프 0.08 %
농구 0.0 %
배구 0.18 %
야구 0.04 %
일반 스포츠 5.86 %
축구 0.21 %
사회 6.45 %
생활문화 78.87 %

[떠나요 강심장] 일제강점기·해방공간 아픔 밴 여수여행
IT과학 0.04 %
경제 3.25 %
정치 0.47 %
e스포츠 0.0 %
골프 0.01 %
농구 0.0 %
배구 0.0 %
야구 0.01 %
일반 스포츠 0.41 %
축구 0.0 %
사회 3.77 %
생활문화 92.03 %

‘강승호-최항 활약’ SK 내야, 긴장-경쟁의 기운 감돈다
IT과학 0.0 %
경제 0.0 %
정치 0.0 %
e스포츠 0.0 %
골프 0.0 %
농구 0.0 %
배구 0.0 %
야구 100.0 %
일반 스포츠 0.0 %
축구 0.0 %
사회 0.0 %
생활문화 0.0 %

타격이야 거의 입증될듯 싶고 둘다 수비만 더 잘해주면 매우 든든하겠는데..
IT과학 0.0 %
경제 0.0 %
정치 0.0 %
e스포츠 0.0 %
골프 0.01 %
농구 0.0 %
배구 0.0 %
야구 99.85 %
일반 스포츠 0.09 %
축구 0.03 %
사회 0.0 %
생활문화 0.01 %

[스포티비뉴스=홍지수 기자] 당연한 것도 없고 정해진 것도 없다. SK 와이번스 내야수들은 좀더 긴장할 필요가 생겼다.
최항의 성장, 그리고 이적생 강승호의 활약이 SK 내야진에 긴장된 분위기를 만들고 있다. 감독이나 코치진이 바라볼 때는 좋은 방향으로 가고 있는 것이다. 선수들도 더 긴장하고 노력하게 되면서 한층 더 실력을 키우는 계기가 될 것이다. 지난달 31일, 트레이드로 LG 트윈스를 떠나 SK 유니폼을 입은 강승호는 최근 맹타를 휘두르고 있다. SK 이적 후 16일까지 타율 0.400(25타수 10안타) 1홈런 9타점 활약을 펼치고 있다. 트레이드 때 병역 의무를 마친 내야수 자원 보강을 고민하던 SK였다. 강승호를 영입한 이유는 내야 멀티 포지션 수비를 소화할 수 있다는 장점을 봤기 때문이다. 물론 타격 능력도 준수하다고 평가했다. 정경배 코치는 “SK로 오기 전 LG 코치님들이 승호를 많이 가르쳐주신 듯 하다. 가능성이 보이니까 더 가르치려고 하게 되는거다”고 설명하기도 했다. 최근 기대 이상으로 해주고 있다. 더구나 최정의 공백도 잘 메웠다. 왼쪽 허벅지 근육 손상으로 전력에서 이탈했던 최정. 재활에 전념한 뒤 돌아왔지만 아직 정상 컨디션이 아닌 상황에서 강승호의 존재가 든든할 수밖에 없다.

IT과학 0.0 %
경제 0.0 %
정치 0.01 %
e스포츠 0.05 %
골프 0.0 %
농구 0.0 %
배구 0.0 %
야구 99.25 %
일반 스포츠 0.65 %
축구 0.0 %
사회 0.0 %
생활문화 0.04 %

후기

거의 한 달의 기간 동안 데이터 수집부터 시작해서 머신러닝에 관한 전반적인 내용을 이해하느라 꽤 고생했던거 같습니다.
하지만 새로운 분야에 접할 수 있어서 머신러닝의 어려운 점과 같은 광범위한 내용들을 학습할 수 있었던거 같습니다.
무엇보다 인공지능 분야는 수학 전공자에게 유리하다는 것을 알게 됐습니다. 저는 단지 딥러닝 모델을 가져와 Input, Output 부분만 수정 및 추가하여 썼기 때문에 머신러닝 전체를 만들지는 못한다는 것입니다. 인공 신경망 등을 만들기 위해선 매우 많은 전공 수학들이 필요하고 거기서 더 깊숙하게 들어가기엔 아직 한참 멀었기 때문이죠.

원래는 댓글의 카테고리를 분류하기 위해 개발했지만 방대한 데이터와 Bi_LSTM 모델을 이용함으로서 모든 자연어 내용에 대한 카테고리를 분류해줄 수 있게 됐습니다.  글의 제목, 본문, 댓글 등의 내용이 있는 모든 것들을 말이죠
단점이라고 하면 카테고리가 크게 세분화 되지 않아서 정해진 카테고리 외의 내용에 대해서는 모호한 결과를 내놓을 수 있다는 것입니다.뿐만 아니라 가끔은 데이터 학습 과정에서 특정 데이터가 부족한 부분들이 있는 경우도 있어 의도치 않은 결과를 내놓기도 합니다.이런 문제들은 튜닝을 통해 고쳐가야 하지만 Learning_rate 라던지 epoch, batch_size 등의 매우 많은 요인들이 있어 시간적인 어려움이 있었습니다.

머신러닝을 하면서 느꼈던 것은 이 분야가 정말 매우 많은 곳에 사용될 수 있다는 것입니다. 요즘 게임 분야에서도 인공지능을 도입하여 게임 데이터를 분석하거나 더 좋은 게임 AI를 개발하고 있습니다. 또한 클린한 게임 환경을 만들기 위해 머신러닝을 사용하고 있습니다.블리자드 같은 경우 머신러닝을 도입하여 오버워치와 같은 게임에서 채팅으로 욕설을 하는 유저를 판단하여 제재하는 등의 기술을 선보이고 있습니다. 앞으로 개발자에게는 프로그램 개발 능력만 중요시하게 되는 것이 아니라 프로그램 개발 후의 데이터를 어떻게 처리해서 자신이 맡고 있는 프로그램을 어떤 방식으로 개선해 나갈지 중요한 요인이 될 것 같습니다.

정리

  • 머신러닝을 어떤 용도로 쓸 것인지에 대해 결정
  • 결정한 용도에 맞는 인공신경망 모델 탐색
  • 학습을 시킬 수 있을 정도의 데이터 수집
Share

댓글

avatar
  댓글 알림  
알림