경희대 소융

LLM을 이용한 전국민 공감 프로젝트, UT 제작기

JuniorEinstein 2024. 1. 2. 00:42
728x90

전국민 공감 프로젝트, UT

경희대학교에서는 매년 KHUthon이라는 해커톤 대회를 주최한다. 나는 매년 이 대회에 참여했었기 때문에 올해도 어김없이 출전할 수 밖에 없었다. 그리고 2023년 2학기 갓 복학한 전윤민의 복귀전 같은 느낌이랄까... (허허) 여튼 거두절미하고 이번 해커톤의 주제는 '교육'이었다.

너... T야?

유튜브 폭스클럽 중

MBTI가 유행하고 여러 형태로 발전하면서 사람들은 이성적 사고형(T)와 감정적 사고형(F)을 나눠 다투기 시작했다. 그러면서 뭔가 공감을 해주지 못하는 T형 인간들이 일방적으로 혼나는(?) 그런 그림들이 많이 만들어지고 있다는 생각이 들었다.

하지만 우리 팀은 '공감'이라는 것 또한 선천적이거나 타고나는 개개인의 성격이 아닌, '교육을 통해 학습할 수 있는 기술'이라고 생각했다. 우리 팀은 T형 인간들을 위한 교육 플랫폼 'UT'를 구상하게 되었다.

다음과 같은 기능을 제공한다.

  • 카카오톡 데이터 분석
    • 카카오톡 대화를 분석해 특정 상황에 공감을 잘 하고 있는지 평가
    • 각 상황별로 공감을 잘 하고 있는지 점수를 채점
  • 문제풀이를 통한 공감 학습
    • 특정 인물과의 대화 상황을 제시
    • 적절하게 공감하는 답변을 작성. 점수를 채점

 

LLM과의 만남

처음 이 아이디어를 듣자마자 떠오른 것은 ChatGPT의 활용이었다. 일정한 형식의 입력 데이터를 만들 수 있고, 특정 양식으로 응답해줄 것을 요구할 수도 있다. 어쩌면 GPT가 가장 잘할 수 있는 분야 중 하나라고 생각했다. '이거 무조건 된다!!!'라는 확신이 있었던 것 같다. 확인을 위해 GPT에게 다음과 같은 프롬프트를 날려보았다.

실전 상황에서는 이런 답변을 하지 않길 바란다.

흠... 확실히 원하던 대답은 아니었다. 원하는 답변을 얻기 위해서는 추가적인 프롬프트 설정이 필요했다. 하지만 GPT를 잘 쓰기 위해서는 '일정한 형태로 프롬프트를 요청'할 수 있어야 한다. 짧은 고민 후에 다음과 같은 양식으로 프롬프트를 구성했다.

프롬프트 양식 최종 ver.

각 대화의 상황별로 원하는 방향으로 평가가 이루어질 수 있도록 도와주는 additional_prompt를 추가했다. 그리고 중간에 평가의 대상이 되는 유저의 답변을 입력받을 수 있게 구성하였다.

나는 이를 통해 UT의 기술적인 가능성을 확인할 수 있었다. 그리고 GPTKoBERT를 활용하여 서비스를 구축하고자 하였다.

카카오톡 대화 분석 기능

UT의 데이터 파이프라인

카카오톡 대화 분석 기능은 카카오톡 대화를 특정 주제의 Chunk로 나눈 다음, 각각의 주제 속에서 내가 공감을 잘 하고 있는지 평가하게 된다. 우리는 대화를 주제별로 나누기 위해 KoBERT 모델과 AI Hub에서 찾은 '주제별 일상 대화 데이터'를 활용하였다.

GPT를 사용하지 못한 이유는 두 가지가 있었다. 첫 번째는 입력하는 카카오톡 대화의 양이 GPT가 한 번에 처리할 수 있는 토큰을 초과했다는 것. 두 번째는 응답이 돌아오는 시간이 너무 느렸다는 것이다.

그리고 공감과 관련이 없는 대화 주제나 불필요한 문장들을 제거할 필요가 있었다. 이를 위해 KoBERT 모델에 주제별 일상 대화 데이터를 학습 시켜 특정 문장을 넣으면 해당 문장이 어떤 주제인지 알려주는 모델을 만들었다.

학습에 사용한 데이터셋

해커톤의 특성상 학습에 진행할 수 있는 시간이 많지 않아서 우선은 60% 정도의 정확도에서 학습을 멈췄다. batch size는 100으로 진행했다. epoch가 5 밖에 안됐는데도 학습하는데 5시간 이상 걸렸던 것 같다.

