brunch

You can make anything
by writing

C.S.Lewis

by Kay Feb 01. 2024

정성의견 분류&감성분석 시스템 개발 사례①

숲과 같은 텍스트 데이터를 한눈에 살펴볼 수는 없을까

이전 포스팅을 통해 정리한 교육만족도 설문에 대한 객관식 평가와 서술형 주관식 평가 사이에 관계가 있다는 내용은 비록 석사 졸업을 위한 분석이긴 했으나 사내 데이터를 제공받아 활용한 것이고, 리더들이 교육 프로그램에 대한 하나의 관리지표로서 많은 관심을 갖는 데이터이기에 분석 결과를 정리해서 제 발로 원장실 문을 두드렸다. CEO이신 원장님께서는 수고했다는 말씀과 함께 우리 데이터로부터 새로운 발견을 한 것이니 거기에 그치지 말고 잘해보면 좋겠다는 피드백을 주셨다.


그렇지 않아도 수개월간의 분석 작업을 통해 교육에서 결과로 수집되는 주요 변수 간의 관계가 있음을 확인한 결과를 기왕이면 조금 더 확대해서 실제 업무에 활용해 보고 싶다는 생각은 하고 있던 중이었다.(정확히는 관계만 확인하고 끝내기 아깝다는 쪽에 더 가까웠던 것 같다.) 평소의 업무 보고였다면 그 말씀이 진짜 해보라는 뜻이었는지 아니면 수고했다는 일상적인 칭찬이었는지 대해 보고 이후 행간을 읽기 위한 노력을 했겠지만 이번의 경우는 그치지 말고 더해 보라는 CEO의 말씀에 대해 명을 받드는 마음으로 즉시 실행을 위한 다음 프로젝트 기획을 진행했다. 



설문 응답자들의 생각을 조금 더 편리하게 구분 지어 볼 수 있다면 어떨까?


그렇게 실제 업무 적용을 고민하면서 담당자로서 그간의 업무 방식을 되짚어 보게 되었다. 공들여 진행한 교육의 결과 참가자로부터 수집된 결과 데이터를 활용하는 방식이야 담당자마다 각양각색이겠으나 많은 경우 결과보고를 준비하면서 정량 데이터를 중심으로 교육 결과를 차수 별 누적 관리하면서 회차 별 요약 형태로 정성 의견 일부를 발췌하는 식으로 활용하고 있을 것이다. 남들은 아닐지도 모르겠으나 적어도 내 경우는 많은 경우 그런 식으로 활용하고 있었던 것 같다. 핑계 아닌 핑계를 대보자면 엄청나게 중요한 보고라기 보단 교육을 마쳤다는 의미의 일상적인 보고를 준비하는데 다른 업무가 밀려 있다는 시간 제약이 있는 가운데 많은 텍스트 데이터를 공들여 분석할 마음의 여유가 없기 때문이 아닐까 싶다. 어쩌면 시간이 있다 하더라도 텍스트 데이터를 분석할 마땅한 방법이 없어서 이기도 한 것 같다.

이러한 방식에서 가장 문제가 되는 것은 담당자가 보고서에 반영한 정성 의견이 모든 참가자의 의견을 대표하지는 못하다는 것이다. 아마도 그것이 좋은 얘기라면 본인에게 가장 유리한 문장을 뽑아서 넣었을 것이고, 반대로 보완 의견인 경우 최악의 의견들은 거르고 적당한 수준의 불만으로 추려내는 것이 나의 신상에 좋기 때문에 어쩔 수 없는 선택이라고 생각한다. 아무튼 문제는 내가 선택한 몇몇 의견만으로는 해당 설문 응답자들의 전반적인 분위기를 파악하기에는 부족하다. 만약 참가자들의 의견을 보다 명확하게 구분하고 한눈에 파악할 수 있다면 결과를 더 효율적이고 효과적으로 정리할 수 있을 것 같다는 생각이 들었고, 이번 프로젝트는 이러한 생각을 실현하기 위한 목적으로 진행되었다.  


글로 표현하니 말이 거창하지만, 앞으로 정리하고자 하는 작업을 데이터 관점에서 단계를 미리 요약해 보자면 참가자들이 남긴 정성 의견을 분류(Classification) 하는 모델을 두고, 분류된 결과에 앞선 프로젝트에서 활용한 감성분석을 통해 스코어링 하는 방식이 될 것이다.



어떤 데이터를 활용할 것인가?


1988년 개원한 LG인화원에는 연간 수만 명의 구성원들이 다양한 교육 프로그램에 참여한다. 그리고 매 교육이 마칠 때마다 교육만족도 설문을 진행하고 있으니 꽤나 방대한 양의 데이터가 잠자고 있는 셈이다. 이 데이터에 숨결을 불어넣기 위해 그중 비교적 최근이라 할 수 있는 2017년부터 2022년까지 약 193.944 명의 참가자가 남긴 104,978개의 의미 있는 문장에 대한 데이터 라벨링(Labeling)부터 진행하기로 했고, 여기에서 1차적인 의사결정이 필요했다.  

  

