나이브 베이즈 모형을 이용한 텍스트 데이터 감성분석 예시

2019-02-18

.

그림, 실습코드 등 학습자료 출처 : https://datascienceschool.net

# 나이브 베이즈 모형을 이용한 텍스트 데이터 감성분석 기초

  • 텍스트나 이미지를 보고 ‘좋다’,’나쁘다’라는 바이너리 classification을 하는 것이다. 좋다 나쁘다의 기준은 사람이 느끼는 기준이다.

  • 예를 들어서 영화감상평을 떠올리면 이 영화에 대해서 좋다는 평가인지 나쁘다는 평가인지 감성분석을 할 수 있다.

  • 영화배급사 입장에서는 관객의 반응을 봐야 하는데 관객반응은 예매율이나 실제 관객수로 확실하게 알 수 있지만, 이 정보는 어디까지나 현재 알 수 있는 정보이고 앞으로 얼마나 많은 관객들이 더 볼것인가 예측할때는 관객들이 이 영화에 대해 어떻게 반응을 하고 있는가를 알아야 한다.

  • 과거에는 리서치 용역을 줘서 리서치를 통한 조사가 이루어져 있지만 가용할 수 있는 인력 등에 있어서 한계가 있었다. 이런 작업을 사람이 한명한명 달라붙어서 해야하나.. 이 영화에 관한 수많은 텍스트를 모아서 기계가 자동으로 읽고 판단해보자라는 의도가 있다.

  • 감성분석도 prediction의 일종이다. 지도학습의 일종이다. 지도학습은 정답이 이미 정해져 있는 텍스트만 가능하다는 것이다. 학습용 데이터가 있어야 한다. 그렇기 때문에 관객이 쓴 텍스트마다 좋게 판단했는지 나쁘게 판단했는지 정답이 필요한 것이다.

  • 이런 데이터를 구하기는 쉽지는 않은데 깃허브 공유자료 중 https://github.com/e9t/nsmc에 가면 네이버 영화 감상평에 대한 감성분석 예제를 구할 수 있다.

  • 이 데이터에는 영화감상평의 감상평뿐만 아니라 별점도 같이 포함이 되어있다. 별점이 예를 들어서 1점 ~ 5점까지 줄 수 있다면 별을 많이 줄 수록 이 영화에 대해 긍정적으로 생각했을것이고, 별을 적게 줄 수록 이 영화에 대해 부정적으로 생각했을 것이라고 판단할 수 있다.

  • 이 별점데이터를 중간값을 쓰레시홀드로해서 0(‘나쁘다’),1(‘좋다’)로 바이너라이즈하게 되면 감성분석을 할 수 있는 학습용 데이터가 되게 된다.

  • 이 데이터를 train데이터와 test데이터로 분리를 먼저 해준다. 그 다음에 우리는 나이브 베이즈 모형으로 모델링을 해주는데 나이브 베이즈 모형도 x를 모델링할때 연속변수를 모델링할 수 있는 가우시안 나이브베이즈, 0과 1형식으로 되어있는 베르누이 나이브베이즈, 전체 x들에 대해 하나의 주사위로 묶어버리는 다항분포 나이브베이즈가 있는데 텍스트 분석같은 경우에는 다항분포 나이브베이즈 모형이 통상 많이 쓰인다.

  • 다항분포 나이브베이즈 모형은 x 데이터들이 있을때 x가 나올 수 있는 값들이 굉장히 많은데 어느 특정단어들이 많이 나오느냐하는 분포의 모양을 보고 클래스를 판단하게 된다.

  • 당연히 우리가 쓰는 단어중에는 ‘좋다’라는 의미를 내포하는 단어들이 있을 것이고, ‘나쁘다’라는 의미를 내포하는 단어들이 있을것이다. 예를 들어서 ‘짜증’이라는 단어는 ‘나쁘다’라는 의미를 내포하고 있고 이런 단어들의 빈도가 높게 나왔으면 이 문장은 ‘나쁘다’라는 의미일 가능성이 높아지게 된다.

  • 우리가 이 데이터를 나이브베이즈 모형에 적용할때 앞에 들어가는 전처리기를 어떤것을 쓰느냐에 따라 성능이 많이 좌우가 된다. 가장 간단한 전처리기로는 CountVectorizer를 쓸 수 있다. 이 것은 space를 기준으로 단어를 토크나이징 하는 것이다.

  • 이렇게 되면 문제가 뭐냐면 예를들어서 ‘짜증나네요’와 ‘짜증나네’는 결론적으로 다른 단어로 CountVectorizer는 인식을하게된다. 그러면 사실은 위에 두개의 단어는 똑같은 의미의 단어인데 다른 토큰으로 분리가 되어 데이터의 영향력이 분산되게 된다. 그러면 모델성능에도 안좋은 영향을 끼친다.

  • 따라서 특히나 이런 텍스트분석은 전처리기를 잘 사용해야한다. 그래서 이 전처리기를 좀더 좋게해서 모델의 성능을 올릴 수 있는 방법들이 또 있다. 예를들어 Tfidf가 있고, 형태소 분석기를 이용해서 할 수도 있다.

  • 형태소분석기에 추가로 n그램을 쓸 수도 있다. 앤그램은 어떤 단어하나하나가 좋다 나쁘다 그런의미를 독자적으로 나타낼수도 있지만 뭔가 두개가 겹쳐져야지만 의미가 확실해지는 경우가 있다. 그런것들까지 캐치를 하겠다는 것이다.

  • 이런식으로 형태소분석에 앤그램까지 쓰게되면 모델의 성능은 올라갈 수 밖에 없다. 다만 모델을 트레인하는 시간도 같이 증가하게 된다.

  • 이렇게 bag of words 방식을 쓰는 텍스트 분석에서는 전처리를 통해서 우리가 어떤 토큰을 가려내느냐가 실제로 성능에 많은 영향을준다.