코딩없이 초거대언어모델(LLM)을 활용하는 법: 프롬프트 엔지니어링(Prompt Engineering)이란?

코딩없이 초거대언어모델(LLM)을 활용하는 법: 프롬프트 엔지니어링(Prompt Engineering)이란?

챗GPT의 등장은 확실하고도 빠르게 인공지능 언어모 델에 대한 사용자의 진입 장벽을 낮추어 주었다.

이제 사용자들은 더이상 초거대언어모델(LLM)을 텍스트 분류, 감정분석, 챗봇 등 활용 목적에 맞게 미세조정(Fine-tuning) 하는 과정없이, Python이나 R과 같은 프로그래밍언어가(Programming Language)가 아닌 일상 생활에서 사용하는 한글이나 영어 등 자연어(Natural Language)로 된 명령어를 몇 줄 작성하는 프롬프트 엔지니어링(Prompt Engineering) 만으로도 꽤나 만족스러운 결과를 얻을 수 있게 되었다.

이러한 트렌드를 반영하듯 얼마전 국내 모 인공지능 스타트업은 개발 경력과 학력에 무관하게 (경험과 지식이 없어도 ‘열정’만 있으면 ‘누구나’ 지원 가능하다고 한다!) 억대 연봉을 제시하며 프롬프트 엔지니어(Prompt Engineer)를 채용한다는 공고를 내며 화제가 되기도 하였다. 이처럼 OpenAI가 제공하는 챗GPT의 인터페이스를 활용하여 누구나 성능좋은 모델을 개발할 수 있다면, 딥러닝/머신러닝 개발자와 NLP 전문가 및 데이터 사이언티스트의 역할은 이제 다한 것일까? 이번시간에는 프롬프트 엔지니어링(Prompt Engineering)의 가능성과 한계에 대해 알아보자.

프롬프트 엔지니어링(Prompt Engineering) : 손쉽게 맞춤형 챗봇을 개발하는 방법

챗GPT과 같은 언어모델(Language Model)에게 적절한 지시어와 사전정보를 제공하는 작업을 통해, 인공지능이 최대치의 성능을 발휘하도록 유도하여 원하는 결과물을 얻어내는 기법을 프롬프트 엔지니어링(Prompt Engineering)이라고 한다.

언어모델이 문맥속에서 주어진 테스크에 대한 예시나 설명을 통해 사용자의 명령을 유추해 낸다는 의미로 인컨텍스트 러닝(In-Context Learning)이라고도 한다. 엔지니어링(Engineering)이라는 단어가 들어가지만, Python과 같은 프로그래밍언어를 능숙하게 다룰줄 몰라도 되고, 언어모델의 구조나 딥러닝에 대한 깊은 이해도 필요하지 않다는 것이 특징이다.

프롬프트 엔지니어링(Prompt Engineering)은 언어모델 구축에 소요되는 기간과 비용을 획기적으로 줄여주었다. 기존에 언어모델(Language Model)을 활용하여 챗봇, 번역기, 분류기 등을 개발하기 위해서는 적게는 수천건에서 많게는 수천만 건까지 직접 데이터셋(dataset)을 구축한 뒤, 지도학습(Supervised Learning)을 위한 데이터를 라벨링(Labeling) 하여 사전학습된(pre-trained model)을 훈련(Training)시켜 원하는 작업의 수행을 지시하는 미세조정(Fine-Tuning) 과정이 필요했는데, 이제 이러한 복잡한 과정 없이 단 몇초만에 챗봇개발이 가능해진 것이다.

또한 프롬프트 엔지니어링은 위에서도 언급했듯이 언어모델의 기술적 장벽을 획기적으로 낮추어주었다. 기존 미세조정(Fine-tuning) 작업을 위해서는 Transformer나 Bert 그리고 챗GPT의 근간이 되는 GPT와 같은 초거대언어모델(Large Language Model)의 아키텍처(Architecture)에 대한 깊은 이해가 필요했다. 같은 사전학습(pre-trained) 모델을 사용하더라도 훈련 데이터셋의 분포(distribution)와 초매개변수(Hyperparameter) 조정 결과 등 개발자의 지식과 숙련도에 따라 같은 언어모델이라도 성능차이가 생길 수 있기 때문이다.

