GS리테일 DX 블로그

Digital Transformation으로 고객 생활 가치의 이노베이션을 꿈꾸는 IT 사람들의 이야기

Data&AI

Language Model을 활용한 상품평 감성분석

강철발톱 2021. 12. 29. 09:33

 코로나19 이후 비대면 소비 문화가 우리 삶 속으로 깊게 자리매김하고 있는 요즘, 소비자들은 오늘도 온라인 공간에 상품평을 통해 상품에 대한 자신의 생각과 감정을 표현합니다. GS Retail에서는 감성분석을 중심으로 한 마케팅 분야의 연구도 활발하게 이루어지고 있는데, 이는 기업에서 소비자로 일방적으로 제공되던 One-way marketing 방식을 탈피해 잠재된 소비자 구매 동향을 파악하고 시장 트렌드를 캐치하는 데 활용할 수 있기 때문입니다.

 

 기존 감성분석 분야에서 전통적으로 활용되던 확률적 방법론을 기반으로 한 사전 기반 모델의 핵심 아이디어는 '긍정적인 상품평 집합에서 자주 쓰인 단어는 긍정 범주에 속할 가능성이 높다.'라는 것입니다. 그러나 이 모델은 초기 모델 구축 시 사람의 노동력에 기대어 긍정, 부정 말뭉치 사전을 구축하고, 신조어가 파생될 때마다 매번 갱신을 필요로 하는 한계점을 지니고 있습니다.

 

 이 글에서는 기존 모델의 한계점을 극복하고 정확도 개선과 효율적 운영에 기여할 수 있는 감성분석 모델을 구축한 경험을 소개합니다.

 

기존 사전 기반 감성분석의 특징 

 사전기반 방식은 미리 각 단어에 대한 감성사전을 구축하여 주어진 텍스트의 sentiment score를 계산한다. 아래는 기존에 활용 중이었던 sentiment score 수식이다.

 

sentiment score = 긍정단어수 - 부정단어수

 

 sentiment score가 0보다 크면 긍정, 0보다 작으면 부정, 0일 경우 중립으로 분류하는 방식으로 다음 그림은 그 예시를 표현한 그림이다.

그림 1. 기존 사전 기반 방식의 Rule

2

 위와 같은 구조는 비유한다면 체를 거르는 방식과 유사하다고 할 수 있는데, 상품평의 어떤 단어가 감성분석에 영향을 주었는지 직관적으로 알 수 있다는 장점이 있지만, 사전에 단어를 추가할 때마다 기존에 잘 분류되고 있던 상품평이 잘못 분류되는 등 성능 측면에서의 불안전성을 내포하고 있다. 감성사전의 단어를 촘촘하고 완벽하게 구축한다면 어떤 표현에도 정확한 sentiment score를 계산할 수 있지 않을까라는 의문이 들 수도 있지만, 현실적으로 어려움이 있을 뿐만 아니라 자연어 자체의 표현 특성으로 인해 크게 다음과 같은 5가지 문제점을 가지고 있다.

 

