/ AI

NLP - 딥러닝 모델의 범용적 활용가능성 분석

#BERT #textmining #deeplearning

목차

Section 4 Project - Text emotion classification

Deep Learning 섹션의 마무리 프로젝트는 텍스트 감정분석 모델의 범용적인 활용 가능성을 검증해보는 것으로 결정했다. 아직까지는 일주일이라는 짧은 시간동안 데이터셋과 레퍼런스 코드를 찾고 그것들을 내 환경에서 완벽하게 구현해내는 것들이 익숙하지 않아 주제 선정에 어느정도 제약이 따를 수밖에 없었다. 그래서 평소 관심있던 분야 중, 내가 지금 일주일 안에 어느정도의 완성도 이상을 결과물로 낼 수 있을 것 같은 모델과 데이터셋을 선정했다. 내가 정한 분야와 데이터셋에서 적절한 가설을 세우고 그 가설을 검증하는데 필요한 딥러닝 파이프라인을 구축하는 것이 프로젝트의 목표였다. 가설 설정을 위해 끊임없이 질문을 던지고 그 질문을 어떻게 해결해야할지, 검증은 어떻게 해야 할지를 고민하며 밤을 지새웠던 지난 일주일 간의 고군분투기를 적어본다.

Github repo

abstract

기업은 최소한의 자원을 투자하여 최대의 이익을 보기 위하여 노력한다. 본 프로젝트는 제품이나 서비스에 대한 감상평을 남기는 리뷰와 같은 텍스트 데이터를 활용하여 해당 제품이나 서비스에 대한 감정이 긍정적인지, 부정적인지 분류하는 감정분류를 실시한다. 감정 분류를 실시할 때, 매번 새로운 모델링을 하지않고 분야별로 한 번의 파인튜닝을 실시한 모델로 범용적 활용 가능성에 대해 고찰한다.


1. 서론

마케팅, 누구라도 한 번쯤은 들어봤을 만한 단어입니다. 마케팅은 목적하는 바를 달성하기 위해 유도하는 모든 활동을 말합니다. 우리가 흔하게 이야기하는 마케팅은 경제적인 관점에서의 소비를 유도하기 위해 하는 활동들입니다.

과거에는 기업이 제품을 만들어 소비의 방향을 선도하고 소비자는 만들어진 기업의 소비 트렌드를 따르던 패턴이었습니다. 하지만 현재에 이르러서는 경제적인 여유와 의사표현수단이 다양해지면서 소비자가 트렌드를 선도하고 기업이 이에 맞는 제품이나 서비스를 제공하는 형태로 경제활동의 패러다임이 크게 변화했습니다.
이런 환경속에서 마케팅 분야의 가장 큰 관심사는 “소비자나 사용자의 마음을 파악하는 것”이 되었습니다. 소비자의 마음을 알아야 알맞은 서비스나 제품을 만들 수 있고 또 만들어진 상품을 잘 팔 수 있기 때문입니다.

1.1 가설 설정

최근 기업들은 소셜미디어나 리뷰 텍스트 등을 기반으로 감정을 분석하여 마케팅에 활용하는 사례들이 점점 많아지고 있습니다.
감정분석을 하는 프로세스를 크게 나누어보면,

  • 감정을 분석하고자 하는 데이터를 정제
  • 데이터의 고유특성을 고려하여 분류모델 설계
  • 생성한 모델에 데이터를 학습

이 과정은 보기엔 단순해보일지 모르나 데이터의 복잡성이나 크기에 따라 상당히 많은 시간을 소요하게 됩니다. 문제는 데이터가 바뀔 때마다 저 모든 과정을 다시 거쳐야 한다는 것입니다.

그래서 저는 자연어 처리분야에서 소비자의 텍스트데이터를 활용하여 감성분류를 할 때, 다양한 분야에 범용적으로 활용할 수 있는 모델이 있으면 좋지 않을까 라는 생각을 해보게 됐습니다.

이 프로젝트를 진행하면서 검증할 저의 가설을 세워봤습니다.

“같은 언어를 사용하고 감정을 이진 분류 한다는 가정 하에, 한 분야에 대해 학습한 모델이 다른 분야에 사용될 수 있다”

이런 가설을 생각해보게 된 이유는 제가 감정분류를 할 때 사용할 모델을 찾아보다가 구글의 BERT라는 모델에 대해 알게되었고 이를 사용하기로 마음먹었기 때문입니다.
구글이라는 큰 기업에서 방대한 양의 코퍼스로 사전학습을 시켜놓았기 때문에 비슷한 형태의 데이터에 수행할 내용이 같다면 성능차이가 크지 않을 것이라는 생각에서 이런 가설을 세우게 되었습니다.