이제 언어모델 사용자는 더이상 초매개변수(Hyperparameter)나 활성함수(active function)와 같은 딥러닝(Deep Learning)과 언어 모델(Language Model) 구조에 대한 고민 없이도 머신러닝 개발자처럼 그럴듯한 인공지능 모델을 간편하게 만들고 사용할 수 있게 되었다. 언어모델의 구조를 설계하고 변경하는 작업 없이도 OpenAI에서 제공하는 채팅 인터페이스(Interface)와 API를 활용하기만 하면 언어모델 활용이 가능하기 때문이다.

프롬프트 엔지니어링 예시

우리는 프롬프트 엔지니어링(Prompt Engineering)을 어떻게 활용할 수 있을까? 실제 예시를 통해 살펴보자. 우선 챗GPT 사용자는 인공지능 모델에게 상세하고 분명하게 원하는 결과물에 대한 가이드라인을 제시해야 한다. 예를들어 아래와 같이 영어를 한글로 번역하는 태스크를 수행하는 모델을 챗GPT를 활용하여 만들어낸다고 가정해보자.

아래와 같이 챗GPT에게 단순히 ‘I am a Machine Learning Engineer’라는 문장을 번역해달라고 요청할 수 있다. 문장이 짧은 경우, 무리없이 원하는 결과를 얻을 있지만 문장이 길어지거나 한발 더 나아가 인풋에 대한 결과값을 특정한 형식에 맞추어 일괄적으로 보여주는 번역기를 만들고 싶을 때는 어떻게 해야할까?

사용자는 아래와 같이 프롬프트(Prompt)를 입력함으로써 훌륭한 영한 번역기를 만들어낼 수 있다.. 우선 챗GPT에게 수행하고자 하는 태스크와 목적을 명확하게 입력한다. 그 이후 결과물이 특정한 형식에 맞게 출력될 수 있도록 지정해준다. 영어 이외의 언어가 입력값으로 들어왔을 때 임의로 부정확한 답을 해주는 것을 방지하기 위해 조건을 지정해준다.

프롬프트 엔지니어링의 다양한 방법론들
1.Chain-of-Thought(생각의 사슬) 프롬프트 기법

번역이나 요약과 같은 단순한 텍스트 변환작업을 넘어서 LLM을 활용해 좀 더 복잡한 추론문제들을 풀 수는 없을까? 프롬프트 엔지니어링 연구자들은 Chain-of-Thought(생각의 사슬) 기법을 통해 LLM의 논리적 추론 능력을 극적으로 끌어올렸다. 구글에서 게재한 논문 ‘Chain-of-Thought Prompting Elicits Reasoning in Large Language Models'에서는 인과관계를 추론하는 과제를 LLM에 던져줄 때, 프롬프트를 통째로 입력하는 것이 아닌 문답형식(문-답-문-답)으로 풀어서 입력했을 때 훨씬 더 좋은 추론능력을 보여주었다고 한다.

2.Zero-shot CoT와 Few-shot CoT

이러한 CoT(Chain-of-Thought) 방법론은 또다시 Zero-shot CoT와 Few-shot CoT로 나뉜다. 전자는 ‘Let’s think step by step(차근차근 생각해보자)’와 같이 일반적인 자연어를 입력하여 언어모델이 스스로 단계를 밟아가며 문-답-문-답 형식의 답을 제출하도록 유도하는 것을 말하고, 후자는 사용자가 직접 작성한 문장 형식의 프롬프트를 입력하여 더욱 정교하게 추론 과정을 밟아가도록 하는 것을 말한다.

프롬프트 엔지니어링의 한계점

모든 테크닉이 그러하듯, 프롬프트 엔지니어링에도 분명 한계점은 있다. 모델 재학습에 드는 훈련 비용의 절감과 진입장벽 해체라는 매력에도 불구하고 정작 기업들이 프롬프트 엔지니어링을 적극적으로 도입하지 못하는데에는 이유가 있다. 기존의 미세조정(Fine-Tuning) 방식과 프롬프트 엔지니어링(Prompt Engineering) 방식을 모두 접해본 입장으로써, 개인적으로 느낀 프롬프트 엔지니어링의 한계점에 대해 이야기해보도록 하겠다.

