텍스트 감성(Sentiment) 분석은 우리와 밀접하다. 온라인 쇼핑몰 혹은 배달 플랫폼에 달린 댓글들이 대표적이다. 상품을 받은 고객이 제품에 만족하고 리뷰를 달았는지, 아니면 울분이 차올라 불만을 쏟아냈는지에 대한 분석이다. 부정적인 리뷰의 비율이 높다면 판매자는 필히 개선을 해야 할 것이다. 온라인 포털 뉴스 기사에 달린 댓글이 선플인지 악플인지 구분하는 것도 마찬가지다.
리뷰나 댓글이 손에 꼽을 정도라면 사람이 일일이 읽어보고 분석하는 것이 가능하겠으나, 그 개수가 수백~수천 개에 달한다면 쉽지 않은 일이다. 게다가 감성분석이 필요한 상품이나 뉴스 기사는 수도 없이 많을 것이고, 이걸 사람이 일일이 하는 것은 불가능에 가깝다.
그래서 적절한 프로그래밍(Python, R 등)을 통한 자동화가 필요하다. 최근엔 리뷰나 댓글의 감성을 인공지능(AI)이 대량으로 분석해주고 있다. 쉽게 말하면, 파이썬 등은 분석 시스템의 뼈대를 만드는 것이고, 그 뼈대 안에 들어가는 알맹이(분석 모델)는 AI라는 것이다. 이렇게 하면 수천 개 정도의 데이터는 수분~수십 분 정도 만에 분석할 수 있다.
이때 알맹이를 뭘 쓸 것이냐가 관건이다.
1. KoELECTRA 등 언어모델
KoELECTRA는 한국어에 최적화된 AI 언어모델로, 컴퓨터가 한국어 글의 맥락을 더 잘 이해하게 도와준다. 문장 속 단어들이 이어질 때 '다음에 어떤 단어가 오는 게 제일 자연스러울지'를 확률로 예측한다. KoELECTRA는 문장에 일부러 '틀린 단어'를 넣고 "이게 맞아? 틀려?"라는 식으로 훈련해서 똑똑해진 모델이다. 누구든지 Hugging Face 등에서 무료로 다운한 뒤 파이썬으로 프로그래밍할 수 있다.
다만 보다 높은 정확성을 내고 싶다면, 해당 주제에 특화시키는 미세조정(Fine-Tunning) 과정이 필요하다. 나 같은 경우엔 언론 기사 제목을 감성 분석하기 위해, 일반 언론 기사 천여건을 수집한 뒤 직접 긍정/중립/부정으로 감성을 분류해 일종의 '샘플'을 만들었다. 그다음 이 샘플을 KoELECTRA에 학습을 시키는 거다. 그러면 KoELECTRA는 언론 기사 제목에 대해서도 상당한 신뢰도로 감성을 정확히 짚어낼 수 있게 된다.
(물론 KoELECTRA 학습용 샘플을 만들 때에도 여러 명이 검토를 해야 하는 등 꽤나 공을 들여 신뢰도를 확보해야 하지만, 일단 한 번 미세조정을 해 놓으면 그다음부터는 수천 건이든 수만 건이든 언어모델이 알아서 분석할 수 있다.)
2. 생성형 LLM 이용
최근에는 KoELECTRA 등을 이용하는 것보다, 챗GPT나 Gemini 등 생성형 거대언어모델(LLM)을 감성분석에 이용하는 경우가 많다. 그렇다고 우리가 일상에서 쓰는 챗봇 형태의 챗GPT에 분석 데이터를 넣고 돌리는 식은 아니다. 이 경우 한꺼번에 많은 데이터가 들어가거나, 트래픽이 몰릴 경우엔 LLM이 엉뚱한 대답을 내놓는 등 답변의 질을 담보할 수가 없다.
이때도 프로그래밍 능력이 필요하다. 파이썬으로 챗GPT나 Gemini를 API로 끌어와서(종량제) 데이터를 하나하나 분석하는 툴을 만들어야 한다. 챗GPT나 Gemini에서 'API 키'를 발급해 파이썬 코드에 넣어놓고, 분석할 데이터를 불러온 뒤, 그걸 어떤 식으로 분석할지 프롬프트를 넣어준 뒤 돌리면 된다.
여기서 프롬프트란 우리가 흔히 챗봇형태의 LLM에 넣는 프롬프트와 같은 것을 말한다. 하지만 분석 결과에 일관성을 내기 위해선 프롬프트를 정교하게 만들어야 한다. 즉, 긍정/중립/부정은 각각 어떤 경우에 해당한다는 일종의 설명서를 만들어주는 것이다. 정확성과 효율을 모두 잡을 수 있는 프롬프트에 대한 연구가 활발히 이뤄지고 있다.
이때도 해당 프롬프트가 제대로 된 결과를 내는지에 대한 검증이 미리 이뤄져야 한다. 데이터의 10%를 추출한 뒤 인간이 분석한 결과와 LLM이 분석한 결과를 비교해 보는 것이다. 이때 일치율이 70% 이상 정도라면 쓸만한 정도다. 그 밑이라면 프롬프트를 수정해야 한다.