사용자 리뷰 핵심어 추출 및 감성분석
#deeplearning #NLP #BERT #sentimental classification #keyword extraction
목차
- Time seriesAnomaly Detection Generative Adversarial Networks-Model Structure
- Time seriesAnomaly Detection Generative Adversarial Networks-loss function
- Intro to the Time Series Anomaly Detection
- Text 데이터 광고 필터링을 위한 분류 모델 구축
- 사용자 리뷰 핵심어 추출 및 감성분석
- Deep Learning - 핵심 개념 & 용어
- NLP - 딥러닝 모델의 범용적 활용가능성 분석
- Bank marketing 정기예금 가입여부 예측
- ROC curve에 대해 알아보자
- 연어의 회귀본능이 아닌 선형회귀에 대해 알아보자
BERT를 활용한 사용자 리뷰 핵심어 추출 및 감성분석
abstract
본 프로젝트는 텍스트 데이터를 분석하여 리뷰 내용이 상품의 어떤 특성을 특정하고 있는 것인지 추출하고 감성분석을 하여 사용자 리뷰가 어떤 내용에 대해 서술된 것인지, 해당 내용에 대해 긍정적인지 부정적인지를 판단할 수 있도록 하는 파이프라인을 구축하는 것을 목적으로 한다. 따라서 텍스트데이터에서 핵심어를 추출한 결과와 감성분석을 실시한 결과를 통합하여 유의미한 비즈니스 인사이트를 얻어낼 수 있도록 가설을 세우고 이를 리뷰데이터 원문과 추출된 핵심어, 감성분석 결과를 비교하여 신뢰할 만한 결과를 도출해내는지 실험하는 방향으로 프로젝트를 진행한다.
1. Intro
리뷰, 온라인 쇼핑을 할 때면 늘 구매후기를 먼저 찾아보게 됩니다. 저 또한 마찬가지인데요. 리뷰는 소비자들이 어떤 물건이나 서비스를 구매함에 있어 어느 매체의 정보보다 많은 영향을 끼치고 있습니다. 당장 저부터 어떤 재화를 구매하기 전에 항상 리뷰를 검색해서 찾아보는 편인데요.
위 그림은 구글에 리뷰와 마케팅을 검색했을 때 나오는 결과입니다. 이렇게 소비자에게 중요한 구매지표가 된 리뷰는 이제 생산하는 재화에 대한 상품성 개선, 신상품 기획에 필요한 소비자의 의견 파악이라는, 기업의 입장에서도 마케팅용으로 반드시 활용해야하고 또 활용하고 있을 것이라는 생각이 들어서 이번 프로젝트를 기획하게 되었습니다.
현재 대중적인 온라인커머스 기업인 네이버쇼핑의 리뷰입니다.
빨간색으로 강조되어있는 부분처럼 판매자가 정해놓은 주제 중에 선택하여 작성하게 되어있습니다. 이처럼 기존의 리뷰데이터는 평점이 재화의 어떤 점에 대한 평가인지 업체가 정해놓은 주제 외에는 구체적으로 알기가 힘듭니다.
이런 사례에서 볼 수 있듯이 현재 리뷰를 기업의 입장에서 활용하는데 가장 큰 장해물은 리뷰가 나타내는 내용과 평점이 반드시 일치하지 않는다는 것입니다.
오른쪽 그림처럼 모두 평점5점의 리뷰이지만 리뷰마다 다른 특징을 평가하고 있기 때문에 리뷰내용을 분석하여 각 리뷰의 주제를 추출하고 추출된 주제에 대한 감성분석을 실시하는 것이 효율적인 사용자리뷰 활용을 위해 필요하다고 생각했습니다.
1.1 가설 설정
그래서 제가 세운 가설은 다음과 같습니다.
“리뷰데이터에서 키워드 추출 모델을 통해 추출된 핵심어와 감성분석 모델의 분석 결과를 합쳐서 리뷰 원문의 의미와 일치하도록 하는 리뷰 분석 파이프라인을 만들어 80%이상의 정확도를 확보할 수 있다”
예를들어 “생각보다 착용감이 좋아요. 사운드가 시원시원합니다”라는 리뷰가 주어졌을 때, 감성분석모델을 통해 해당 문장은 긍정으로 분류하고 키워드 추출모델에 의해서 착용감, 사운드, 좋아요 등의 키워드가 추출되어 최종적으로 해당리뷰는 착용감, 사운드 측면에서 긍정적인 리뷰임을 판별하는 파이프라인을 구축하는 것이 프로젝트의 목표입니다.
2. Modeling
2.1 모델 결정 - KOBERT
제가 프로젝트에 사용될 모델은 버트입니다. 다층의 레이어를 활용해서 문장을 구성하고 있는 토큰 사이의 의미를 잘 추출해낼 수 있습니다.
간단하게 버트가 학습하는 과정을 살펴보면 문장의 일부 단어를 mask토큰으로 바꾸고 가려진 단어를 예측하도록 하는 학습을 통해 문맥을 파악하는 능력을 기르게 되고,
또 다음 문장이 올바른 문장인지 맞추는 비지도학습을 통해 문장 사이의 관계를 학습하게 됩니다.
저는 버트 모델중에서도 한글에 특화되어있는 skt에서 한글로 학습시킨 kobert 모델과 google의 다중언어 bert 모델을 이용하여 프로젝트를 진행했습니다.
2.2 데이터셋 결정 - 네이버쇼핑 리뷰, 네이버영화 리뷰, steam 리뷰
프로젝트를 진행하기 위하여 제가 수집한 데이터셋입니다.
저는 모델의 파인튜닝을 진행하기 위해 다양한 상품에 대한 리뷰 총 20만개의 리뷰를 학습과 검증용 데이터로 사용했고 테스트용 데이터를 별도로 특정 상품군을 선정하여 3600개의 데이터를 별도로 준비했습니다.
리뷰 원문과 파이프라인을 거친 텍스트의 내용이 일치하는지의 판단은 문장이 나타내는 디테일한 뉘앙스와 판별 결과를 비교하기 위해서 사람이 직접 읽어보고 올바르게 판별했는지를 비교했습니다.
3. 검증
3.1 Modeling
감성분석 모델은 f1스코어와 정밀도, 재현율 모두 0.9 이상을 기록하며 높은 성능을 나타내고 있습니다.
실제 텍스트를 넣고 검증을 해봤을 때,
첫번째처럼 부정 긍정이 확실한 경우는 예상처럼 잘 분류를 하는 것을 볼 수 있었습니다.
두번째 리뷰는 긍정적인 부분과 부정적인 부분을 같이 적었는데 긍정으로 분류를 하였고 전체적인 문장의 뉘앙스는 긍정이 맞으므로 올바르게 분석하고 있다고 판단했습니다.
마지막으로 세번째 또한 긍정적인 부분과 부정적인 부분이 같이 있지만 문장에서 느껴지는 분위기는 부정적이므로 맞게 판단하였습니다.
전반적으로 감성분석 모델은 잘 구축이 되었다고 판단했습니다.
다음은 키워드 추출 모델인데 키워드 추출 모델의 경우 문장을 키워드 단위로 쪼개고 쪼개진 토큰들을 임베딩모델을 통해 임베딩하여 수치화했습니다. 임베딩된 키워드들은 전체 문장과 키워드 단위로 분리된 벡터 사이의 거리를 이용하여 코사인유사도를 계산했습니다. 원래 문장 벡터와 키워드의 벡터가 유사할수록 전체 문장을 잘 표현하는 단어라고 할 수 있습니다. 계산결과에서 가장 유사한 순서대로 5개의 키워드만 추출했습니다
4. 실험 결과 및 결론
다음은 전체 결과입니다. 파란색으로 강조된 evaluation이 감성분석을 통해 분류된 결과이고 Review는 리뷰 원문, review_count는 원문을 키워드단위로 쪼갰을 때 전체 키워드입니다. 마지막으로 keyword가 전체 문장을 대표하는 키워드 5가지입니다.
직접 3600개의 데이터를 비교했을 때 감성분석결과는 예상보다 세세한 문장의 분위기까지 잘 잡아내서 매우 만족스러웠는데 키워드 추출 모델의 경우는 생각보다 정확도가 많이 떨어졌습니다.
이유를 세 가지 정도로 생각해봤는데,
첫번째는 키워드 추출과정입니다. 키워드를 추출하는 업무는 아무래도 문장이 어떻게 토큰화 되느냐가 중요합니다. 이번 프로젝트에서는 시간관계상 코버트에서 제공하는 토크나이저를 사용했는데 실험의 정확도를 위해서는 다른 토크나이저를 사용해서 비교해봐야 결과값을 제대로 판단할 수 있을 것 같습니다.
두번째는 주요 키워드 선정 방법입니다. 주요 키워드를 추출하는 방법으로 단순하게 코사인 유사도를 계산해서 거리가 가까운 순으로 주요 키워드를 선정했는데 다양한 방법으로 유사도를 확인하는 과정이 필요할 것 같습니다.
마지막 세번째는 모델 자체의 기능입니다.
최종 주요 키워드로 선정된 결과를 보면 제가 생각했던 것처럼 심플하게 주요 키워드가 선정되지 않았는데 모델에서 사람이 주요하다고 생각하는 키워드를 제대로 인식할 정도로 학습이 제대로 이루어지지 않은것이 아닌가 하는 의심을 해보게 되었습니다.
버트 모델은 기본적으로 버트에서 사전학습된 임베딩 능력을 가져오고 내가 원하는 업무에 맞도록 파인튜닝하는 과정을 거치게 됩니다. 키워드 추출 업무의 경우, 키워드를 주요하다고 판단할 만한 근거를 finetunning을 실시할 때 충분히 학습시켜주지 않아서 이런 결과가 나왔을 수도 있겠다는 생각이 들었습니다.
프로젝트를 마무리하며..
이번 섹션 프로젝트를 진행하며 가장 힘든 것은 절대적인 시간이 많이 부족해서 현실과 타협을 많이 해야했던 것이었습니다. 연구실 업무, 졸업 논문에 사소하게는 컴퓨터의 환경설정 문제까지 프로젝트 외의 다른 요소 때문에 시간을 뺏겨서 프로젝트를 기한 내에 끝내기 위해 처음 계획했던 것보다는 많은 실험을 하지 못했습니다. 그래도 기존에 PyTorch 라이브러리로 사용해봤던 BERT를 이번에는 익숙한 케라스로 구현하고 또 한글특화모델인 KOBERT를 사용해보면서 나름 모델에 대해 더 이해할 수 있었던 점은 좋았던 것 같습니다. 다음 프로젝트에는 이번 프로젝트에서 반드시 해보려고 했던 웹 스크래핑으로 실제로 데이터를 직접 수집해서 전처리부터 끝까지 진정한 의미의 End to End 프로젝트를 해보기로 결심하고 이번 프로젝트를 마무리합니다.