1. 언어모델에 대한 무관심과 이해부족

딥러닝 기술이 발전하고 활용분야가 넓어지면서 모델의 결과산출 프로세스를 알 수 없는 블랙박스 모델(Blackbox Model)에 관한 문제가 증가하고 있다. 언어모델또한 예외는 아니다. 우리는 그럴듯한 언어모델의 결과물에 속아넘어갈 리스크를 항상 떠안고 있음을 인지해야 한다. 특히 그 결과물을 활용하는 사용자는 기술이 발전할수록 언어모델의 한계점과 가능성에 대해 명확히 이해하는 것이 중요하다.

프롬프트 엔지니어(Prompt Engineer)는 자연어처리에 대한 기본개념이 없으면 모델 활용조차 어려웠던 여태까지의 NLP(자연어처리) 전문가들과 다르게 언어모델의 작동원리에 대한 지식이 부족하거나 무관심해질 우려가 있다. 그 활용법이라는 것이 초거대 언어모델의 작동원리 이해와는 크게 상관이 없기 때문이다. 최첨단 비행기를 몰기 위해 파일럿이 비행기의 구조를 세세하게 알 필요는 없지 않은가? 그러나 비상상황을 대비하여 파일럿들이 비행기의 기본적인 구조와 비행원리를 배우듯이 프롬프트 엔지니어들 또한 언어모델의 작동원리에 대한 꾸준한 관심이 필요하다.

2.챗GPT의 데이터 보안문제

OpenAI사는 챗GPT의 사용자 데이터를 자사의 모델 강화를 위한 데이터로 활용한다고 명시하고 있다. GPT-3, GPT-4와 같은 기초모델(Foundation Model)의 API를 활용하는 경우는 데이터를 수집하지 않는다고 밝혔지만, 사용자 입장에서 실제로 OpenAI가 그 약속을 지키고 있는지 확인할 방법은 없다. 기존의 미세조정(Fine-Tuning) 기법으로는 이러한 보안 이슈가 거의 발생하지 않는다. 시간과 노력은 오래 걸리지만, 한 번 구축해놓은 언어모델은 온전히 기업의 소유가 되기 때문이다.

데이터 보안이라는 치명적인 문제를 이유로 국내 최대 대기업 삼성전자는 사내업무에 챗GPT 활용을 금지했다. 철저한 개인정보 보호가 가장 큰 관심사라고 해도 과언이 아닌 국내 금융업 계열사들도  같은 이유로 업무에 챗GPT를 활용하는 것에 조심스럽다. OpenAI라는 회사가 LLM 시장을 독점하고, 투명한 데이터 취급 정책을 발표하지 않는 한 앞으로도 챗GPT를 활용하는 프롬프트 엔지니어링의 비즈니스/공공 분야 사용은 확산되기 어려울지도 모른다.

3.정보의 신뢰성 문제 : 할루시네이션(Hallucination)

챗GPT를 둘러싼 데이터 보안문제의 연장선으로, 정보의 정확성 및 신뢰성을 확인할 방법이 없다는 것 또한 치명적인 문제이다. 챗GPT는 프롬프트 엔지니어링(Prompt Engineering)을 거치더라도 괘나 높은 빈도로 엉터리 답(Hallucination)을 내놓는다. 이러한 문제는 모델의 발전과 엔지니어링 기법의 발전에 따라 점차 개선되겠지만, 현 시점에서 인풋에 대한 일관된 결과가 나오지 않는다는 것은 치명적인 문제임에 분명하다.






문과 출신으로 AI 스타트업에서 데이터 사이언티스트로 일하고 있습니다. 



* 슈퍼브 블로그의 외부 기고 콘텐츠는 외부 전문가가 작성한 글로 운영 가이드라인에 따라 작성됩니다. 슈퍼브 블로그에서는 독자분들이 AI에 대한 소식을 더 쉽고 간편하게 이해하실 수 있도록 유용한 팁과 정보를 제공하고 있습니다.