ChatGPT로 고객리뷰 분석하기
이야기 했던가? ChatGPT의 기반이 되는 GPT-3는 자연어처리의 거의 모든 태스크를 수행할 수 있다. 엄청난 모델 크기에 대량의 언어 데이터셋을 학습한 탓에 문서 요약이나 질의 응답, 번역, 감성분석 등 거의 모든 자연어처리 태스크에서 준수한 성능을 보인다. ChatGPT는 이 GPT-3의 언어 능력에 사람의 의도를 좀 더 잘 파악해서 대답할 수 있도록 지시-답변 데이터셋을 추가로 학습시킨 대화형 모델이다.
한편, 텍스트 데이터가 넘쳐나면서 고객 정보나 구매와 같은 정형화된 데이터 외에 고객들이 남긴 리뷰나 소셜 미디어 반응 등 비정형화된 텍스트 데이터를 활용하는 것 역시 중요해지고 있다. 이번 글에서는 ChatGPT를 활용해 고객 리뷰가 어떤 감정이나 의견을 담고 있는 지 감성분석을 하고 고객 리뷰에 대해 1차적인 제품 개선안을 작성하는 방법에 대해서도 알아보도록 하자.
감성분석이란 무엇이고 어떻게 활용할 수 있나
감성분석이란 신문 기사나 고객 리뷰 등이 우리 회사나 제품에 긍정적인지 부정적인지를 분석하는 방법 중에 하나로 텍스트에 나타난 사람들의 태도, 의견, 성향과 같은 주관적인 데이터를 분석하는 자연어처리 태스크이다.
내가 이전 모바일 게임 마케팅을 할 때는 이번에 출시한 제품에 대한 고객들의 생각이 어떤지 혹은 이번 캠페인에 대한 고객들의 인지도나 생각은 어떤지 알 수 있는 방법이 없어 설문조사 등의 방법을 고려하기도 했었다. 하지만 온라인에서 댓글이나 리뷰를 남기는 것이 점차 활발해지고 이런 글들이 다른 고객들의 구매에 다시 영향을 미치면서 고객 리뷰 데이터의 중요성은 양과 그 가치 측면에서 커지고 있다. 또한 이들을 분석할 수 있는 방법 역시 발전하고 있다.
우선적으로는 댓글이나 리뷰를 주기적으로 체크하고, 평점을 매기는 요소가 있다면 평점 별로 리뷰를 모아서 체크해 볼 수 있을 것이다. 분석해야 하는 데이터 양이 방대하거나 주기적으로 인사이트를 도출해야 하는 경우 머신러닝을 활용할 수도 있다.
머신러닝의 경우 토크나이저를 활용해 텍스트를 정수로 변환하거나 TF-IDF (Term Frequency - Inverse Document Frequency) 등의 방법으로 단어들을 수치 벡터로 변환시켜 의사결정나무나 랜덤 포레스트, 로지스틱 리그레션 등의 분류 알고리즘에 학습시켜 부정, 긍정을 예측하도록 하는 방법이 있다.
딥러닝의 경우 역시 텍스트를 토큰화해 LSTM이나 GRU과 같은 모델 혹은 BERT와 같은 PLM 모델에 학습시켜 긍정, 부정을 예측하도록 학습시킬 수 있는데, 머신러닝과 딥러닝을 비교해 보자면 아무래도 입력 데이터들의 관계까지 학습할 수 있는 딥러닝 예측 성능이 더 나을 것으로 예상된다.
ChatGPT를 활용한 감성분석
ChatGPT를 활용하면 이런 머신러닝, 딥러닝 모델을 별도로 학습시키지 않고도 감성 분석을 하는 것이 가능하다. 또한, 머신러닝이나 딥러닝 모델을 학습시키기 위해서는 해당 리뷰가 긍정 혹은 부정이라는 라벨(정답) 데이터가 있어야 하는데 ChatGPT로 하여금 1차적으로 해당 리뷰가 긍정인지, 부정인지 라벨을 생성하도록 하도록 하고 이를 사람이 검수하는 방법으로도 활용할 수 있다.
ChatGPT 웹 채팅창에서 고객 리뷰에 대한 감성분석을 진행해 보도록 하자. 데이터셋은 네이버 쇼핑에서 제품별 리뷰와 별점을 수집한 2020년 데이터를 활용했다. 참고로 한 가지 제품에 대한 리뷰가 아니라 쇼핑몰에서 여러가지 제품에 대한 후기를 크롤링한 데이터이고, 긍/부정으로 분류 하기 애매한 별점 (Rating) 3점에 해당하는 리뷰는 제외한 2만 개로 이뤄진 데이터셋이다.
프롬프트는 지난 번 가이드에서 이야기한 것처럼 원하는 출력물의 형태('긍정' 또는 '부정')를 명확하게 지정했고 ```, """, < >, { }와 같은 delimiter를 활용해 입력 데이터를 명확하게 구분하도록 했다. 프롬프트에 고객 리뷰 샘플을 넣으면 대답이 긍정과 부정 둘 중 하나로 대답하는 것을 볼 수 있다.
그렇다면 한 꺼번에 5개 리뷰에 대한 판별을 요청해보자. 역시 각 리뷰에 대해 고객의 감정이 긍정인지 부정인지 결과를 출력할 수 있다.
각 리뷰에 대한 고객의 감정이 판단이 되었다면 구체적으로 어떤 긍정 단어, 부정의 단어들이 언급되고 있는 지 추출해 보도록 하자. 체크해야 하는 리뷰가 많거나 긴 리뷰를 다 볼 수 없을 때 장단점을 빠르게 파악할 수 있는 방법이고, 여기서 추출한 긍, 부정 단어들을 가공해 워드 클라우드 등으로 시각화할 수도 있을 것이다.
리뷰에 대한 감정분석을 하고 긍정, 부정의 단어들을 추출했다면 제품 리뷰를 바탕으로 개선안을 작성해 보자. ChatGPT가 가끔 엉뚱한 말을 하기도 하지만 1차 적인 개선에 대한 아이디어를 정리하기에는 유용하다고 생각한다.
여기까지는 ChatGPT의 웹 대화창에서 리뷰를 하나씩 혹은 몇 개씩 분석했지만 입력창에 한 번에 입력할 수 있는 데이터의 길이에는 제한이 있고 수동으로 나눠 한 번씩 진행하는 것도 한계가 있다. 가능하다면 ChatGPT API와 파이썬을 활용해 대량의 데이터를 한 번에 처리하도록 해보자.
Open AI는 API를 사용할 수 있는 파이썬 예시문을 잘 제공하는 데 이를 활용해 그대로 원하는 결과물을 얻기 위한 프롬프트를 전달하고 for 문을 이용해 데이터 샘플을 하나씩 처리한 결과를 받아 엑셀파일로 저장하도록 해보자.
ChatGPT API를 사용해 각 리뷰에 대한 긍정 또는 부정의 대답을 하나씩 생성하는 경우 하나의 데이터 샘플당 1~2초가 걸렸다. 각 리뷰에 대해 개선안을 작성하는 경우는 샘플당 약 10초 정도의 시간이 걸린다. 2만 개의 데이터셋이고 1초씩 걸리는 태스크의 경우 2만 *1초=2만초=5시간이 걸리고, 10초가 걸린다면 50시간으로 시간이 상당히 많이 걸려 윗부분 200개의 데이터로만 진행하기로 했다.
또한, for 문을 돌리는 동안 ChatGPT API에 오류가 생기는 경우가 많아서 분석이 진행되다 여러가지 에러로 분석이 중단되는 경우가 많았다. ChatGPT 유료 버전을 사용하면 좀 덜 끊길까? 무료 버전이니 오류가 꽤 많이 뜬다.. 특히 사용자가 많이 몰리는 시간대 같은 경우는 런타임 에러나 서비스가 현재 Unavailable하다는 오류 메시지가 많이 뜬다. 결국 주요 오류 유형이 발생했을 때 30초 있다가 다시 시도하라는 소스코드를 찾아서 추가해 이를 해결했다. (더 알아보기)
ChatGPT API와 파이썬으로 감성분석과 관련 키워드 분석, 그리고 제품 리뷰에 대한 1차 개선안까지 작성한 코드는 다음 코랩 파일에서 확인할 수 있다.
ChatGPT로 텍스트 분석을 하는 경우 장점은 명확하다. 요약이나 분류는 물론 글쓰기 등 여러가지 태스크를 수행할 수 있고 정확도도 괜찮다는 점이다. 머신러닝이나 딥러닝의 경우 감성분석의 정확도가 주로 70~90% 정도라면, ChatGPT의 경우 별점 4~5점을 긍정, 1~2점을 부정으로 보고 점수를 매겨 본 바 정확도가 90% 정도였다.
단점으로는 대량으로 데이터를 처리하기 위해 ChatGPT API를 이용하는 경우 오류를 처리해야 한다는 것이고, 생성에 시간이 많이 걸릴 수도 있다는 점이다. 머신러닝의 경우 2만 개의 데이터셋이라면 학습은 몇 시간, 그리고 학습된 모델을 바탕으로 200 개의 데이터를 추론하는 경우 몇 분안에 끝나겠지만 ChatGPT의 경우 별도의 모델 학습시간은 필요없지만 생성하고자 하는 답변이 길어지면 길어질수록 시간이 무지막지하게 걸릴 수도 있다는 점이다.
예시로 사용한 데이터셋은 여러가지 제품에 대한 리뷰를 모아놓은 것이지만 특정 제품군 또는 상품번호에 대한 고객 리뷰를 수백 개씩 한 꺼번에 주기적으로 분석하기에는 좋은 툴이 될 수 있을 것이라는 생각이다.
마테크와 마케팅 데이터 분석에 대해 이야기 합니다. |
* 슈퍼브 블로그의 외부 기고 콘텐츠는 외부 전문가가 작성한 글로 운영 가이드라인에 따라 작성됩니다. 슈퍼브 블로그에서는 독자분들이 AI에 대한 소식을 더 쉽고 간편하게 이해하실 수 있도록 유용한 팁과 정보를 제공하고 있습니다.