etc

우아콘 2024 골라보기, 2) Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기

나니니 2025. 1. 9. 15:10

 
이 영상은
토스뱅크 멘토님이 추천해주셔서 보게되었는데
보면서 느낀점은
엇..우리도 RePick 개발하면서 저렇게 진행했는데!! 하는 거였다. 
 
그런데 슬라이드도 깔끔하고 내용도 딱딱 구조화시켜 정리해놓으니
이해하기도 수월했고, 어떤 문제와 상황들을 거쳐서 어떻게 해결해나갔는지를 단번에 알 수 있었다. 
 
우리네 최종 프로젝트도 얼른 리뷰도 해야 하는데, 
막상 적을 내용이 너무 많다보니 계속 미루게 되는 겨울이다..ㅠㅠ


우아콘 2024 골라보기 시리즈
저번 우아콘 2024 골라보기, 1) 추천 모델 성장 일지에 이어서 
Fine-tunning 없이, Only 프롬프트 엔지니어링 만으로 '메뉴 이미지 검수하기'라는 주제다. 
 
이번 영상도 마찬가지로
AI/ML 카테고리다. 

*영상 제목이 'Fine-tuning없이'라고 되어 있지만
영상 마지막부에 비전으로 바운딩 박스를 처리할 때, Fine-tuning을 진행했다고 말씀하셨다.
하지만, 거기까지 가는 모든 과정 대부분
프롬프트로만 진행되었고 바운딩박스 튜닝은 모델 성능을 '무딘 칼날을 조금 더 날카롭게 해주었다'란 개념이라
'Fine-tuning 없이'라는 내용을 주제로 삼은 것 같다.

 
 

 'Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기'

'4줄 요약'

목적: 검수 센터의 리소스 절감 및 가게 사장님의 검수 대기 시간 단축
상황: 메뉴 정책의 변동성이 높아 머신러닝 모델의 Finne-tunning이 어려움
해결방안: 프롬프트 엔지니어링을 통해 GPT를 활용하여 자동화 구현
결과: 자동화를 통한 내외부 리소스 절감

이번 담당자분들은 PM분과 데이터 분석가 분으로 구성되어 있고, 
발표도 나눠서 하시는데,
 
김태정 PM분께서 문제 상황 부터 해결까지의 과정을 말씀하시고 뒤이어
오혜진 데이터 분석가께서 AI 기술을 가지고 우아한 형제들에서 어떻게 일하고자 하는 지를 말씀하신다. 

 
아래는 원본영상~
 
Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기

 

WOOWACON 2024 | Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기

메뉴 이미지의 품질 검수를 프롬프트 엔지니어링을 통해 GPT로 자동화한 여정을 소개합니다. 배달의민족의 수많은 음식 메뉴 사진을 사람이 하나하나 검수하던 과정을 어떻게 GPT로 자동화했는

2024.woowacon.com

 
그리고 이번 발표는 우아한 기술블로그에도 정리되어 올라가있어서
영상과 함께 보면 꽤 유익하다. (강추)
 
프롬프트 엔지니어링으로 메뉴 이미지 품질 검수하기: GPT 기반 업무 자동화

 

프롬프트 엔지니어링으로 메뉴 이미지 품질 검수하기: GPT 기반 업무 자동화 | 우아한형제들 기술

GPT의 등장으로 생성형 AI 기술은 대화, 검색, 추천 등 다양한 분야에서 활용되며 빠르게 보편화되고 있습니다. 2024년 10월 기준, 국내 ChatGPT 사용자는 520만 명을 넘어서며 10명 중 1명 이상이 생성

techblog.woowahan.com

 

1) 문제 상황: '메뉴 이미지' 검수

메뉴 이미지는 '배달의민족'에서 가장 중요한 요소다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

그에 따라 가게 중심에서 '메뉴 중심'으로 모바일 UI도 변화해가고 있다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

 
그럼 이 '메뉴 이미지'는 어디서 오는걸까??
 
배민 셀프서비스(배달의민족에 입점한 사장님들이 가게 멘, 광고 등 가게를 관리하는 서비스)를 통해 
가게 사장님들이 직접 업로드하거나, 배민에서 제공하는 무료 이미지를 사용할 수 있다. 
이때, 직접 업로드된 사진은 배민측 정책에 부합하는지 확인하기 위해 '검수 센터'로 넘어가게 된다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

검수 센터에는 하루 평균 약 1만건 이상의 이미지가 등록되다 보니
검수 시간에만 평균 17시간 정도가 소요되고 있었다. 
 
특히, 명절 또는 연휴 등이 있을 경우 가게 사장님들 입장에서는 검수 시간이 기존보다 더 오래 걸리는 상황이 발생하고
또 배민 검수센터의 정책이 가게 사장님측에는 충분히 이해되지 않는 문제가 발생하고 있었다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

 
이에 배달의민족 메뉴 이미지 반려 기준을 살펴보았을 때, 
변수가 너무 많아 Fine-tunning 하기에는 역부족이란 판단이 생겼다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

이러한 문제를 해결하기 위해
'생성형 AI를 활용해 메뉴 이미지 등록 및 검수를 자동화해보자!'라는 주제가 도출되었다. 

