Your True Review - 감정분석기반 영화 리뷰 평점 예측 서비스

안녕하세요. ‘2020 국어 정보 처리 시스템 경진 대회’에 참가하게 된 42Seoul의 Team Gaepodong 입니다.

너무나 좋은 동료분들과 함께 프로젝트를 진행하였으나, 대회에는 아쉽게 탈락하게 되었습니다.😭

그럼에도 이렇게 대회 참여 후기를 작성할 수 있게 해주신 Polarbear님과,

이런 좋은 경험을 할 수 있게 해준 42Seoul에 다시금 감사함을 느끼면서

저희의 프로젝트를 공유해드리고자 합니다.

1. 대회 소개

문화체육관광부와 국립국어원이 주최하는 ‘2020 국어 정보 처리 시스템 경진 대회’는

국립국어원이 구축한 말뭉치 자원의 활용도를 높이고 국어 정보를 처리하는 시스템의 개발 및 수준을 높이기 위한 대회로,

매년 개최되고 있습니다.

올해는 지정분야로 ‘감성 분석’과 그 외 자연어처리 Task에 관련된 자유주제의 일반분야로 참가할 수 있었습니다.

저희는 일반분야로 참가하였습니다.

2. 팀 소개

개포동 팀은 42NLP를 통해 구성되었습니다.

42NLP는 자연어처리에 관심있는 사람들이 자발적으로 모여서 만들어진 스터디 모임입니다.

우연히 해당 대회에 대한 안내 메일을 받게 되었고, 팀원들을 소집할 수 있었습니다.

< 팀원 >

  • Yohlee: Humble하게 Hustle하는 팀장, GPT-42의 예비부모.
  • Jungwlee: 세련된 모델링의 실력자, 강화학습의 차기 선두주자.
  • Iwoo: 커뮤니케이션과 프로젝트 관리능력의 대명사, 잘 배우고 치킨을 좋아함.
  • Sanam: 42Seoul 전체 랭킹 2위, 뛰어난 학습력과 매력적인 두뇌(두피)의 소유자.
  • Kylee: 명료한 통찰력과 세밀함을 갖춘 조력자, 탁월한 정리능력은 덤.

3. 프로젝트 개요

바쁜 현대인들은 간소화된 정보인 리뷰와 평점만으로 영화를 선택하는 습성이 있습니다.

하지만 현 시스템 상 리뷰와 평점은 조작이 가능하여 소비자들의 선택에 방해가 될 수 있습니다.

가령 위의 그림처럼,

리뷰 작성자는 영화가 1점이라고 판단하였으나, 배우에 대한 개인적인 감정으로 10점을 주어

리뷰와 평점 간에 큰 괴리가 발생한 것처럼 말이죠.

이런 상황에서 단순 평점으로 영화를 판단한다면 영화의 본질과 다른 해석이 우려될 수 있습니다.

이렇듯 현대인들의 요약된 정보만을 읽는 습성을 반영하였을 때,

영화의 본질과 다른 해석이 가능한 리뷰와 평점 시스템은 사용자가 잘못된 기대감으로 영화를 소비할 수 있음을 암시합니다.

저희는 이러한 문제에 착안하여 대표성을 띠는 리뷰를 추출하고 평점데이터를 보다 객관적인 지표로 사용할 수 있는 방법을 제안하며,

리뷰와 평점 간 괴리를 해결할 수 있는 서비스를 구축하고자 했습니다.

그렇게 ‘감정분석 및 텍스트랭크를 이용한 영화 대표 리뷰 추출과 평점 부여 서비스(Your True Review)’가 탄생하게 되었습니다.

4. 사용기술과 설계

버전 정보

1
2
3
4
5
6
7
8
9
python3
python3-pip
python venv
mxnet-cu101
glonnlp
sentencepiece==0.1.85
transformers==2.1.1
torch==1.3.1
konlpy (mecab)

Workflow

‘Your True Review’ 웹사이트에서 사용자가 리뷰를 입력하게 되면,

그 리뷰의 긍∙부정 감정수치를 분석하여 그 리뷰의 예상 평점을 부여합니다.

또한 기존 리뷰들을 대상으로 대표성이 있는 문장들을 추출해내고,

많이 쓰인 키워드들을 분석하여 사용자가 알아보기 쉽게 워드클라우드 이미지를 제공합니다.

이를 위해

1) 선택한 영화에 대해 긍∙부정 대표 리뷰 각 10건을 확인하는 ‘리뷰 큐레이션 기능’과

2) 리뷰와 별도로 평점을 매길 수는 없지만, 리뷰를 남겼을 때 문장에서 추출한 긍∙부정 비율 및 평점을 확인하는 ‘자동 평점 부여 기능’을

