ChatGPT를 활용한 텍스트 감정 분석
안녕하세요, 넷마블 총무실 총무운영팀 신대형입니다.
제 소속이 넷마블 기술 블로그에 이미 글을 올리신 기존 분들과 조금 다르게 느껴지실지 모르겠습니다. 그런데, 그 느낌 맞습니다. 총무운영팀에서는 넷마블에 계신 개발자 이외 모든 직원들이 회사 생활하시는데 불편함이 없으시도록 여러 요청 사항을 받고 지원하는 일을 하고 있습니다. 이렇게 함께 할 수 있어 저도 기분이 묘합니다.
출근 셔틀버스와 피트니스
넷마블에는 2022년 7월부터 출근 셔틀버스가 움직이고 있습니다. 멀리 가는 노선은 아니지만, 구로디지털단지역에서 회사에 오가는 A노선과 가산디지털단지역에서 회사에 오가는 B노선이 있죠. 주말과 공휴일은 제외하고 출근 시간대인 오전 8시부터 오전 10시 반 사이에 운행 중입니다.
넷마블에는 피트니스도 있습니다. 2022년 9월 프리오픈을 시작으로 이제 많은 분이 이용하고 계십니다., 프리오픈부터 약 1.5개월 정도 이용 추이를 보면서 10월 말부터는 상시 등록제로 시행 중이죠. 아침, 점심, 저녁 다들 각자 편한 시각에 맞춰서 운동 가시는 분들을 보면, 괜히 뿌듯함을 느끼기도 합니다.
이 두 서비스를 처음 사내 게시판에 공지한 날, 여러 댓글이 달렸었습니다. 댓글 반응이 이렇게 많이 생기는 게시글 자체가 자주 없기도 하지만, 마침 이 두 공지에는 많은 글이 달려서 재밌기도 했습니다.
별점 없는 댓글에 점수를 줄 수 있을까
많은 댓글을 보면서 처음부터 만족도 조사라거나 평점 설문이었다면, 특정 점수로 통계를 내볼 수 있었지 않았을까 싶은 아쉬움이 불현듯 들었습니다. 게시글에 달린 댓글 개수만으로도 반응을 엿볼 수 있긴 하지만, 댓글 사이사이에 참고해야 할 의견도 섞여 있고 단순히 좋고 나쁨만으로 표현하기는 부족해 보였습니다.
그렇다고 댓글 하나하나에 기준이 모호한 평가 점수를 매기기엔 근거도 부족하고, 사람마다 다른 점수를 줄 수도 있는 만큼 바로미터로 쓰기 좋은 기준점이 있으면 좋겠다 싶었습니다.
ChatGPT를 써보자
그러던 중, ChatGPT를 써보자는 생각이 떠올랐습니다. 역할극을 할 수 있다고 했으니, ChatGPT가 댓글을 남긴 직원 역할을 맡으면 되겠다 싶었습니다. 저는 이제 ChatGPT에서 댓글을 하나씩 전해주면, 그 댓글은 만족도가 돼서 돌아오기를 기대하며 ChatGPT를 열었습니다.
댓글에 들어가 있는 이모지도 잘 인식하고 있었기에, 이모지만 있는 댓글도 같이 넣어보기로 했습니다.
ChatGPT 프롬프트
맥락에 맞춰서 한 구절씩 주고받으며, 문장을 넣으면 점수로 딱 대답하는 결과를 보고 나니 묶음 단위로 한 번에 답을 얻을 수 있는 프롬프트를 완성하면 추후에 재사용할 때에도 도움 될 것 같았습니다.
허들1. 리밋
이리저리 바꿔가며, 짧은 시간 내에 여러 번 질문을 반복하다 보니 리밋에도 걸리더군요.
리밋에 걸리면 별수 없었습니다. 1시간을 기다리며, 원래 해야 하는 다른 일을 하다가 돌아와서 다시 찾기를 반복해야 했습니다.
허들2. 프롬프트 순서
대화창 한 개 안에서 앞 내용을 계속 이어가며 지시사항을 넣을 수 있다는 장점이 단점이 되기도 했습니다. 아직 댓글을 입력하지 않았는데, 스스로 아무 댓글이나 무작위로 생성해서 점수를 매기는 경우가 허다했습니다. 입력한 댓글이 아닌, 이전에 입력했던 댓글을 다시 불러와 점수를 매기기도 하더군요. 정확히 딱 지금 입력한 이 프롬프트로 한 번에 답을 받는 것이 간편하진 않았습니다.
수 차례 리밋에 걸리기를 반복한 끝에, 적당한 프롬프트 구조와 순서를 찾았습니다. 가볍게 보자면, 부여할 역할과 상황 설명을 먼저 해준 뒤에 ChatGPT가 실행할 일이 무엇인지 나열해서 넣는 구조입니다. 이번 경험을 기반으로 앞으로도 긴 프롬프트를 써야 할 때 참고할 예정입니다.
허들3. 입력량과 출력량 제한
댓글까지 한 번에 넣어서 답을 얻을 수 있는 프롬프트를 완성했으니, 이제 댓글을 마구마구 넣어서 결과를 얻으면 되겠다 싶었습니다. 하지만 여기서도 또 허들이 하나 있더군요. 프롬프트 입력량과 출력 답변량 제한량이었습니다.
댓글 60개를 반복해서 넣어보니, 대략 20~25개 사이 어딘가에서 답변이 나오다가 중간에 멈춰버렸습니다. 예전에 썼던 기억에선 “계속 이야기해줘” 정도의 대화를 이어가면 나머지 답변도 얻을 수 있었지만, 이번 같은 케이스는 그걸 제대로 연결해주진 못했습니다.
그래서 적당히, 댓글을 20개씩 정도 나눠서 넣기로 했습니다. 다행히(?) 이번에는 댓글이 총 60여 개라 3회에 나눠서 실행하면 되니, 리밋에만 걸리지 않으면 쉽게 할 수 있는 양이기도 했으니까요.
ChatGPT 유료 버전과 GPT4 모드에서 확인한 결과, 입력은 한 번에 받아주지만 출력은 한 번에 뽑아주지 못했습니다.
프롬프트 완성
그렇게 수차례 시도 끝에, 적당히 쓸 수 있는 프롬프트를 찾았습니다.
// 출근 셔틀버스용 프롬프트 이제부터 출근 셔틀버스가 생기는 회사에서 일하는 직원 역할을 맡아줘. 셔틀버스 운행 시작 공지에 직원들이 남긴 댓글의 기대감을 숫자로 표현할 거야. 기대감은 0에서 10점까지 정수로 남겨야 하고, 점수가 높을수록 기대감이 높아. 댓글은 내가 입력할 거고, 그 댓글이 표현하는 기대감이 몇 점인지 알려줘. 각 한 줄이 댓글 하나씩이야. 댓글 여러 개를 한 번에 알려줄 거야. 결과는 표로 정리해서 보여줘. [댓글1] [댓글2] [댓글3] …
// 피트니스용 프롬프트 이제부터 피트니스장이 생기는 회사에서 일하는 직원 역할을 맡아줘. 피트니스장 운영 시작 공지에 직원들이 남긴 댓글의 기대감을 숫자로 표현할 거야. 기대감은 0에서 10점까지 정수로 남겨야 하고, 점수가 높을수록 기대감이 높아. 댓글은 내가 입력할 거고, 그 댓글이 표현하는 기대감이 몇 점인지 알려줘. 각 한 줄이 댓글 하나씩이야. 댓글 여러 개를 한 번에 알려줄 거야. 결과는 표로 정리해서 보여줘. [댓글1] [댓글2] [댓글3] …
같은 댓글을 3번 평가하는 것까지 한 번에 처리하도록 시도도 해봤습니다만, 거기서부터는 다시 출력량 문제가 생기기 시작해서 멈추기로 했습니다.
다만, 테스트하면서 알게 된 새로운 팁은 질문을 할 때마다 기대감 점수가 다르게 나온다는 것이었습니다. 비슷한 점수 대역 안에서 움직이지만 매번 다른 점수가 나오므로, 1회만 점수를 받기보다는 3회 정도 점수를 받아서 평균값을 쓰기로 했습니다.
댓글을 점수로 교체
대략 2묶음으로 나눠서 넣고 기대감 점수로 모두 바꿨습니다. 출근 셔틀버스는 ‘7.44’점, 피트니스는 ‘7.42’점이 나왔네요. 사이사이에 부정확하다 싶은 점수도 몇몇 보여서, 편차를 뽑아보기로 했습니다. 편차의 전체 평균은 ‘0.48’이었으니, 3회차 모두 비슷한 점수가 나오긴 했다고 볼 수 있을 것 같습니다.
편차가 큰 순서로 정렬하고 보니, 부정확하다 싶은 점수가 나온 댓글의 특징을 볼 수 있었습니다. 모든 상황에서 쓸 수 있는 감탄사, 무슨 뜻인지 저도 모르겠다 싶은 글, 이모지만 들어가 있는 글, 형상문자로 표현된 글 등이었습니다.
댓글 | 1회 | 2회 | 3회 | 편차 |
---|---|---|---|---|
와캬퍄 | 2 | 0 | 5 | 2.05 |
o( ̄▽ ̄)ブ | 5 | 2 | 5 | 1.41 |
Be Macho | 6 | 3 | 6 | 1.41 |
무더운 여름날, 땀흘리며 오르막길을 걷지 않는 게 얼마나 행복한지를 다시금 느꼈습니다. 퇴근버스가 생기더라도 퇴근 때는 선선하니 건강을 위해서라도 걸어야겠어요. | 7 | 5 | 4 | 1.25 |
🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌 | 8 | 10 | 10 | 0.94 |
👍👍👍👍👍 | 5 | 7 | 5 | 0.94 |
감사합니다!!!!!!!!!!!!!!🧡 | 7 | 9 | 9 | 0.94 |
WoW~~~ | 8 | 6 | 6 | 0.94 |
👍👍👍👍👍 | 10 | 8 | 8 | 0.94 |
9월…19일…(메모메모)…… | 7 | 7 | 5 | 0.94 |
드디어 | 8 | 6 | 8 | 0.94 |
1PT 받고 싶은데 좋은 선생님들 많으면 좋겠네요! | 7 | 5 | 7 | 0.94 |
드디어 드디어!!! | 9 | 7 | 9 | 0.94 |
제발제발프리오픈 당첨되게해주세여 | 8 | 6 | 8 | 0.94 |
와 제발 프리 오픈 제발!!!!!!!!!!!! | 9 | 7 | 9 | 0.94 |
프리오픈 당첨되게해주세요~ | 8 | 6 | 8 | 0.94 |
어설프고 부정확할 수 있지만 써볼 만하다
이번엔 10점 만점으로 표현했지만, 같은 프롬프트 패턴을 활용하면 5점 지표로도 바꿀 수 있으니, 점수 자체를 어떻게 세분화할지는 사실 그리 큰 문제는 아닌 것 같습니다. 이제 이 점수를 얻은 후에 앞으로 어떻게 활용할지가 실질적으로 제 앞에 남은 과제가 아닐까 합니다.
평소에 만족도 설문을 요청하는 일이 종종 있습니다. 보통 그 설문에서는 만족도를 점수로 받고 있기 때문에, 설문 결과 자체를 숫자로 표현하기가 그리 어렵지 않습니다. 그런데 실질 반응이나 기대감 등은 그런 점수가 없는 일반 평문의 글에서 더 많이 볼 수 있는 만큼, 한 번쯤은 이런 정량화 방식이 필요하지 않을까 싶습니다.
텍스트 감정 분석
위 이야기를 개발 부서에 계신 동료분께 이야기를 드렸더니, 아래 링크 글을 소개해주시더군요. 아래 링크 내용을 요약하면, “텍스트 감정 분석을 위한 데이터 레이블링이 필요할 때 ChatGPT를 활용하면 적당한 결과를 얻을 수 있다”는 내용이었습니다.
앞으로 쓸 일이 얼마큼 생길진 모르겠지만, 단순한 질문과 답변이나 글 요약을 넘어 다른 방향으로 ChatGPT를 써볼 기회를 포착했다는 생각에 호기심이 더 자극되는 것 같습니다. 다른 사례가 생기면 그때 다시 또 넷마블 기술 블로그에 문을 두드려보겠습니다.
감사합니다.