Skip to content

[2022-2학기 DSL 모델링 프로젝트 NLP] 플레이스토어 Review 데이터의 리뷰 감정에 따른 토픽별 요약 모델

Notifications You must be signed in to change notification settings

HanbinKim1004/App-Review-Sentiment-Summarization

 
 

Repository files navigation

App-Review-Sentiment-Summarization

플레이스토어 Review 데이터의 리뷰 감정에 따른 토픽별 요약 모델

DSL 22-2 Modeling Project F조

팀명 : 연어들
팀원 : 김종민, 김한빈, 송규원, 엄소은, 전재현, 차혜준

Overview

Presentation PDF
Presentation Youtube

image

1. 개요

  • Background:
    • 로드맵 설정은 PM의 큰 고민
    • 리뷰를 통해 인사이트를 얻을 수 있으나 그 수가 너무 많음
  • 기획 내용
    • 리뷰를 감정별-토픽별로 계층화하여 분리
    • 이후 각 토픽별로 요약하여 인사이트를 한줄로 표현함
  • 해결 방법
    • Playstore Review Data를 확보
    • 전처리 진행 (문장 분리 / stop word 설정 / pos 기준 설정 등)
    • KoBERT fine-tuning을 활용하여 감정 분류
    • BERTopic을 활용하여 토픽 분류
    • KoBART-summarization를 활용하여 리뷰 요약
    • 평점별로 최종 분류

2. 리뷰 데이터 확보

  • 플레이스토어 '수면' 키워드를 가진 앱을 기준으로 리뷰 데이터 확보
  • 총 20개 어플에서 19,833개의 리뷰 수집
  • 각 리뷰별로 user id, rating, date, review 데이터 확보
  • 자세한 코드는 data/crawling 폴더 확인
  • inference 상황에서도 동일한 crawling을 진행 - crawler.py 확인

image

3. 데이터 전처리

  • 추후 감정 분류 모델에서 발생 가능한 데이터 불균형을 해소하고자 리뷰 데이터 분포 조절
  • 리뷰 데이터 특성 상, 한 리뷰 내에 긍/부정 감정이 함께 들어있음을 확인 -> 리뷰를 문장 단위로 분리
  • 품사 수가 부족한 문장을 제거하도록 하여 의미가 크지 않은 문장을 제외
  • 자세한 코드는 data/preprocess 폴더 확인
  • inference 상황에서도 동일한 preprocess를 진행 - preprocess.py

image

4. 감정 분류

  • 전처리된 리뷰 문장을 4가지 감정 클래스로 라벨링 - 부정, 긍정, 개선, 일반
    • 개선 : 긍정에도 부정에도 속하지 않는 개선 내용을 담는 문장에 대한 클래스
    • 일반 : 개인적인 이야기, 의미없는 이야기 등 기타 문장에 대한 클래스
    • 라벨링 결과 : data/labeling_total.xlsx

image

  • pre-trained KoBERT를 활용하여 4가지 클래스로 분류하는 classification fine-tuning 진행
  • 자세한 코드는 model/kobert_finetune/Train_Test_Accuracy.ipynb 파일 확인
  • inference 상황에서 학습된 모델 활용 - kobert_classifier.py

image

  • 모델 성능 향상 과정 (10 epoch 기준)
    • 기존 : test 기준 73%
    • 부정, 개선 클래스 분류 기준 모호 -> 부정, 개선 클래스 합쳐 3가지 클래스로 분류하도록 : test 기준 85%
    • 외부 데이터 함께 활용 : 비슷한 특성의 데이터셋인 Naver 영화 리뷰 데이터셋 : test 기준 87%
    • 일반 클래스 데이터 부족하여 데이터 증강 (5에서 이어짐)

image

5. 리뷰 데이터 증강

  • 일반 클래스 리뷰 데이터가 부족하여 이에 대해 데이터 증강 -> 1201개의 일반 문장 확보
  • Easy Data Augmentation (EDA) 방식을 활용
    • SR, RI, RD, RS를 stochastic하게 적용
    • model/review_data_augmentation_EDA/Text_Augmentation.ipynb 파일 확인
  • 모델 성능은 오히려 감소
    • 증강 전 데이터 자체가 부족, 일반 문장 간의 공통점이 적기 때문인 것으로 판단
    • model/kobert_finetune/Augemantation_Train_Test.ipynb 파일 확인

6. 토픽 모델링

  • BERTopic 활용 : 토픽 모델링 기법으로서, BERT 기반의 embedding + class-based TF-IDF 활용
  • 각 감정 클래스 내에서 BERTopic 수행
    • 보다 좋은 토픽 추출을 위해 각 문장에서 명사만 남기고 BERTopic 수행

image

7. 리뷰 요약

  • pre-trained KoBART를 summarization task에 fine-tuning한 KoBART-summarization을 활용
    • BART : Transformer의 Bidirectional Encoder, Auto-Regressive Decoder를 합쳐서 pre-train한 모델 (denoising autoencoder)
  • 같은 토픽으로 분류된 문장끼리 모아 한 문단으로 묶은 후 KoBART-summarization 수행
  • 자세한 코드는 model/topic_summary/review_topic_summarization.ipynb 파일 확인
  • inference 상황에서도 동일한 topic modeling & summarization 진행 - topic_summary.py

image

End-to-End Inference

위 Overview에서 설명한 전체 과정을 한꺼번에 inference할 수 있는 end-to-end pipeline code를 구성