2. Modeling

2.1 모델 결정 - BERT

간단하게 BERT를 설명해보면,
구글에서 개발하고 사전훈련시킨 자연어처리에 사용되는 범용 언어모델입니다. 총 33억 개의 코퍼스(bookcorpus : 8억, wikipedia : 25억)를 사용하여 개인이 구축하기 힘든정도의 방대한 양의 코퍼스(의미뭉치)로 상당한 시간 사전학습을 마쳐놓아 상당한 성능의 모델을 바로 가져다 쓸 수 있게 구현 해놓았습니다.

자연어를 처리할 때, 데이터가 충분하다면 Embedding 과정이 성능에 큰 영향을 미치게 됩니다. 이 말은 단어의 의미를 잘 간직할 수 있도록 벡터로 표현하는 것이 중요하다는 의미입니다. 이 Embedding 과정에 구글의 강력한 BERT를 이용하는 것이고 제가 사용하고자 하는 문제에 맞도록 파인튜닝을 진행한 후에 분류에 적용하게 됩니다.

2.2 데이터셋 결정 - 네이버쇼핑 리뷰, 네이버영화 리뷰, steam 리뷰

프로젝트를 진행하기 위하여 제가 수집한 데이터는 세 종류입니다.
steam 리뷰는 게임을 판매, 구동시켜주는 steam 플랫폼의 리뷰로 추천, 비추천 두 가지로 평가되며,
네이버 쇼핑, 영화 리뷰는 별점 5점으로 평가된 데이터로 중간값인 3점은 제외되고 1,2,4,5 점의 리뷰만 수집된 데이터로 1,2 점은 부정, 4,5점은 긍정으로 다시 분류하였습니다. 각 데이터는 긍정과 부정 비율을 동등하게 맞추어 샘플링 되었기 때문에 추후 평가에 사용될 기준모델의 정확도는 50%입니다.

  • 네이버 쇼핑 리뷰
    image
    쇼핑데이터는 물품에 대한 만족, 불만족이 비교적 텍스트에 단순하게 나타나 있는 모습을 볼 수 있습니다.

  • 네이버 영화 리뷰
    image
    영화데이터는 영화에 대한 정보가 함축적으로 들어있거나 조금 더 다양한 어휘가 사용되고 있습니다.

  • steam 리뷰
    image
    스팀데이터의 경우는 비어, 속어, 은어 등이 다양하게 나타나있음을 볼 수 있습니다.

3. 검증

3.1 실험 흐름

image

실험의 전체적인 흐름은,

  1. 방대한 양의 코퍼스로 사전학습을 마친 모델을 불러오고
  2. 사용하길 원하는 데이터로 파인 튜닝을 실시합니다.
  3. 이후에 해당 태스크를 수행하게 됩니다.

따라서 저는 3가지 데이터를 각각 파인튜닝한 모델 3가지와 3가지 데이터 모두를 사용하여 파인튜닝한 모델까지 총 4개의 모델을 생성하고, 각 모델에 자신이 학습하지 않은 나머지 데이터셋을 분류시켜 정확도를 평가할 것입니다. 제가 세운 가설이 맞으려면 각 모델이 다른 데이터셋을 분류할 때도 정확도의 차이가 크게 나지 않아야 될 것입니다.

시간적인 제약때문에 BERT를 사용한 모델 중 한국어의 리뷰모델을 분석할 때 성능이 좋았다는 모델의 파라미터를 서칭해서 그대로 대입한 후 모든 실험을 같은 조건 하에서 진행했습니다.

3.2 실험 결과

image

기본 bert 모델에서 파인튜닝을 다르게 한 4가지의 모델을 만들었고 모델별 분류 정확도를 정리했습니다.

모델별 분류 정확도를 정리했습니다. 당연할지도 모르겠지만 각 모델들이 학습에 사용된 데이터에 대해 분류할 때 예를들면 쇼핑데이터 학습 모델은 쇼핑데이터를, 영화데이터 학습 모델은 영화데이터를, 스팀데이터 학습 모델은 스팀데이터를 예측할 때 가장 높은 정확도를 보였습니다.

image

특이한점을 살펴보면, 쇼핑모델의 경우는 학습한 데이터와 다른 분야의 데이터를 테스트했을 때 유독 정확도가 많이 떨어졌습니다.
쇼핑데이터를 추출해봤을 때, 전반적으로 영화리뷰나 스팀리뷰에 비해 리뷰내용이 단순하여 다른 리뷰를 분류 할때 정확도가 떨어진 것이 아닌가 추측됩니다.

