LLM으로 Jack-O-Lantern 컨테스트 해 보기
여러분은 올해 할로윈 데이를 어떻게 보내고 계신가요?
2022년 할로윈에 이태원에서 있었던 비극적인 사태 이후로 할로윈에 대해 다들 조심하는 분위기가 당연히 있지만, 어쨌든 할로윈 자체는 우리나라에서도 많은 사람들이 다양한 방식으로 즐기는 날로 자리잡고 있는 것 같습니다.
저희 튜링 포스트 코리아에서도, 살짝 가볍게 쉬어가는 느낌(?)으로 할로윈 데이를 기념할 만한 게 뭐 없을까 고민을 해 봤는데요. 그러다가, 캐나다의 ‘AI 리스크 관리 서비스’ 스타트업, Armilla AI의 Director of AI Assessment, 앤드류 마블 (Andrew Marble)과 함께 ‘LLM으로 하는 잭-오-랜턴 (Jack-O-Lantern) 컨테스트’를 해 봤습니다.
해외에서는 할로윈을 맞아서 가족들 간에, 동네에서, 또는 아예 제대로 된 대회 형식으로 ‘참가자들이 호박을 깎아서 잭-오-랜턴을 만들고 누가 잘 만들었는지 심사, 시상’하는 행사가 많이 있는 모양이예요.
LLM이 물론 쓰임새가 많지만, 그 중에 단연 Text-to-Image도 많이들 쓰시는 기능이잖아요? 이 Text-to-Image와 이미지를 이해하는 LLM의 능력을 기본으로 해서, LLM으로 잭-오-랜턴을 만들고 어떤 잭-오-랜턴이 잘 만든 건지 심사까지 한 번 해 보려고 합니다.
자, 그럼 Armilla AI의 Andrew Marble과 함께 작업을 해 볼까요?
언어 모델 (Language Model)의 발전은 오랜 기간 이뤄져왔지만, 특히 최근에 주목받게 된 두 가지의 혁신적인 발전이 있다고 생각합니다 - 바로 이미지 분석 (Image Analysis)과 구조화된 출력 (Structured Outputs) 기능인데요.
할로윈을 맞이해서, 오픈AI와 앤쓰로픽의 모델들을 가지고 이 두 가지 기능을 재미있게 활용하고 평가해 볼까 합니다.
‘구조화된 출력 (Structured Outputs)’ 모드라는 건, 언어 모델이 특정한 스키마 (Schema)나 형식 (Format)에 맞춰서 결과물을 생성하도록 강제하는, 즉 제한하는 기법을 말하는 거죠. 이 기법은 모델을 사용해서 함수를 호출한다거나, (사전에 정해진) 템플릿에 따라서 데이터를 추출할 때 등 유용하게 쓸 데가 많습니다.
이미지 분석 (Image Analysis)은 어떨까요? 앤쓰로픽의 Claude라든가 오픈AI의 GPT 모델들을 포함해서, 상당히 많은 거대 언어모델이, 이미지를 입력해 주면 이 이미지가 어떤 이미지인지, 어떤 요소들이 있는지 등에 대해서 상세한 텍스트 응답을 제공할 수 있게 되었습니다.
이 기능들을 테스트해 볼 겸, 할로윈을 맞이해서 재미있는 실험을 한 번 해 봤습니다 - 앤쓰로픽의 Claude 3.5 Sonnet, 그리고 오픈AI의 GPT-4 모델을 활용해서 ‘AI Jack-O-Lantern Judge (AI 호박 조각 심사위원)’을 만들고, AI 모델이 Text-to-Image 기술로 생성한 호박 이미지들을 대상으로 한 번 심사를 하게 해 봤습니다.
먼저, 호박을 조각해서 만들어지는 ‘잭-오-랜턴’ 이미지를 생성하기 위해서 앤쓰로픽의 Claude (프롬프트 생성용)와 Flux.1-schnell (이미지 생성용) 모델1을 활용, 파이프라인을 구축했습니다.
Claude에게는 아래 표에 표기된대로 ‘Scariness (무서움)’, ‘Creativity (창의성)’, ‘Skill (기술 수준)’을 기준으로 만들어질 호박 조각 (잭-오-랜턴)에 대한 상세한 설명을 생성하도록 요청했습니다.
만들어진 상세한 설명 - 프롬프트죠 - 을 Flux 모델에 전달해서 이미지들을 생성해 냅니다. 만들어진 여러 개의 이미지들 중 아래에 두 개의 예시, 그리고 해당 이미지를 만드는데 사용된 프롬프트를 보여드리겠습니다.
위와 같은 이미지를, Skill, Creativity, Scariness 세 가지 기준을 가지고 만들 수 있는 모든 수의 조합에 대해서 생성해서, 총 32개의 이미지를 만들어 냈습니다.
자, 이제 (가상으로) 여러 참가자가 각자의 컨셉을 가지고 호박을 조각해서 ‘잭-오-랜턴’을 만들어서 제출했습니다! 심사의 시간이죠.
LLM 모델이 심사를 하고, 그 결과를 ‘보기 쉽게’, ‘공통된 포맷’으로 - 마치 사전에 배부된 ‘평가지’에 심사위원들이 점수와 자기 의견을 적듯이요 - 출력하게 하기 위해서 ‘구조화된 출력 (Structured Outputs)’을 지원하는 모델을 찾았는데요. GPT-4와 Claude Sonnet을 사용하게 됐습니다. 이 모델들이 심사를 하는데 참조할 수 있도록 아래와 같은 템플릿 클래스를 만들었는데요; 모델에게 Creativity, Skill, Scariness의 ‘정도’를 평가하고, 각각에 대한 스스로의 설명을 제공하라고 요청했습니다. 그리고 심사 대상인 호박에 대해서 짧은 이야기 - 커멘트 - 를 함께 만들어내도록 했죠.
이렇게 작성한 스키마, 그리고 만들어진 이미지들을 가지고, 각 모델 개발사 - 오픈AI와 앤쓰로픽이죠 - 가 제공하는 ‘데이터 추출 예시’23에 따라서 심사 작업을 진행했습니다 - 개발사들에서 종종 ‘함수 호출 (Function Calling)’이나 ‘도구 사용 (Tool Use)’이라고 부르는 작업을 한 겁니다. 그리고 여기에 이미지 분석 기능45도 함께 활용했구요.
아래에, 입력값으로 쓰인 이미지, 그리고 그 이미지를 보고 모델이 생성한 JSON 구조의 출력 결과 예시를 하나 보여드리겠습니다:
위에서 보시다시피, 출력 형식이 저렇게 타이트하게 정해져 있고 지켜진다면 아주 편리하죠. 생성된 응답들을 좀 살펴보면, (위 예시는 Claude 모델인데요) 모델이 이미지의 미묘한 디테일까지도 살펴보고, 마치 사람이 보는 것처럼, 이미지를 ‘이해’하듯이 기술하고 있다는 걸 알 수 있습니다.
자, ‘잭-오-랜턴’ 이미지를 생성하고 평가까지 해 봤는데요. 여기서 멈출 수는 없죠. Armilla AI는 AI 시스템이 ‘원래 의도대로’ 잘 작동하는지 검증하고, 그 결과에 따라서 성능에 대한 보장이나 사고에 대한 보험을 제공하는 스타트업이거든요.
실제 기업의 Production 시스템이라면, 견고성 (Robustness), 보안 (Security), 편향성 (Bias) 등 다양한 AI 리스크 요소들을 포함해서 종합적인 분석을 해야겠습니다만, 여기서는 파이프라인의 시스템이 주어진 작업을 어느 정도 잘 수행하는지 이해한다는 차원에서 간단한 점검만 해 봅니다.
정확도 (Accuracy)
첫 번째 살펴볼 건, ‘모델의 평가가 얼마나 정확한가’를 ‘실제 정답 (Ground Truth)’과 비교해 보는 겁니다 - 물론 유즈케이스에 따라서 ‘실제 정답’이라는 게 없거나 애매모호한 경우가 너무나 많습니다만. 어쨌든, 우리는 데이터 - 즉 ‘잭-오-랜턴’ 이미지 - 를 생성하는 과정에서 디자인의 ‘Creativity (독창성)’, ‘Skill (기술력)’, ‘Scariness (무서움)’을 핵심 요소로 지정했었죠. 그래서 이것들이 기준점이 될 텐데요. 직접 이미지들을 살펴보고 ‘낮음’이라면 1점, ‘높음’이라면 5점을 부여한 다음, 32개의 이미지에 대해 모델들이 생성한 점수와의 상관 관계를 살펴봤습니다. 세 가지 기준에 대한 상관 관계 값은 아래와 같습니다:
상관 관계 값은 0에서 1 사이의 범위인데, 1은 실제 정답과 예측값이 "가장 이상적으로” 일치한다는 뜻이죠. GPT와 Claude 기반의 시스템 양쪽 모두 거의 동일한 성능을 보여준 것으로 나타나는데, Claude가 3개 중 2개 항목에서 약간 앞섰지만 큰 차이는 아닙니다.
위 그래프에서 보듯이, 두 모델 모두의 경우에 공통적으로, 상관 관계의 수준이 ‘잭-오-랜턴’의 어떤 측면 - Scariness냐, Creativity냐, Skill이냐 - 을 평가하는 거냐에 따라 차이가 난다는 점이 분명히 드러납니다. Scariness는 약 0.9로 상관 관계가 높구요, Creativity는 약 0.5 정도로 어느 정도의 예측력이 있다고 볼 정도, Skill은 약 0.25 수준으로 상대적으로 약한 연관성을 나타냅니다.
왜 이런 차이가 나타날까요?
생각해 볼 만한 한 가지 이유로, Creativity와 Skill이라는 것의 의미가 Scariness와 비교했을 때 다소 모호할 수 있다는 점을 들 수 있습니다. 예를 들어, 흥미로운 점은 “기술력이 낮다”고 분류된 이미지들 중에서도, 전체적인 디자인은 좀 왜곡되어 있지만 “깔끔한 선”이 있어서 더 높은 점수를 받은 경우들이 있었습니다.
더불어, 인공적으로 생성한 데이터를 사용한 거라서, 실제로는 이미지 생성 모델 - 이 경우에는 Flux죠 - 이 해석한 특성들과 언어모델들 (LLM)의 해석 사이의 일관성을 평가하는 셈이라는 점도 잊지 말아야 할 겁니다.
환각 (Hallucination)
LLM으로 하는 ‘잭-오-랜턴’ 컨테스트에서 뿐만 아니라, 일반적으로도 생성형 AI 기술을 사용하는 서비스와 관련해서 아주 뜨거운 화제가 되는 주제 중 하나가 바로, ‘환각 (Hallucination)’이죠 - 모델이 환각을 보거나, 환각을 만들어낸다거나, 세부적인 사항을 꾸며내면 어떻게 하느냐는 거예요.
여기서는, 모델들이 스스로 어떤 평가를 하는지에 대해서 커멘트를 생성하도록 했으니까, 이 내용을 가지고 모델이 어느 정도의 자유도로 해석 작업을 하는지 확인해 볼 수 있습니다.
확인을 하기 위해서, Claude 3.5 Sonnet 모델에 각 이미지에 대한 상세 설명을 별도로 만들도록 해 봤는데요 - 아래는, ‘Skill은 높은 수준이지만, Scariness는 낮고 - 무섭지 않고 -, 그닥 Creative하지는 않은’ 잭-오-랜턴에 대해서 모델이 만들어 낸 상세 설명 중 하나의 예입니다.
위와 같이 생성한 설명들을, 평가 과정에서 모델이 제시한 별도의 설명들과 비교하기 위한 레퍼런스로 사용합니다. 물론 이 설명들도 언어모델이 생성한 것이니 완벽하지는 않지만, 그래도 현재의 제약 조건에서 비교를 위한 기준점으로는 충분히 사용할 수 있습니다 - 대안도 없구요 ^.^
설명의 ‘Truthfulness’를 평가해 보려고 ‘RAGAS Faithfulness 점수’6를 활용했습니다. 이 점수 체계에도 실무적으로 살펴보면 여러가지 한계점이 있습니다만, 그건 이 글의 범위를 벗어나니 여기서 다루지는 않겠습니다. 다만, 이 점수는 특정한 진술 (여기서는 평가 커멘트)이 주어진 맥락 (여기서는 상세 이미지 설명)에 의해서 얼마나 뒷받침되는가를 측정하는 비교 기준으로 사용하는 겁니다.
아래 차트는 두 시스템 - 오픈AI의 GPT-4와 앤쓰로픽의 Claude - 의 Faithfulness 점수 성능을 비교한 겁니다:
여기서는 GPT-4가 Claude를 약간 앞서고 있는데, 특히 ‘Skill’에 대한 평가에서 GPT의 0.63점과 Claude의 0.72점 사이에는 눈에 띄는 차이가 있다고 보겠습니다. 점수 범위는 대체로 0.63에서 0.77 사이입니다.
기술적으로는 1.0점이 평가 커멘트가 설명에 의해서 완벽하게 뒷받침된다는 것을 의미하지만, 실제 환경에서는 점수가 이보다 낮게 나오는 경우가 상당히 많습니다. 때로는 지나치게 꼼꼼한 기준 때문인 경우도 있구요. 어쨌든, 절대적인 점수보다는 상대적인 점수를 비교하는 것이 더 유용하다고 생각합니다.
전반적으로 봤을 때, 평가 커멘트들이 설명 내용에 의해서 대체로 잘 뒷받침되고 있어서, ‘Truthfulness’라는 측면에서 특별한 우려사항은 발견되지 않습니다.
이 글을 통해서, 할로윈을 맞아서 서양에서 많은 분들이 즐기시는 ‘잭-오-랜턴’ 만들기 컨테스트를 디지털 공간으로 옮겨서, 두 개의 거대 언어모델 (LLM)의 구조화된 출력 (Structured Outputs) 기능, 그리고 이미지 인식 (Image Analysis) 기능, 그리고 이미지 생성 모델을 활용해서 만들어 보고 평가해 봤습니다.
오픈AI와 앤쓰로픽, 양사의 모델 모두 ‘잭-오-랜턴’을 평가하는데 있어서 비슷한 성능을 보여줬고, Truthfulness에 큰 이슈는 발견되지 않았습니다. 그리고 두 모델 모두 만들어진 ‘잭-오-랜턴’이 얼마나 무서운지 판단하는데 뛰어난 능력을 보여줬습니다.
하지만, 독창성, 기술력을 평가하는 능력에 대해서는 아직 의문이 남아있습니다. 많은 경우, 이런 문제들은 주로 모델이 뭘 해야 하느냐를 결정할 때 요구사항을 모호하게 정의하는 데서 비롯되는 경우가 많습니다. 이 시스템이 독창성, 기술력을 더 잘 평가하기를 원한다면, 이것들이 뭘 의미하는지 더 명확하게 설명하도록 프롬프트를 개선하는 것이 도움이 될 수 있겠습니다.
마지막으로, 이 짧은, 어찌보면 재미라고 할 수 있는 실험에, 생성형 AI 제품과 서비스를 만드는 과정에서 체크해 봐야 할 여러가지 요소를 담아보려고 노력했습니다. 특히 이 제품과 서비스가 구체적으로 뭘 하려고 하는 건지 세밀하게 결정하고, 그에 기반해서 평가, 검증하는 작업이 아주 중요하다고 생각합니다. 여러분이 계신 현장에서도 생성형 AI 도입을 고민하고 계신다면, 그런 부분에 대해서도 더 큰 관심을 기울이셨으면 좋겠습니다.
*다음 번에는 ‘영상’을 어떻게 평가할지에 대해서 한 번 실험을 해 볼까요?