사실 더 많은 데이터를 활용할 수만 있으면 당연히 좋다는 생각으로 시스템 담당자로부터 제공받은 데이터는 약 19만 개가량이나 현실적으로 모든 텍스트 문장을 라벨링 하는 것은 비용적인 이슈가 있다. 따라서 분류 모델 학습을 위한 최소 수준이라고 생각되는 10만 개 데이터를 우선 활용하고, 모델 성능에 따라 추가 여부를 결정하기로 했다.  
모델 학습에 사용되는 문장은 결과를 활용하는 측면에서 유의미한 것이어야 하기에 기계적으로 문장을 추려내는 작업이 필요하다. 경험적으로 알고 있던 부분이긴 하지만 눈으로 EDA를 했을 때, 10자 미만인 응답의 경우 기계적인 응답일 뿐 활용 측면에서 내포하는 의미가 없다고 볼 수 있기에 제외하기로 했다. (ex. 없습니다. 감사합니다. 수고하셨습니다 등)  

  


데이터 라벨링(Data Labeling), 무식하면 용감하다고 했던가


문장 분류 모델을 만들어 보겠다는 생각이었고, 학습에 활용할 데이터는 확보했기에 소위 눈알 붙이기라고 하는 데이터 라벨링을 앞두고 라벨 명을 정하기 위해 이 프로젝트를 함께 한 인턴사원 2명과 함께 셋이서 임의로 300개씩 나눠갖고 라벨링을 해보기 시작했다. 사람 마음이라는 것이 기왕 하는 작업이니 최대한 세세하게 나누면 좋겠다는 생각이 들어 처음에는 강사, 교육 내용, 교육 환경 등 최대한 다양하게 분류하면 좋겠다는 생각이 들었다. 하지만 사람이 구사하는 말의 특성상 각자가 받아들이기에 다르게 느껴질 수 있다는 점에서 라벨링을 진행한 세 사람이 정한 라벨 명이 제각각이라는 문제가 있었고, 심지어 비슷한 문장에 대해서도 서로 다른 라벨 명을 붙이고 있다는 것을 발견하면서 초반 기준을 잡는 데에 꽤 많은 시간을 할애하게 되었다.


작업 초반 몇 번의 논의 과정을 거쳐 최종 분류 기준과 원칙으로 삼은 것은 무조건 세세한 분류가 꼭 좋은 것은 아닐 수 있다. 분류 모델의 경우 둘 중 하나를 묻는 바이너리 형태인 경우 가장 성능이 좋기 마련이니 우리도 최대한 보수적인 접근을 하는 쪽으로 의견을 모았다. 그 과정에서 활용한 것은 이미 교육만족도 설문의 객관식 문항으로 수집하고 있는 3개의 질문(관심 유발/내용구성/유용성)을 그대로 활용해서 참가자가 남긴 정성 의견이 그중 어떤 질문을 받았을 때의 반응에 해당하는지 분류하는 것을 목표로 라벨링 작업을 진행하게 되었다.


교육 만족도 설문 객관식 항목


이후 10만 개 문장에 대해 진짜 라벨링을 진행하기 위해 두 인턴사원들의 지인들을 위주로 서울 소재 4년제, 그중에서도 SKY 재학생을 위주로 8명의 학생의 도움을 받아 일주일 간 라벨링 작업을 진행하였다. 라벨링은 사실 기계적인 작업이기에 딱히 요구되는 스펙이 없이 일반적인 사람들이 소일거리 형태로 진행한다는 것을 알고 있지만 굳이 SKY 학생으로 섭외했던 이유는 이 작업이 아무래도 교육에 참가한 사람들이 남긴 문장을 읽고, 3가지 항목 중 어디에 해당하는가에 대해 분류해야 한다는 특성이 있는 작업이기에 기왕이면 문해력이 있다고 생각되는 학생들의 도움을 받는 쪽을 선택한 것이었다.



어?! 라벨링 그렇게 하면 안 될 텐데요...