이렇게 만들어진 모델은 문장을 넣으면 해당 문장이 어떤 주제인지 1~20까지의 숫자로 출력해준다. 우리는 카카오톡 대화의 각 문장을 해당 모델에 넣어 주제를 뽑아 같은 주제가 연속되는 것들은 하나의 chunk로 묶었다. 모델의 정확도가 높지 않기 때문에 중간중간 하나씩 다른 주제가 등장하는 문제를 해결하기 위해 연속되는 주제를 평가할 때 약간의 오차를 허용하였다. 그리고 시간의 연속성도 고려할 수 있게 알고리즘을 수정해 90% 이상의 정확도로 대화를 주제별 chunk로 나눌 수 있었다.

나 공감 잘했어? (feat. ChatGPT)

그 다음은 대화의 각 chunk를 앞서 설계한 프롬프트에 맞게 가공해 GPT에게 공감을 잘 했는지 물어보는 과정이다. 웹으로 접근할 수 있는 GPT를 이용해 테스트를 진행한 후 GPT-3.5-turbo API를 적용했다. 하지만 웹 GPT에서 주던 결과만큼 정확도가 높지 않았다. Temperature, TopP 등 설정할 수 있는 값들을 조정해보았지만, 도무지 해답을 찾을 수 없었다.

결국은 GPT-4를 사용하는 것으로 문제를 해결할 수 있었는데, 단점은 응답 시간이 오래 걸린 다는 것이었다. 응답 시간이 평균 20~30초가 되었고, 30초가 넘어가는 경우도 있었다. 문제는 이번 대회는 발표 시간이 3분으로 굉장히 짧았는데, 3분 안에 시연까지 마쳐야 한다는 것이었다.

Promise.all 로 동시에 요청들을 처리해 보는 시도부터 호스팅하는 서버의 성능도 올려보았지만, 유의미한 개선점을 찾기는 어려웠다. 그래서 고안한 해결책은 발표가 끝나고 시연을 하는 것이 아닌, 발표와 시연을 동시에 하기로 하였다. 나는 지금껏 수많은 발표들을 해왔지만 이번처럼 발표와 시연을 동시에 진행한 것은 처음이었다. 발표자료의 오른쪽을 일부러 비워두고, 웹 브라우저를 붙여 설명을 하면서 시연을 동시에 진행했다. 생각보다 손이 꼬여서 쉽지 않았다.

발표자료 + 시연

최종적으로 아래와 같은 형태의 서비스를 완성할 수 있었다. 카카오톡 대화 파일을 넣고 '나'가 누구인지 선택한다. 그 다음에는 API를 통해 카카오톡 대화를 분석하고 각 대화상황에서의 점수/평가/제안을 알려준다.

실제 구현된 서비스

결론

최근 GPT의 등장으로 누구나 쉽게 서비스에 LLM을 적용할 수 있게 되었다. 나는 이것이 정말 큰 변화라고 생각한다. LLM의 등장으로 많은 서비스들의 사용자 인터페이스에 변화가 생겼기 때문이다. 특히 정보의 검색과 가공 부분에서 많은 변화가 있었다고 생각한다. 사이트 내에서 수많은 링크들을 누르며 탐색해야 할 일이 적어졌고, 찾아낸 정보를 직접 가공하지 않아도 된다. 디자인 툴도 마찬가지이다. 수많은 커맨드를 기억하고 입력할 필요 없이, 원하는 것을 입력하면 자동으로 바꿔준다. 앞으로 더 많은 서비스들의 인터페이스가 input 창 하나로 바뀔지도 모른다.

이번 프로젝트를 통해 짧게나마 LLM을 이용한 서비스를 개발해 보면서 LLM 기술에 대한 가능성을 엿보았다. 이미 많은 시도들이 이루어지고 있긴 하지만, 나중에는 크롤러가 LLM으로 대체될 수 있지 않을까 싶다. 웹 사이트 전체를 크롤링 해 놓고, 필요에 따라서 LLM에게 가공을 맡기면 알바를 쓰는 것보다 저렴하고 정확하게 할 수 있지 않을까 하는 생각도 들었다.

인공지능, 항상 공부해야 한다고 생각했지만 막상 공부하려고 하면 손이 잘 가지 않았다. 무엇을 먼저 시작해야 할지 모르겠다는 느낌을 받곤 했었는데, 이번 기회를 통해 LLM을 더 자세하게 공부하고 싶어졌다. 여러분도 관심이 생긴다면 한 번 도전해 보시길...!

728x90