구분 부분 식별 도메인 의존성 반어 간접적인 표현 비교
설명 한 문장 안에 긍/부정 표현이 모두 섞여 있는 경우 같은 단어라도 다른 의미를 지닐 수 있다 어조에 따라 긍/부정이 나뉠 경우 감정을 직접 드러내지 않았으나 표현된 경우 비교 시 텍스트 만으로 감성의 차이를 구별할 수 없다.
예시 사과가 색깔은 좋은데, 맛이 없다. 이 책은 졸리다.
(지루하다)
이 침대는 졸리다.
(편안하다)
잘 한다.
잘~한다.
이 사과는 별점 다섯개 드립니다. A는 B보다 낫다.
B는 A보다 낫다.

 

 첫째, 부분 식별 문제점이다. "사과가 색깔은 좋은데, 맛이 없다." 라는 문장처럼 한 문장이 긍정과 부정의 의미를 모두 가지고 있는 경우 인간과 달리 사전 기반 모델은 쉽게 구분하지 못한다.

 두번째는 도메인 의존성이다. 위의 예시처럼 "이 책은 졸리다.(지루하다)", "이 침대는 졸리다(편안하다)" 의 '졸리다'는 같은 표현이지만 내포하고 있는 의미는 다르다. 이처럼 중의적인 표현이 많은 언어는 감성분석의 어려움을 가중시킨다. 특히 한국어의 경우는 다의어에 의한 중의성, 동음어에 의한 중의성, 수식어에 의한 중의성, 접속어에 의한 중의성 등 많은 의미 해석의 혼동을 야기한다.

 세 번째는 반어이다. "받는데 일주일 걸렸습니다. 참 빨리도 오시네요" 이 문장은 '배송이 매우 느리다.' 라는 문장의 반어법으로 사용될 수 있다. 이처럼 반어는 표면에 나타난 의미와 숨은 의미가 서로 상반되도록 함으로써 의미를 강조하거나 달리한다. 이는 감성사전에 등록된 극성(긍정,부정)을 가지고 해석하는 사전 기반 모델에서는 쉽게 분류할 수 없다.

 네 번째는 간접적인 표현이다. "이 사과는 별점 다섯개 드립니다."라는 문장은 감정이 직접적으로 드러나지 않으나 별점이라는 특성을 알고 있다면 화자가 사과에 대해 긍정적인 평가를 내렸다는 것을 쉽게 알 수 있다. 이렇듯 간접적인 표현은 직관적인 텍스트 분석을 어렵게 한다.

 마지막으로는 비교 처리가 있다. 사전 기반 모델은 같은 단어로 이루어진 문장의 차이를 구별할 수 없는 한계점이 있다. 또한 '그럭저럭/그냥저냥/그냥그래요/쏘쏘'처럼 비슷한 의미를 가진 단어들을 어떻게 구분하여 사용할 것인지 등 인간이 풀기에도 쉽지 않은 문제들이 다양하게 산재하여 있다.

 

문제 해결 방향

고려 사항

  • 기존 사전 기반의 감성 분류 모델보다 높은 성능을 기대할 수 있는가
  • 추후 운영환경의 제한된 리소스 안에서도 실제 활용이 가능한가
  • 단기간 내 샘플 테스트 결과까지 확인하여, 모델 고도화에 집중할 수 있는가

 

 여러가지 자료 조사와 테스트를 통해 결론적으로 Huggingface의 한국어로 사전학습된 ELECTRA 모델을 fine-tuning하여 문제 상황을 해결할 수 있다고 판단했다.

 

ELECTRA 란

그림 2. 주요 Language Model

 ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)는 2020년 3월에 Google에서 발표한 사전학습모델로 자연어 이해 능력 평가 벤치마크 데이터셋 GLUE (General Language Understanding Evaluation benchmark) 의 감성분석 task에서 현재 State-of-the-art 수준의 성능(96.9)을 보이며, 해결하고자 하는 문제인 상품평 감성 분류에도 효과적으로 적용할 수 있을 것이라고 보았다.

 

그림 3. ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators

 위 그림은 ELECTRA의 구조의 예시를 간단하게 표현한 것으로 Generator는 'the chef cooked the meal'이라는 문장에서 일부 단어(the, cooked)를 마스킹한 , 그 위치의 단어를 생성한다. Discriminator 는 Generator가 생성한 새로운 문장을 Input으로 받아서, 각 단어가 원래 Input과 동일한 것인지 검증함으써 학습이 진행된다. GAN(Generative Adversarial Network)의 Generator/Discriminator 구조를 착안한 것으로 주어진 문장 속 모든 단어를 검증하기 때문에, Masked Words(전체 데이터 중 15%)만 검증하던 BERT에 비해 보다 효과적인 학습이 가능한 모델이다.

 논문에서는 Pre-training task와 Fine-tuning task 사이의 similarity의 중요성을 강조하면서 두 가지 task가 다를 경우 Fine-tunning 과정에서 전체 레이어의 Pre-trained weight도 함께 업데이트 하는 것이 효과적이라고 하였다. 같은 구조의 모델이라도 사전학습 시 어떤 데이터를 쓰냐에 따라 downstream task의 성능이 크게 차이가 나는 부분은 이미 많은 사례를 통해 검증된 부분이다. 따라서 영어 위주로 사전학습된 ELECTRA 모델을 그대로 사용하기보다는 한국어 데이터로 사전학습된 언어모델을 사용한다면 상품평 감성 분석에 훨씬 더 좋은 성능을 얻을 수 있을 것으로 기대헀다. 이를 위해 아래에서 후술할 Huggingface transformers 라이브러리를 활용하게 되었다.

 