데이터 라벨링을 시작하기로 하고 8인의 전사(!)들이 내가 일하고 있는 연수원으로 입소했고, 그들에게 위에 언급한 프로젝특의 목적과 그 안에서 라벨링이 갖는 중요성, 각 라벨이 갖는 의미 등에 대해 1시간가량의 OT를 진행했다. 그리고 각자에게 문장을 나눠주고 첫 한 시간 동안은 감을 잡는 형태로 일단은 ‘묻지마 라벨링’을 해보고 각자가 들었던 생각을 그 후에 나눠 보기로 했다. 당시의 나는 파이썬 입문에 대한 교육 프로그램 운영 기간 중이었기에 그렇게 작업지시를 해두고 강사, 인턴 둘과 함께 점심식사를 했다. 당연히 그날의 식사 중 대화 주제는 오늘부터 시작되는 데이터 라벨링에 대한 것이었고, 조언을 구하기 위한 목적보다는 이렇게 하려고 한다는 계획 공유 정도의 생각으로 8명의 학생이 와서 OT를 했고 각자 10,000개 이상씩 문장에 라벨링을 할 것이라는 얘기를 아무렇지 않게 전했다. 나와 인턴들의 이야기를 들은 데이터 분석가이자 내 과정에 출강한 강사님의 첫 반응은 “어?! 라벨링 그렇게 하면 안 될 텐데요.”였다. 그러고 나서 보통의 경우 라벨링 작업을 어떻게 진행하는지에 대한 설명을 듣게 되었다. 일단 첫 반응 이후로 멘붕이었기에 모든 설명이 정확하게 기억이 나지는 않지만 우리가 기획한 라벨링 방식과 일반적인 방식 중 가장 큰 차이점 두 가지를 꼽자면,   


짧은 OT 형태로 작업해서는 분류  과정에서 모호함이 있을 수 있기 때문에 라벨 명을 정하기 위해 작업자들끼리 며칠간 라벨 명과 분류 원칙을 확정하기 위한 워크숍을 진행한다는 것  
각자가 자기에게 할당된 데이터를 라벨링 하고 각각을 합쳐서 모델 학습에 활용하는 것이 아니라 동일한 데이터를 3명 이상에게 라벨링 하도록 한 후, 3명 중 2명 이상이 해당 라벨로 분류한 경우에만 인정하는 식으로 학습에 활용한다는 것  


이 정도였다.


강사님의 설명을 듣는 우리 세 사람의 표정이 어땠는지 모르겠지만, 한 가지 확실하게 기억하는 건 그저 망했다는 생각으로 모두가 그날 점심식사를 거의 제대로 하지 못하고 대부분 잔반 처리했다는 것이다. 10만 개 문장에 대한 라벨링을 일주일 내에 끝낼 수 있다는 호기로운 계획으로 이미 비용품의 작성 후 결재를 받았기에 학생들을 섭외할 수 있었고, 이미 그들이 연수원에 와서 내 뒷자리에 앉아 웃으며 점심식사를 하고 있는 중이었다. 무를 수는 없는 상황이 이미 벌어졌기에 결과가 어떻게 될지는 모르겠지만 일단 그들의 문해력을 믿고 그대로 가보기로 했다. 대신 각자 1,000개씩 라벨링을 진행한 후에 모아서 8,000개 데이터만으로 모델 프로토타입을 해보고 성능에 따라  끝까지 진행 여부를 결정하기로 했다. 



파인 튜닝(Fine Tuning), 우리 회사만의 맥락을 반영하려면 어떻게 해야 할까?


불안과 걱정 속에서 라벨링을 해나가던 과정에서 추가로 고민해야 했던 부분은 회사 내부의 교육에서 수집된 긍정적 또는 부정적 반응이 일반적인 표현과는 다를 수 있다는 사실이었다. 아무래도 논문 작성에 활용한 허깅페이스 상의 감성분석 모델의 경우 인터넷에서 수집된 댓글 데이터를 활용해 학습된 모델이기에 긍부정의 감정을 표현함에 있어 좋다와 싫다는 직접적인 반응을 사용하기 마련이나 아무래도 회사 내 교육 장면에서는 교육 중 아쉬웠던 부분에 대해 ‘어떻게 하면 좋았을 것 같다’는 식의 완곡한 표현을 사용한다는 것을 확인할 수 있었고, 이 부분에 대한 고민이 필요했다.  결국 기존 감성분석 모델에 새로 라벨링 한 데이터를 학습시키는 파인 튜닝(Fine Tuning)을 진행하기로 하고, 라벨링 작업 진행 시 내용적으로 어떤 질문에 해당하는지에 대한 라벨뿐만 아니라 해당 반응이 긍정과 부정 중 어떤 감정에 해당하는지에 대한 것도 추가로 라벨로 포함하게 되었다.



아무래도 우여곡절이 많았던 프로젝트이기에 스스로의 작업에 대한 아카이빙, 그리고 혹시 비슷한 작업을 하게 될 누군가를 위해 순간의 감정들을 자세히 남겨두려다 보니 글이 길어진다. 이 프로젝트의 첫 포스팅은 데이터 라벨링 작업 시작 단계에서 마무리해 두고, 다음 포스팅에서는 모델 프로토타입의 결과가 어땠는지와 최종 분류 모델 성능 등에 대한 내용을 적어 보도록 하겠다.
작가의 이전글 오랜만에 느껴본 성취감에 대하여
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari