grep

Culture

여기어때 Hackathon 2024 : Gen AI를 활용한 챗봇

Draak여기어때

2024년 12월 10일

원문에서 보기 ↗

안녕하세요. iOS 개발팀 드락입니다.

2024년 11월 28~29일에 걸쳐 여기어때 해커톤 1회가 열렸는데요. 저도 팀을 꾸려서 참여했고, 1박 2일 동안 신선한 고민들을 하면서 즐거운 시간을 보냈습니다. 저희 팀의 아이템은 숙소 추천 챗봇이었고요. 이를 구현하기 위해 사용된 몇 가지 기술과 방법론, 느낀 점 등을 기술 블로그를 통해 공유하려 합니다.

사실 여기어때는 7년전에 챗봇을 출시했던 적이 있어요. 알프레도라는 숙소 검색을 도와주는 집사 챗봇입니다.

숙소 검색 도우미 챗봇이라면..

  1. 자연어로부터 핵심 키워드들을 추리 및 추출해 내고
  2. 이를 통해 알맞은 숙소를 유저에게 제공하는 기능

위 두 가지가 핵심 기능이라고 할 수 있겠는데요. 당시에는 자연어 파싱을 직접 개발한 엔진을 통해서(!!) 처리했었습니다. 자연어의 무궁무진한 배리에이션 때문에 이 파싱이란 게 무진장 어렵습니다. 개발하면서 샘플로 상정하고 테스트했던 텍스트들에는 잘 대응되겠지만..조금만 말이 달라져도 요청사항을 인지하지 못하고 헤메는 모습을 보였었죠..

재미는 있었지만 서비스로 지속되기에는 좀 부족한 퍼포먼스로.. 그렇게 알프레도는 출시 후 오래 지나지 않아 은퇴했습니다.

안녕 알프레도..

저희 팀의 해커톤 아이템 컨셉은 알프레도의 부활이었습니다. 그때 모습과 성능 그대로 부활만 해서는 의미가 없겠죠? Google Vision API, ChatGPT API, Apple STT(Speech to Text) Framework 등을 사용하여 이전 알프레도보다 강력해져서 돌아왔습니다!

돌아온 알프레도의 무기들

돌아온 알프레도에 사용된 핵심 기술은 다음과 같이 4가지로 정리할 수 있겠는데요.

  1. 자연어 파싱
  2. STT(Speech to Text)
  3. 태그기반 이미지 검색
  4. 해시태그 추천

하나씩 차례대로 이야기해보겠습니다.

1.자연어 파싱

챗봇을 만들려면 우선 가장 기본 기능인 자연어 파싱 성능부터 확보해야 했습니다. 자연어는 굉장히 난해하고 배리에이션이 다양하기 때문에, 직접 파싱 엔진을 만드는 것은 그다지 현명한 방법이 아닙니다. 세상엔 이미 강력한 LLM들이 여럿 공개되어 있으니까요 :) 이를 활용하기로 합니다. Google의 Gemini와 OpenAI의 ChatGPT, 두 가지 솔루션을 최우선 후보로 두고 며칠에 걸쳐 다양한 대화를 통해 면접(?)을 진행한 후 최종적으로 ChatGPT를 채용하기로 했습니다.

자연어로 이루어진 유저의 질문으로부터 숙소 검색에 핵심적인 내용들을 찾아내고 이를 숙소 검색에 필요한 내용으로 정제해 내는 기능을 ChatGPT 프롬프팅을 활용해서 구성했습니다. LLM에 프롬프팅을 활용해서 자연어를 xml, json, SQL 등의 정제된 내용으로 변환하는 기술은 최근에 많은 곳에서 사용되기 시작한 핫한 기술이기도 합니다.

저희는 여기어때의 검색 API가 연동되어 동작할 수 있도록 필요한 파라미터들이 자연어로부터 추출될 수 있는 프롬프트를 작성했습니다.

알프레도의 DEBUG 모드입니다. 채팅 아래쪽에 JSON형식으로 추출된 값들을 볼 수 있습니다.

우선, ChatGPT가 Hallucination 없이 자연어를 올바른 JSON으로 잘 치환할 수 있도록 프롬프팅해야 했구요. 여기에 지역검색, 제휴점 이름 검색, 자동완성 등 우리 검색 API에서 지원 가능한 검색 방식 들 중 어떤 기능을 선택해서 작동해야 할지 조건을 판단하도록 프롬프팅하는 부분도 꽤 어려웠습니다.

“대부도 펜션 추천좀 해봐" 처럼 지역 + 카테고리 기반 검색 결과를 제공해야 하는 경우도 있고요, “조선팰리스 보여줘” 처럼 정확한 제휴점 명칭 기반 검색 결과도 잘 제공되어야 했거든요.

간단한 지침은 완벽하게 수행하지만, 프롬프트의 요구사항들이 점점 복잡해질수록 ChatGPT의 동작도 잘못될 공산이 커집니다. 또한 같은 질문에 ChatGPT가 같은 대답을 한다는 보장도 없습니다. 잘 대답하던 ChatGPT가 다음날이 되니 딴소리를 한다거나 가끔씩 이상한 대답을 하는 경우도 많았습니다. 달리 뾰족한 해결 방법론은 없구요, 여러가지 경우의 수들을 가지고 많은 테스트를 긴 시간에 걸쳐 시도해보면서 ChatGPT가 원하는 동작을 안정적으로 수행하도록 조금씩 프롬프트를 튜닝해 나가는 방법밖에 없습니다.

https://youtu.be/If2OeXpBoDs

2. STT(Speech to Text)

