🏃🏻♂️ (원티드x네이버 클라우드) 2024 프롬프톤
에 참가한 내용과 관련 개발 내용을 포함하고 있습니다.
1편에서 말씀드린대로 저희는 LLM기반 성형 코디네이션 서비스를 기획 및 개발하였습니다. 저희는 기술 개발을 위해 RAG (Retrieved-Augmented Generation) 기술을 사용하였습니다. 이는 아래와 같은 구조로 구성되어 있습니다.
저희는 Retrieve(적절한 문서를 탐색하는 기술)을 기존 임베딩 방식이 아니라 언어모델과 요약내용을 바탕으로 탐색하는 LLM Retrieve 방식을 적용하였습니다. 그러므로 위에 소개된 그라데이션이 들어간 모든 Retriever, Generator가 모두 하이퍼클로바의 언어모델과 적절한 프롬프트로 구성됩니다. 이런 하나의 프롬프트를 Chain
이라고 부르고 이 chain을 엮어서 큰 LLM 서비스가 탄생하는 것입니다.
먼저 저희 서비스에 직접적인 프롬프트 개발 이전 성능을 보기 위해 다양한 아무것도 없는 상태에서 다양한 질문을 던져보았습니다. 네이버 하이퍼클로버로 만든 링크드인 한줄소개 만들기는 2편에서 살펴보실 수 있습니다. 지금은 성형, 의료도메인과 관련된 질문을 위주로 던져본 것을 소개해드립니다.
먼저, 저희가 타겟으로 한 성형 도메인에 대한 질문을 던저보았습니다.
저는 이 답변을 보고 진짜 깜짝 놀랐습니다. 매우 정확한 정보를 전달해주는 것을 알 수 있었습니다. 모델이 성형에 대한 정확한 정보를 학습했을 것이라고 생각을 못했기 때문에, 특정 도메인에 대한 정답을 말해주는 것에 놀랐습니다.
왜 이런 특정 도메인의 질문에도 잘 답해주는 것일까요?
네이버는 포털사이트고 다양한 블로그, 카페 등의 공개된 게시글들이 있습니다. 특히 성형외과 광고나 백과사전 등의 정보들이 네이버 포털에는 많기 때문에 이런 정보들이 훈련에 사용되어 고품질의 정답이 생성되지 않았나 생각해볼 수 있습니다.
아래는 '스마일프로'라는 작년에 등장한 라식수술에 대한 내용입니다. 스마일프로 라는 내용을 직접적으로 물어보면 알 수 있기 때문에 (1) 스마일프로는 스마일라식 수술의 한 종류 (2) 스마일프로는 최신에 등장한 기술 이 두가지 정보가 있어야 스마일프로라는 수술을 유추할 수 있도록 질문을 던져보았습니다.
놀랍게도 하이퍼클로버는 매우 정확한 답변을 생성해주었습니다. 글 중간에 나오는 '로우 에너지 스마일'이 스마일프로라는 라식 수술의 풀네임입니다. 저는 이 답변까지 보고 하이퍼클로버 X의 수준에 감탄했습니다.
1,2편에서 볼 수 있듯이 한국어뿐 아니라 영어나 일어도 잘 하고, 특정 도메인에 대한 지식까지 뛰어나다는 것을 알 수 있습니다. 학습 데이터가 매우 최신으로 업데이트 되어있음을 유추해볼 수 있습니다. 반면 ChatGPT-4o는 어떨까요?
제가 원하는 답변인 스마일프로 라식에 대한 설명은 하지 못하는 것을 알 수 있습니다. 스마일프로 라식이 국내에서 뜨고 있는 수술인데다가 너무 최신의 내용이기 때문에 훈련데이터에 없어서 위와 같은 결과를 보고 있음을 알 수 있습니다.
어떤 면에선 chatGPT-4o보다 하이퍼클로버X가 더 우수한 면을 보이는 것을 알 수 있습니다. 검색엔진이나 perplexity와 같은 서비스의 한국버전을 만들기에는 오히려 좋을 수 있을 것 같습니다.
저희가 서비스에 적용한 방식은 아래와 같습니다. 자세한 내용은 2편에서 확인해보실 수 있습니다.
저희는 시스템 프롬프트와 그에 맞는 사용자 입력을 파라미터로 하여 사용하고 있었습니다. 이 프롬프트는 사용자의 질문에 맞는 적절한 수술의 번호 하나를 반환하도록 계획된 프롬프트 입니다. 그래서 저희는 단순하게 숫자만을 틱 내보내 줄 것을 계획하고 이후 코드를 작성하였습니다. 그리고 이 반환 정보를 가지고 이후 Retrieve를 수행할 계획이었습니다.
그러나, 모든 경우에서 그런 것은 아니지만, 일부 경우에서 13
이렇게 딱 나오는 것이 아니라 Index-13
제가 생각하는 답변은 13입니다
13번
이런식으로 내용은 파악했지만 출력 형식에서 자주 문제를 발생시키는 점을 확인하였습니다. 이를 해결하기 위해 저희는 아래와 같이 답변 예시를 제공하는 튜닝을 수행했습니다.
보시다시피, 특정 예시 질문이 들어왔을 때 어떤 형태로 반환해야 하는지를 예시로 정해두었습니다. 그리고, 여러번의 반복 테스트를 통해 잘못된 번호를 생성하는 케이스에 대해 그런 질문들에 대해서 어떤 답을 해줘야하는지를 추가해주었습니다. 예를 들어 '코를 높이고 싶어'
라는 질문이 들어왔을 때, 코끝을 높이는 코끝 성형
과 콧등을 높이는 콧등 융비술
중에 일반적으로 후자를 선택해야하지만 코끝 성형
을 고르는 경우가 빈번하게 있었습니다. 이런 케이스들에 대해 코끝성형에 해당하는 인덱스를 고를 수 있도록 적절한 예시들을 추가해주었습니다. 그리고, 이런 포멧을 잘 따르도록 모델이 기존의 입력에 기반하여 답변하도록 temperature를 0.1로 낮추었습니다.
이를 통해 높은 수준의 응답을 제공할 수 있었습니다. 이를 기반으로 만든 모델을 주변 지인에게 베타테스트 해보았습니다. 그러자, 오늘 점심 뭐먹을까?
와 같이 성형과 일절 관련이 없는 질문들을 한 경우 정확한 응답을 만들지 못했습니다. 이럴 경우 해당 내용은 알 수 없습니다
와 같은 답변을 반환해주었고, 이를 예외사항으로 처리하지 못한 서버에서 에러가 발생해 서버가 죽는 문제가 발생했습니다.
그래서 저희는 위와 같이 문제를 해결했습니다. 시스템 프롬프트에 마지막 인덱스로 관련없음 항목을 추가해주었습니다. 그리고 조금더 확실한 답변을 위해, 관련없는 케이스에선 어떻게 답변해야하는지 예시들을 추가했습니다.
저희는 원티드 LaaS의 테스트 기능을 활용하여 다량의 테스트 데이터에 대해 실험을 진행하였습니다.
다른 Chain들에 대해서도 위와 같은 방법을 적용해주었습니다. 다른 Chain들에 들어간 핵심 프롬프트를 모두 공개할 수는 없지만, 이와 비슷한 방식으로 예시를 추가하거나, 예외사항을 추가하는 등의 방법이 적용되었습니다. 놀랍게도 HyperCLOVA X는 이런 예시를 추가하자마자 매우 높은 성능을 보여주었습니다. 그리고 이를 수정하기 위해 저희는 서버를 고치는 것이 아니라 LaaS만으로 수정과 테스트를 할 수 있었고, 서버를 수정하지 않는 채로 LLM 프롬프트의 성능을 극대화할 수 있었습니다.
이를 바탕으로 2차 오픈베타 테스트를 수행하였습니다. 사용자의 어떠한 질문에도 각각의 Chain은 거의 예외를 발생시키지 않았고(1% 미만), 예외의 경우에도 손쉽게 파이썬 코드로 예외처리를 할 수 있는 수준이었습니다.
이제 프롬프트를 사전에 정의한 Chain은 모두 정의가 되었습니다. 이제 속도와 비용의 문제입니다. 네이버 하이퍼클로버는 두개의 모델을 제공합니다. 하나는 HCX-003란 이름의 고성능 모델로 매우 높은 수준의 답변을 제공합니다. 반면, HCX-DASH-001이란 이름의 모델은 HCX-003대비 빠른 속도와 적은 비용에 집중한 모델입니다.
물론 HCX-003을 모든 경우에 사용하면 좋겠지만, 실제 서비스를 사용할 때는 비용도 고려해야하고 생성 속도도 고려해주어야 합니다. 그러므로 모든 상황에서 최대로 좋은 모델을 사용할 수는 없습니다. 그렇기 때문에, 각 모델의 특성을 정확하게 파악하고 어떤 모델을 사용하면 좋을지 계획을 세워야 합니다.
두 모델을 여러 테스트 해본 결과, 일반 HCX-003은 생성을 매우 잘해서 생성 품질이 좋았습니다. 그리고 성형과 관련된 기본 지식이 있기 때문에, 저희가 전달한 context에 대해 잘 이해하고 있었습니다. HCX-DASH-001는 HCX-003에 비해, 생성 품질과 Context이해는 조금 부족하지만, 인덱스를 고르거나, 간단한 요약문을 생성하는 등 복잡하지 않은 작업에서 빠른 속도와 HCX-003에 밀리지 않는 높은 정확도로 수행해냈습니다.
이런 실험 결과를 바탕으로 다음과 같이 각 Chain을 모델로 변경하였습니다. 인덱스 탐색에 해당하는 두 모델의 경우, 실제 서비스에선 HCX-DASH를 사용해도 괜찮지만, 저희는 대회이고 높은 품질을 보장하기 위해, 요약 생성 테스크 2개를 제외한 나머지 에서 HCX-003을 사용해주었습니다. 이런 구성을 가능하게 한 것은 HCX-003의 높은 품질과 HCX-DASH의 빠른 속도 덕분입니다.
각 Chain에 할당하는 과정 역시 LaaS의 모델 설정을 변경하고 새로 배포해주면 되기 때문에 손쉽게 테스트하고 배포할 수 있었습니다.
이런 과정을 통해 높은 품질의 생성결과를 더 적은 비용과 빠른 속도로 처리할 수 있게 되었습니다. 이로써, 저희가 서비스를 기획하고 langchain, web app을 개발한 과정, wanted LaaS 사용 사례와 장점, HyperCLOVA X 사용사례와 튜닝방법 등을 모두 공유드렸습니다. 대회를 하기 위해 LaaS와 HyperCLOVA X를 처음 사용해보았지만, 사용하자마자 두 솔루션의 큰 팬이 되었습니다. 추후 회사에서, 그리고 제 개인적인 프로젝트에서 LaaS오 HyperCLOVA X를 더욱 적극적으로 사용할 것 같습니다.
더 자세한 wanted LaaS 사용법과 HyperCLOVA X 사용사례는 제 개인 유튜브에 더 올라갈 예정입니다. LaaS와 HCX를 사용한 API, RAG 등의 기법을 확인해보세요.