Huggingface 란

그림 4. Huggingface

 Huggingface는 자연어 기술의 민주화를 목적으로 설립된 AI 스타트업으로 NLP 분야에서 유명한 transformers 라는 라이브러리로 많이 알려져 있다. 트랜스포머 라이브러리는 High-level 모듈화를 통해 생산성을 증대시킨 것은 물론 Pytorch, Tensorflow, Keras 등 딥러닝 프레임워크와 모두 호환이 된다는 점 등 여러가지 장점이 있다. 이 중에서도 huggingface 를 사용하게 된 가장 큰 이유는 HuggingFace 커뮤니티에는 개인들이 각자 학습한 언어모델을 공유하는 Model Hub 라는 모델 공유 저장소가 있는데, 아래 예시와 같이 python에서 "계정/모델저장소명" 형태로 tokenizer와 model을 손쉽게 로드하여 활용할 수 있다.

from transformers import BertTokenizerFast, BertModel

# Load Tokenizer
tokenizer_bert = BertTokenizerFast.from_pretrained("kykim/bert-kor-base")

# Load Model 
model_bert = BertModel.from_pretrained("kykim/bert-kor-base")

 

 Fine-tuning task와 유사한 Language model의 weight를 활용하기 위해 Model Hub의 이커머스 상품평 데이터로 사전학습된 모델을 활용 가능여부 문의 후에 사용하게 되었다. 아래 데이터로 사전학습되었으며 상세 데이터 및 학습 방법은 여기에서 참고할 수 있다.

  - 국내 주요 커머스 리뷰 1억개 + 블로그 형 웹사이트 2000만개 (75GB)
  - 모두의 말뭉치 (18GB)
  - 위키피디아와 나무위키 (6GB)

 

Fine Tunning

 위에서 소개한 한국어 사전학습 ELECTRA 모델(이하 KoELECTRA)을 실제 해결하고자 하는 downstream task(상품평 감성 분류 문제) 에 맞게 fine tunning하기 위해 문제(상품평)와 정답(감성)으로 구성된 annotation 데이터 셋이 필요하였다. 상품평이 가장 많이 달리는 카테고리인 식품, 의류, 이미용과 나머지 카테고리에서 층화임의추출을 진행하였고, 1~5점 사이의 별점 간 균등한 수의 데이터를 샘플링 하였다. 실제 등록되는 상품평 중 대부분이 4~5점의 별점이지만 학습용 데이터 샘플링 시 균등한 비율로 뽑았던 이유는 별점이 높은 상품평만 잘 분류하는 모델이 아니라 별점이 낮은 상품평도 잘 분류되게 하는 모델을 만드는 것이 목적이었기 때문이다. 결과적으로는 anotation 작업을 통해 긍/부정간 클래스 불균형 문제를 해결할만한 약 25만건의 데이터 셋을 확보함으로써 높은 정확도의 감성 분류 모델을 만드는 기반이 될 수 있었다.

 ELECTRA의 classification layer 로는 Huggingface의 ElectraForSequenceClassification을 사용하였는데, ELECTRA Discriminator 의 마지막 layer에서 [CLS] token (문장의 함축된 의미를 담고 있는 임베딩) 이 아래 레이어를 거치며 학습되는 구조이다.

(classifier): ElectraClassificationHead(
  (dense): Linear(in_features=256, out_features=256, bias=True)     
  (dropout): Dropout(p=0.1, inplace=False)     
  (out_proj): Linear(in_features=256, out_features=2, bias=True) 
)

 

 학습 GPU 환경에 따른 학습시간은 10epoch 기준 대략 K80: 30시간, P100: 2시간, V100: 1시간 정도로 GPU 연산 성능에 따라 큰 차이를 보이는 것을 확인할 수 있었으며, 추후 huggingface에서 지원하는 AMP(Automatic Mixed Precision) 기능을 활용하면 보다 효율적인 학습을 진행할 수 있을 것으로 생각된다.

 

