1. EATceed version 1
기획 내용
개발 동아리 Econovation에서 진행한 EATceed 프로젝트는 체중 증가를 목표로 하는 분들을 위한 맞춤형 앱이다.
기존에 스토어에 있는 앱들은 체중 감량에 초점을 맞춘 서비스들이 많아 역발상으로 기획을 했다는건 표면상의 이유이고, 진짜 이유는 팀원 모두 체중 증가라는 공통적인 목표를 가지고 있어 우리가 실사용자가 되어보자!라고 생각하여 기획을 하였다.
(기획했을 때를 다시 생각해보면 정말 웃겼던 순간이다😹)
기능 내용
EATceed(Version 1)의 기능은 다음과 같다.
- 사용자가 섭취한 음식을 기반으로 칼로리와 영양 성분을 계산
- 칼로리 관리와 체중 증가 목표를 달성하기 위한 진행 상황을 추적
- 알림을 통해 사용자가 음식을 설정한 시간에 섭취하도록 유도하여 건강한 체중 증가 지원
- 칼로리 캘린더를 통한 일일 권장 섭취 칼로리 달성률을 확인
- 챗봇을 이용한 음식 추천
여기서 내가 담당한 기능은 챗봇을 이용한 음식 추천과 사용자가 섭취한 음식을 등록할 때의 사전 데이터 확보이다.
아쉽게도 챗봇을 이용한 음식 추천은 여러가지 문제로 다른 기능으로 대체할 예정이다.
기술 스택
챗봇을 이용한 음식 추천 기능을 위해 수행한 것들은 다음과 같다.
- 음식 데이터 확보(Seed data)
- Self-Instruct를 이용한 데이터 증가
- 음식 추천 Fine-Tuning
- FastAPI를 이용한 Serving
- AWS EC2를 통한 배포
FastAPI Serving과 AWS EC2 내용은 Version 2에서도 사용하기 때문에 해당 글에서는 작성하지 않고, 나머지 3개의 내용은 Version 1에서만 사용하고 삭제된 기능에 들어가는 내용이므로 아래에 작성하려 한다.
Self-Instruct
방대한 양의 학습 데이터를 확보를 인간이 생성하는 것은 한계가 있다. 이를 해결할 방법으로 이미 개발된 대형 언어 모델(LLM)을 활용하여 여 추가적인 데이터를 확보하는 Self-Instruct 기법을 사용하였다.
Self-Instruct은 직접 작성한 학습 데이터인 Seed data를 기반으로 한다. Seed data를 GPT-3.5 모델을 사용하여 새로운 학습 데이터를 확보하고 기법 내부적으로 품질 낮거나 중복되는 내용을 제거하여 최종적으로 높은 품질의 학습 데이터만을 저장한다.
EATceed 프로젝트에서는 AI Hub의 "음식 이미지 및 영양정보 텍스트"에서 텍스트 데이터 확보 후 데이터 전처리를 하여 Seed data(학습 데이터)를 확보한 후 Self-Instruct 기술을 도입하여 226 data(seed_tasks.jsonl)에서 10,031개의 데이터를 확보하였다.(machine_generated_instructions.jsonl)
위의 그림을 쉽게 표현하면 다음과 같다.
Fine-Tuning
Fine-Tuning이란 특정 작업이나 도메인에 높은 적합성을 확보하기 위해, 이미 훈련된 대규모 언어 모델에 특정 데이터셋을 사용하여 추가적인 학습을 수행하는 작업을 의미한다.
EATceed는 음식 추천이라는 도메인에 맞게 챗봇의 대답 성능을 높이기 위해 Self-Instruct를 통해 얻은 다량의 학습 데이터 기반으로 GPT-3.5-turbo 모델을 Fine-Tuning 하였다.
Self-Instruct를 통해 얻은 데이터셋의 구조와 GPT-3.5-turbo 모델을 Fine-Tuning을 하기 위한 데이터셋의 구조가 상이하여 데이터셋 형태를 변환하였고, Fine-Tuning을 진행하였다.
위의 과정을 통해 최종적으로 EATceed 프로젝트에 맞는 Fine-Tuning 모델을 얻었다.(모델 사용에 있어 비용 문제로 코드 생략)
2. 회고 내용
프로젝트를 진행한 뒤 개인적으로 회고록을 작성해봤다. 동아리 발표회에서 다양한 인원들에게 직접 시연을 하며 발생한 문제들에 따른 수정 사항과 추가적인 의견에 초점을 맞춰 작성하였다.
- 이전 대화를 계속 저장하여 token수에 따른 비용문제 발생
- DB에 데이터가 존재하므로 memberID(컬럼명)에 맞춰 이전 대화 몇 개만 chatgpt api에 사용
- memberID에 따른 가장 최신의 대화(1개)만 조회해서 사용
- 사용자의 대화 기록이 5개 이상일 경우 DB 또는 코드를 통해 reset
- 가끔 같은 음식을 반복적으로 출력한다는 문제 발생
- 간식 추천에서 이와 같은 문제가 발생
- ChatGPT parameter인 temperature의 값을 높여 창의성 부여
- frequency_penalty를 설정하여 동일한 답변 배제
- ChatGPT API를 통한 대화 생성 시간 감소 필요하다고 인지
- ChatGPT API는 RESTful API이므로 대화 생성에 대한 시간 축소는 어려움이 존재
- Prompt-Engineering을 통해서 최대한 줄일 수 있지만 이는 사용자의 입장에서 압도적인 시간 축소는 아님
- 앱에서 음식을 등록할 때 AI 모델이 음식을 분류해주는 기능 추가
- 사용자 편의성을 고려할 때 기능이 있으면 좋겠다고 판단
- 모델을 직접 만들기에는 인력 부족
3. 결론
회고록을 작성하며 ChatGPT를 이용한 챗봇을 사용하는 게 맞는지 의문이 들었다. 프로젝트의 기획 취지를 고려하면 음식 추천에서 챗봇도 괜찮지만 단순 챗봇 기능에서 벗어나 다른 기능이 필요하다는 것을 인지하였고, Version 2에서는 이를 적용하려 한다.
'Project > EATceed' 카테고리의 다른 글
[EATceed] CH06. LLM 응답의 품질 검증과 안정적인 운영을 위한 Fallback 패턴 (0) | 2025.03.22 |
---|---|
[EATceed] CH05. 실서비스를 고려한 성능 최적화 (1) | 2025.03.22 |
[EATceed] CH04. 돌고 돌아 마침내 정식 출시까지 (0) | 2025.03.21 |
[EATceed] CH03. 2024년 상반기 개발 진행 과정 (1) | 2024.07.11 |
[EATceed] CH02. 프로젝트 소개 (0) | 2024.02.27 |