이용할 수 있도록 설계하였습니다.

Frontend

영화 목록 페이지와 리뷰분석 페이지로 구성되어 있습니다.

영화를 선택하면 리뷰분석 페이지로 이동하고,

긍∙부정 대표 리뷰 각 10건씩과 워드클라우드, 수집 데이터의 기존평점과 예측평점을 확인할 수 있으며

HTML과 CSS를 이용하여 디자인 되었습니다.

Backend

사용자의 요청을 받아 응답하는 서버와 리뷰 감정분석 및 평점부여 API 서버를 따로 구성하여 프론트엔드와 연결시켰으며,

웹 서버는 AWS의 EC2 Instance를, API 서버는 Goorm IDE의 컨테이너를 사용했습니다.

API에서 모델의 예측을 빠르게 진행하기 위해 RAM 4GB의 CPU 성능이 높은 컨테이너를 사용했습니다.

Modeling

저희 서비스를 위해 고안한 모델은 Multi-Task와 Transfer-Learning(전이학습) 기반의 Movie-BERT입니다.

언어모델로는 한국어에 최적화된 SKT Brain의 사전훈련 KoBERT를 사용하였으며

NSMC(Naver Sentiment Movie Corpus v1.0) 말뭉치로 미세조정하였습니다.

이 때 한 가지 모델로 감정수치 분석을 통한 긍∙부정 분류와 평점부여라는 두 가지 과제를 수행하기 위해

Hard Parameter Sharing 구조의 멀티태스크 기법이 사용되었습니다.

첫 번째 과제를 학습한 후, 전이학습을 통해 두 번째 과제를 학습합니다.

모델의 학습을 위해 네이버 영화 사이트에서 리뷰와 평점 데이터를 수집했습니다.

해당 사이트의 영화 평점들은 대부분 높게 형성되어 있고, 부정적인 댓글보다 긍정적인 댓글들이 상대적으로 많이 존재합니다.

이러한 점을 고려하여 대조군의 수량을 맞추기 위해 평점이 6~7점이며 5,000개 이상의 리뷰가 존재하는 영화 29개를 선정하였고,

통합적인 전처리 후 리뷰와 평점으로 이루어진 총 16만 개의 원시말뭉치를 구축했습니다.

Textrank

대표성을 띄는 리뷰를 추출하기 위해 Textrank 방식을 이용합니다.

텍스트랭크는 문서 집합을 추출적요약(Extractive summarization)하는 대표적인 방법으로,

문장그래프를 구축한 뒤 구글이 제안한 Pagerank를 이용하여 키워드와 핵심문장을 선택합니다.

두 문장에 공통으로 등장한 단어개수를, 두 문장 단어 개수의 총합으로 나누어 리뷰들 간의 유사도를 계산한 후

유사도에 따른 문장그래프를 구축합니다.

이 때 품사를 명사∙형용사∙동사로 제한하는데,

‘은/는’ 또는 ‘이/가’ 등 의미를 가지지 않은 품사를 포함시키면 다른 단어와의 유사도가 압도적으로 높아지기 때문입니다.

최종적으로 구축한 문장그래프를 페이지랭크 알고리즘을 통해 학습시킵니다.

이렇게 계산된 랭크를 이용하여 문장을 추출하고, 상위 100개의 단어를 이용하여 워드클라우드 그래프를 생성합니다.


5. 결과

이 모든 기술들을 결합시켜서 아래와 같은 서비스를 구현할 수 있었습니다.

영화 ‘마약왕’은 네이버에 등재되어 있는 평점이 6.33인 반면에 본 시스템의 예측평점은 4.85로,

1.5가량 낮게 측정된 것을 볼 수 있습니다.

이것은 부정적인 댓글들의 극성을 평점이 정확하게 담아내지 못한 것이라고 해석할 수 있습니다.

또한

“후…진짜 노잼… 연기력으로 보려했는데 영화끝나고 남은게 없고 이게 뭘 말하는 영화지…? 송강호연기는 인정하지만 그냥 마약왕의 일생 쭉 나열하다가 끝…?”

이라는 리뷰를 입력했을 때 76% 확률로 부정이며, 예측 평점은 3점으로

리뷰 작성자의 마음을 평점 정보에 반영했다는 것을 알 수 있습니다.

더 자세한 정보가 궁금하신 분들은 아래 링크를 참조해주세요.

>>Explore Github
>>Watch Youtube


>>Read Paper

6. 참여후기 한 줄 평





끝.

Your True Review - 감정분석기반 영화 리뷰 평점 예측 서비스

https://l-yohai.github.io/Your-True-Review/

Author

Yohan Lee

Posted on

2020-09-21

Updated on

2021-08-22

Licensed under

댓글