Dependencies

  • Python 3.9
  • PyTorch 1.12.1
  • dependencies in requirements.txt

How to run

  1. Clone this repository.
git clone https://github.com/jeochris/App-Review-Sentiment-Summarization.git
cd App-Review-Sentiment-Summarization
  1. Install pytorch and other dependencies.
pip install -r requirements.txt
  1. Download our fine-tuned KoBERT model.
https://drive.google.com/file/d/10N0RprpvGZwnpguET_KL35Db11owD10O/view?usp=sharing
  1. Run code with your option. - For example,
python main.py --app_name=미라클나잇 --rating=5 --sentiment=negative

app_name

  • App you want to find out

rating

  • If you want to find out reviews only with certain rating, add this option.
  • Can be omitted.

sentiment

  • Sentiment you want to find out.
  • Three options {negative, positive, personal}

Result

'Sleep Cycle' 앱의 부정 리뷰 기준으로 결과 확인 - python main.py --app_name=슬립사이클 --sentiment=negative

1. Crawling, Preprocess, Sentiment Analysis

  • Result : result/sentiment/predicted_reviews_슬립사이클.xlsx

2. Topic Modeling

  • Result : result/topic/review_nouns_topic_슬립사이클_None_negative.xlsx

3. Summary

  • Result : result/summary/topic_and_summary_슬립사이클_None_negative.xlsx

Result Anaylsis

'Sleep Cycle' 앱의 1점, 5점 리뷰 내 부정 리뷰 문장 기준으로 결과 확인 및 분석 - --rating 옵션 추가
(1점 리뷰 : 이탈 예정 유저, 5점 리뷰 : 충성 유저로 간주)

image image

File Description

main

  • main.py : 전체 end-to-end pipeline 수행
  • crawler.py : 입력된 어플을 플레이스토어에 검색 후, 연속적인 스크롤을 통해 전체 리뷰를 크롤링하여 dictionary 형식으로 저장
  • preprocess.py : 각 리뷰에 대해 문장 단위 분할, tokenization을 통한 전처리, 일정 수준 이상 짧은 문장 제외 등의 총체적인 text preprocess 수행
  • kobert_classifier.py : 학습한 fine-tuned KoBERT 모델을 바탕으로 preprocess된 문장들에 대해 sentiment classification task 수행 및 결과 저장
  • topic_summary.py
    • retrive_topic : 입력된 sentiment로 분류된 리뷰 문장들에 대해 BERTopic을 바탕으로 토픽 모델링 수행
    • summary : 앞서 같은 토픽으로 분류된 리뷰 문장을 concat한 이후 KoBART-summarization을 바탕으로 요약 수행

data

  • crawling
    • PlaystoreReviewCrawling_first.ipynb : playstore 리뷰데이터를 크롤링하는 코드 (초안)
    • PlaystoreReviewCrawling_final.ipynb : 구글 플레이스토어의 리뷰 창을 열어 리뷰를 크롤링하는 코드. 너무 많은 리뷰가 있는 경우를 고려해 스크롤은 8분으로 제한. json 형태로 저장한 뒤 샘플링 진행
  • preprocess
    • Preprocessing_with_TextRank_KoBERT_KeyBert.ipynb : 문장 분리 / 품사 개수 기준 / 불용어 제거 등의 전처리 및 전처리 데이터셋을 기반으로 진행한 Text-Rank / KoBERT / KeyBERT
  • labeling_total.xlsx : 라벨링 결과 excel sheet

model

  • kobert_finetune
    • Train_Test_Accruacy.ipynb : 라벨링 데이터로 KoBERT를 fine tuning 진행 및 train test accuracy 계산
    • Augemantation_Train_Test.ipynb : 일반 클래스를 증강하여 다시 fine tuning 진행 및 train test accuracy 계산
    • sentiment_analysis_experiment.ipynb : nlp 감성분석에 많이 사용하는 네이버 영화 리뷰 데이터를 통한 어플리케이션 리뷰 라벨링
  • topic_summary
    • review_topic_summarization.ipynb : 감성이 label 된 문장들을 단어 단위로 쪼갠 후, 명사들만 사용하여 토픽 모델링(BERTopic)을 수행. 나누어진 토픽들을 한 문단으로 합친 후 요약모델(KoBART-summarization)을 사용하여 한 문장으로 요약.
  • review_data_augmentation_EDA
    • Text_Augmentation.ipynb : KorEDA / textattack 라이브러리를 사용한 Text Data Augmentation
  • review_similarity (추가 task)
    • review_similarity_by_app.ipynb : 긍정 리뷰일수록 비슷한 리뷰가 많을 것이라는 가정하에 진행한 과정. 전처리 과정을 거쳐 라벨링한 어플리케이션 리뷰 데이터에 대한 감정별 유사도 측정
    • review_similarity_by_sentiment.ipynb : App별 유사한 리뷰가 얼마나 많은가를 확인하기 위한 과정. 전처리 하지 않은 리뷰를 전처리 후 App별 전체 리뷰 중 유사 리뷰 비율 확인

result

  • sentiment : 텍스트 전처리 후 각 문장별 감정 분류 수행 결과
  • topic : 각 문장과 그에 따른 토픽 결과
  • summary : 각 토픽별 요약 문장 결과

Reference

About

[2022-2학기 DSL 모델링 프로젝트 NLP] 플레이스토어 Review 데이터의 리뷰 감정에 따른 토픽별 요약 모델

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 99.8%
  • Python 0.2%