image

스팀모델의 경우도 특이한점이 발견됐는데 분야를 가리지 않고 정확도가 다른 모델들에 비해 낮게 나왔습니다. 이는 스팀 모델의 경우 데이터셋이 다른 모델보다 적기 때문이거나 구글에서 사전 훈련에 사용한 코퍼스에 비어, 속어, 은어는 없기 때문일 수도 있을 것 같습니다.

또 다른 특이점은 스팀모델만 유독 학습데이터와 다른 분야의 데이터에서도 성능하락 폭이 크지 않았다는 점입니다.

image

모든 데이터를 넣어 finetuning 한 ALL모델의 경우는 언뜻 생각하기엔 훈련데이터를 다 모아서 학습했으므로 전반적으로 성능이 오를 것으로 예상했으나 평가 정확도는 각 데이터만 훈련한 모델들과 같았습니다.
다만 스팀데이터의 경우엔 스팀데이터만 학습시킨 경우보다 정확도가 5%정도 상승했는데 이는 쇼핑, 영화데이터를 통해 학습한 내용 중 어떤 부분이 스팀데이터를 예측하는데 도움을 주었음을 알 수 있습니다.

4. 결론

범용적인 모델을 만들 수 있을 것이라고 예상했던 저의 가설은 기준을 어디에 두느냐에 따라 완전히 틀리지도, 맞지도 않는 가설이 된 것 같습니다.
한 가지 데이터로 학습한 후 다른 분야 데이터를 분류했을 때, 대부분 성능이 적게는 3에서 많게는 23% 까지 차이가 났지만 그렇다고 하더라도 베이스라인 정확도 50%는 모두 큰 폭으로 상회하는 수치이기 때문입니다.

각 분야에 특화된 모델보다는 정확도가 떨어지지만 이진분류와 같은 단순한 문제에서 일정부분 성능을 포기하더라도 학습을 별개로 진행할 필요가 없다는 점에서 범용모델로 사용할 수 있을 정도는 될 것이라고 생각했습니다.

코드스테이츠의 데이터사이언티스트 코스 네 번째 섹션을 마무리하며..

이번 섹션 프로젝트를 진행하며 가장 힘든 것은 가설을 설정하는 부분이었다. 대학원에서도 논문을 작성할 때 가장 힘든 것이 바로 ‘어떤 질문을 해야하는가’인데 이번 프로젝트는 마치 소논문 하나를 작성하는 것 같은 느낌을 받았던 프로젝트였다.

가장 다뤄보고 싶었던 자율주행 자동차에 사용되는 윤리적 판단 모델은 이제 연구가 활발히 이루어지고 있는 분야여서 구현할 수 있는 레퍼런스모델과 코드들을 구하기가 쉽지 않아 눈물을 머금고 후퇴했다. 바로 Plan B로 생각했던 NLP분야에 대해 서칭하여 BERT라는 모델에 대해 알게되고, 처음에는 내가 배웠던 keras 프레임워크로 구현을 시도했는데 계속 내가 사용할 데이터셋에 적용하여 학습시키면 20분정도 학습이 진행되다가 오류를 뱉어내었다. 이것도 후퇴해야하나 싶을 때, 혹시모르니 해보자 싶어 도전했던 pytorch 프레임워크로 구현된 레퍼런스 모델과 코드를 활용하여 모델 구현에 성공했다. 배우지 못했던 프레임워크라서 도전할 생각조차 안해봤었지만 막상 구현에 성공하고 보니 일단 해보려는 시도가 중요하다는 사실을 다시한번 몸으로 배울 수 있었다.

짧다면 짧고 길다면 긴 4달 남짓한 시간동안 이 분야에 대해 공부하고 몸으로 부딪히며 자꾸 느끼게 되는 것은 정말 지식이 너무나도 방대한 분야라는 것이다. 나는 이 모든 지식들을 알 수는 없고 어차피 새로운 기술이 워낙 빠르게 등장하기 때문에 내가 당장은 이해할 수 없더라도 새로운 것을 받아들여 빠르게 내가 원하는 데이터에 맞게 적용할 수 있는 능력이 정말 중요하다는 것을 새삼 느낀다. 실제로 이런 과정을 거쳐 이번 프로젝트를 마친 지금, 파이토치에 대해 아주 작은 것 하나라도 전보다는 더 알게되지 않았을까.
몰랐던 기술이라도 꼭 구현할 수 없는 것은 아니라는 사실을 배웠다는 것이 이번 프로젝트에서 배운 가장 큰 수확이 아닐까 생각한다.