자연어 파싱과 항상 콤비로 따라다니는 기술이기도 하죠, STT입니다. 굳이 키보드로 타이핑할 필요 없이 말로 하면 그대로 받아쓰기 되는 기능이죠. STT(Speech to Text), TTS(Text to Speech), STS(Speech to Speech) 셋 다 궤를 같이하는 기능입니다.

iOS 개발자인 저는 그냥 Speech Framework을 잘 쓰기만 하면 아이폰의 고품질 STT 기능을 활용할 수 있습니다. 이를 위에 말씀드린 자연어 파싱 기능과 연결하면, 휴대폰에 대고 “알프레도. 오늘 묵을 근처 호텔 보여줘" 라고 말만 하면 되는거죠 :) 해커톤 시연도 키보드 타이핑 대신 대부분 스피치로 진행했습니다.

https://youtu.be/4PBdthxInXY

3. 이미지 태깅 및 검색

Google Vision API를 통해 제휴점 이미지의 메타데이터를 태깅하고 색인 DB를 구축하여 이미지 기반 숙소 검색 기능을 제공합니다. 알프레도에게 사진을 전송하면, 사진과 유사한 숙소를 찾아주고요, 검색 결과에서 “이 숙소와 비슷한 숙소 찾아줘” 등의 명령을 통해 유사 숙소 검색 기능을 제공합니다.

https://youtu.be/_NmWfhxZ84o

실제 여기어때가 보유한 제휴점 환경과 동일한 수준의 숙소 태그를 준비해 둬야 태그 매칭과 연관 단어 추출 등에 대한 실제 동작 여부를 실제로 진지하게 판단할 수 있다고 생각해서 여기어때가 서비스 하고 있는 펜션과 호텔 제휴점 전체 이미지를 전부 태깅했습니다. 850만개정도의 태그가 추출되었구요, 이를 제휴점 id, 사진들과 연관지어 색인 DB를 구축했습니다.

시간은 10시간 정도 소요되었고 비용은 대략 20만원정도 사용된 것 같습니다. 규모대비 이 정도면 거의 공짜죠? (여기에 추가로 이후 제휴점 사진이 변경될 때마다 관련 태그를 업데이트하는 운영 비용이 아주 작은 수준으로 발생하긴 할겁니다)

Google Vision API를 통한 이미지 태깅 및 활용에 대한 추가적인 내용은

“AI 이미지 인식 기술을 활용한 숙소 탐색” 글을 읽어보세요!

4. 해시태그 추천

숙소로부터 추출된 메타 키워드들을 GPT에게 학습시킨 뒤 이들을 기반으로 적당한 추천어들을 선별해 해시태그를 생성해냅니다. 이를테면 “메타 키워드들로부터 여행 또는 숙소의 풍경이나 테마와 상호 연관성이 높은 한글 단어를 100개 추출해줘"처럼요.

태그를 학습시킨 ChatGPT와 함께 이런식으로 원하는 값들을 탐색해볼 수 있습니다.

반대로 내가 만들고 싶은 해시태그와 연관성이 있는 키워드들이 어떤 것들이 있는지도 확인해보고 이를 바탕으로 적당한 해시태그-키워드 관계를 구축할 수도 있습니다.

쓰기 좋게 달라는대로 요청하면 요청대로 제공해 줍니다 :)

이를 이용해 한글로 된 해시태그와 연관된 메타키워드 테이블을 구축해서 필터 또는 검색에 활용하게 됩니다.

이런 느낌이라고 보시면 됩니다

또한 정확한 해시태그로만 매칭되서 동작하는 게 아쉽다면 연관성 있는 단어들을 모아서 구성할 수도 있습니다.

이를 유의어 테이블이라고 하구요, 자연어 처리에 필수로 따라붙는 기능이기도 합니다 :)

이 역시 사람이 하나 씩 생각해서 작성하는 게 아니라 ChatGPT에게 연관성 있는 유사단어들로 위와 같은 구조의 JSON을 만들어달라고 요청한 뒤 이를 검토하고 서비스에 적합하게 살짝 손 본 뒤 활용하면 됩니다 :)

https://youtu.be/DTNBT6APIIg

이렇게 대략 4가지 기술을 활용해서 챗봇을 구현했고 해커톤 시연도 잘 마쳤습니다.

여기어때 해커톤 2024 챗봇 시연중

사실 위 기술들이 꼭 챗봇과의 채팅이라는 형태의 인터페이스로 사용자에게 전달될 필요는 없습니다. 여기어때 검색 홈 화면에서 마이크 버튼을 누르고

“10만원이하 근처 모텔 보여줘"

또는

“다음주 토요일에 시그니엘 가고 싶어"

라고 말해서 숙소를 검색하는 모습을 상상해보세요. 재미있지 않나요? :)

Gen AI 는 선택의 문제가 아니라 앞으로 IT를 넘어 산업 전반에서 꼭 다루어야 할 피할 수 없는 흐름인 것 같습니다. 세계적인 IT 최신 기술과 솔루션 행사인 AWS re:Invent 2024 세션의 거의 대부분이 Gen AI 관련 기술 및 활용 사례에 대한 발표였고요.

이번 해커톤 아이템을 진행하면서 활용해 본 것들과 놀랍도록 똑같은 기술들과 접근법들이 내로라하는 회사에서 빠르게 검토되고 활용되고 있었습니다. 앞으로 Gen AI가 우리에게 어떠한 변화를 가져다줄지, 그 속도가 너무 빨라서 예측하기가 어렵고 때론 두렵기도 하지만..거부할 수 없는 흐름이라면 함께하는 방법밖에 없겠죠? 잘 준비해서 해당 기술들에 대한 인사이트를 가지고 새로운 개발 패러다임들을 소화해 나간다면 앞으로도 재미있지 않을까 낙관해봅니다 :)

여기까지 읽어주셔서 감사합니다!