생성형 AI 활용하기

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

 
아래는 OpenAI API를 사용하여 ChatGPT를 호출할 때, 대화의 구조와 AI의 동작 방식을 결정하는 주요 요소인
System Instrucitons, Prompt, Completion, Parameter이다. 
 
아래 페이지는 정리가 굉장히 잘 되어 있어서
일일히 다 캡쳐를 해봤다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들
Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들
Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들
Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

 
ChatGPT에 음식 이미지를 넣은 후, 어떠한 답변이 도출되었는지 확인했을 때
'맥락'을 이해한 답변이 도출되는 것을 확인했다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

2) 프롬프트 엔지니어링의 서막(GPT-4 with vision)

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

아래처럼 v1의 시스템 프롬프트를 작성했고, 
파라미터는 기본으로 설정했다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

이때 정책에 위반된 사진을 input으로 넣었으나
정책 위반이 아님에도 ChatGPT는 '위반'으로 판단했다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

그 이유를 살펴보니 
'~정책에 위반하는 번호를 선택하고~'라고 하며 정책 목록에는 '음식과 관련이 없는 이미지입니다.'라고 하니
음식과 관련이 없는 이미지가 아니므로 '정책 위반'이라고 판단을 내렸던 것이다.
 
그래서 '~정책에 해당하는~'으로 변경하여 다시 시도했는데
의도한 바대로 판단을 하지 못했다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

그래서 프롬프트를 
더 세분화하여 작성해보았다. 
예를 들어, '불필요한 정보'라는 단어 대신 기준이 명확하도록 '어디서부터 어디까지가 불필요한 정보인지'를 명확히 알려주었다.

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

이제 
정책에 위반될 만한 이미지를 넣어보았을 때 
'정책 위반'으로 걸러내지 못하는 문제가 발생했다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

합성되거나 연츨된, 혹은 왜곡된 이미지 들에 대해서도
ChatGPT가 이해할 수 있도록 하기 위해 조금 더 구체적으로 정책들을 세워나갔다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

그런데 또 문제 발생...!
 
음료와 소스를 음식으로 인지하지 못했다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

이후로도 프롬프트 엔지니어링을
100개 가까이 진행했고, 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

프롬프트 엔지니어링이란, 
어떤 직무인지 알게 되는 과정을 거쳤다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

이제
어느정도 사용 가능한 GPT가 나왔다...! 라고 생각해서
새로운 이미지들을 넣어보았다. 
 
그랬는데, 
정책 번호를 파싱하기에는 음식의 개수가 포함될 여지가 있었고, 
GPT의 판단 근거를 저장하고자 하니 텍스트의 양이 너무 많다는 문제가 발생했다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

그래서 
Prompt 요구사항에 
Output으로 받고싶은 결과의 양식을 Json으로 반환되도록 지정해주었다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

또 동일한 사진에 대해
'일관된 답변'을 받도록 고도화 시켰는데, 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

약 세 가지 방법을 시도해보았다. 
 
먼저 Parameter는 '사진'의 사실에 기반한 답변이 필요했기 때문에 값을 낮추는 방향으로 시도했다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

 
CoT도 이용했는데 전체적으로 일관된 답변을 만드는데 큰 도움이 되었다. (*Ensenble 기법은 예산의 제한으로 인해 사용하지 않음)

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

 
그럼에도
ChatGPT의 호출 비용은 저렴하지 않았다...

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

토큰을 줄일 수 있는 방법을 고심한 끝에
한글에서 영어로 프롬프트를 변경했을 때,  1.7배 적은 토큰을 사용하였고, 
응답시간이 꽤나 많이 줄어든 효과를 가져왔다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

 
프롬프트 대폭 수정을 진행했는데, 
이중부정등의 표현은 제거하고, 정확한 행동 지침을 기재했다. 
그리고 파라미터는 배민 서비스 성격에 맞는 값으로 조정했고, json format으로 출력하여 출력의 안정성을 보장했다. 
프롬프트도 더 세분화하였고, 응답 예시도 함께 기재했다. 

Fine-tuning 없이, 프롬프트 엔지니어링으로 메뉴 이미지 검수하기 #우아콘2024 #우아한형제들

GPT-4o 등장!
4o가 기존 모델 대비 큰 토큰 효율화로 인한 호출 비용 감소, 빠른 연산 속도, 적은 latency 로 인해
기존의 프롬프트를 가지고
모델을 수행해보았다. 
그런데 아래 이미지와 같이
GPT-4 vision과 GPT-4o가 각기 다른 판단을 내놓았다. 
최종적으로 GPT-4o에 맞게 프롬프트를 다시한번 튜닝하는 과정을 거쳤다. 

 
와중에 여전히 GPT로 해결하기엔 어려운 부분들이 발생했다. 

1. 정확한 객체 탐지 불가
2. 저작권/상표권/초상권 의 최근일자 반영이 어려움

 
과도한 확대로 인한 문제는 Fine-tuning으로 해결했고, 
저작권/상표권/초상권의 문제는 사람이 한번 더 검수하는 것으로 프로세스를 분기했다. 

 
이러한 과정을 통해 이미지 AI 자동 검수 기능이 오픈되었다!!
 
유저 즉, 가게 사장님에게 보다 상세한 사유를 안내할 수 있게 되었고
기존 검수 시간 대비 99.98%를 단축하는 효과를 가져왔다.