결과

 한국어 이커머스 상품평 데이터로 사전학습된 ELECTRA, BERT, ALBERT,  KcBERT 등 여러가지 트랜스포머 기반의 모델로 25,000건의 상품평으로 테스트를 진행하였다. Accuracy 기준 ELECTRA가 가장 좋은 성능을 보였으며, 사전 기반 모델 대비 ERR(Error Reduction Rate) 측면에서도 각각 62.6%, 37.0% 로 유의미한 정확도 개선이 있었다.

 

분류 범주 사전 기반 PLM(KoELECTRA) ERR
긍정 / 부정 90.1% 96.3% 62.6%
긍정 / 부정 / 중립 78.6% 86.9% 37.0%

 

중립이 포함된 분류의 경우 긍부정 이진분류의 경우보다 정확도가 다소 떨어진 것을 볼 수 있는데, 분류 범주 간 데이터 불균형 문제(전체 25만건 중 약 7%(17,000건)이 중립)와 함께 적은 수의 중립 데이터로 인해 OOV(Out-Of Vocabulary) 문제가 함께 발생했을 것이라고 판단된다. 

 아래 예시는 실제 상품평 중 기존 감성사전 기준에 따라 잘못 분류되던 상품평이 Language Model에서는 제대로 분류되는 케이스를 표현한 것이다. 문장의 앞뒤 문맥을 파악하여 답을 찾도록 학습되었기 때문에 같은 감성단어라도 주변 단어들과의 관계에 따라 문장의 의미를 다르게 인식하는 Language Model의 특징을 확인할 수 있다.

상품평 예시 정답 사전 기반 PLM(KoELECTRA)
다시 구매하게 되네요~~ 안쓰면 왠지 불안해서 ㅋㅋ 긍정 부정 - 불안하다(-) 긍정
부모님께 매번 보내드리는데 다른건 싫다하시고 이것만 드시네요 긍정 부정 - 싫다(-) 긍정
어쩐지 싸더라..이런걸 팔다니 부정 긍정 - 싸다(+) 부정

 

 내부적으로는 상품평 감성분류 정확도를 개선한 뒤 상품별 주요 키워드 추출 등에 활용한다면, 고객들이 각 상품별로 어떤 부분에 대해 좋게 생각하고 어떤 부분을 나쁘게 생각하는지를 좀 더 빠르고 효율적으로 파악할 수 있어 비즈니스에 유의미한 인사이트를 찾는 기반으로 활용할 수 있지 않을까하는 기대가 있다.

 

향후 계획

 추후에는 테스트 결과로 확인한 문제를 보완하여 모델을 조금 더 고도화 함과 동시에 AWS Sagemaker를 도입하여 MLOps 환경에서 비즈니스 담당자들이 모델의 효용성을 검증할 수 있도록 시스템화 하는 부분을 계획하고 있다. 

 또한 아래와 같이 클래스 분류 시 불확실성이 높은, 즉 Classifier의 Decision boundary 근처에 위치한 모호한 텍스트를 사람이 라벨링하게 하여 모델 재학습에 사용하는 Active Learning 개념을 도입하여 지속적인 고도화를 가능하게 하는 방안도 염두에 두고 있다.

그림 5. Active Learning

 

마치며

 지금까지 Language Model을 활용한 상품평 감성분류 모델을 효과적으로 구축하려는 시도에 대해 살펴보았다. 예전에는 자연어 처리 분야에서 어려운 난제 중에 하나로 꼽혔던 Sentiment Analysis가 NLP 모델 알고리즘과 관련 라이브러리가 발전함에 따라 이제는 데이터만 있으면 누구나 어렵지 않게 해결할 수 있는 영역으로 전환되는 걸 보며, 새삼스럽게 세상이 좋아졌음을 느낀다. 비단 자연어처리 뿐만 아니라 이미지, 음성 등 데이터를 다루는 모든 분야에서 이 부분은 거스를 수 없는 시대의 큰 흐름이라고 생각되며, 이에 따라 데이터 분석가의 역할과 책임이 변화되고 그에 따른 고민도 계속될 것으로 보인다.

 

참고  출처

 

 


황태오 Eddy | 데이터플랫폼본부 > AI부문 > 데이터사이언스팀

NLP research / 텍스트 분석 업무를 담당하고 있습니다.

데이터로 문제를 해결하는 것을 좋아하며 협업을 통한 시너지를 추구합니다.