Should I use Prompting, RAG or Fine-tuning?
OpenAI의 최근 GPT-3.5 Turbo에 대한 Fine-tuning 발표 이후로 Fine-tuning에 대한 관심이 증가하고 있습니다. Fine-tuning이 다시 왜 중요한지에 대해 블로그(why fine-tuning is relevant again)를 작성했고, 그곳에서 언급했듯이 Fine-tuning은 특정 종류의 작업에 여러 가지 이점을 제공합니다.
그러나 Fine-tuning은 언어 모델이 결과를 제공하는 하나의 방법에 불과합니다. 생산 환경에서 LLMs(Language Learning Models)을 사용하려는 사용자들과 대화할 때, 종종 간단한 프롬프트를 작성할 것인지, Retrieval Augmented Generation (RAG)을 사용할 것인지, 아니면 Fine-tuning을 할 것인지 선택해야 하는 문제가 종종 제기됩니다. 때로는 RAG를 Fine-tuning에 추가로 사용할 수도 있어 이 문제는 더욱 흥미롭습니다.
결국, 이것은 구체적인 사용 사례, 훈련 데이터의 유무, 그리고 비용, 품질, 지연 시간, 그리고 개인정보 보호에 대한 기준에 달려 있습니다. 이 글에서 먼저 이러한 접근 방법이 무엇인지 설명하고, 그 다음에 작업에 가장 적합한 접근 방법을 결정하기 위해 물어볼 수 있는 몇 가지 질문을 공유합니다.
Prompting, Retrieval Augmented Generation (RAG), 그리고 Fine-tuning 중에서 선택하는 것은 여러 요인에 따라 달라집니다. 각 방법은 자체적인 장점과 단점이 있습니다.
Prompting (프롬프팅)
- 장점: 간단하고, 빠르게 구현 가능하며, 추가 훈련이 필요 없습니다.
- 단점: 맞춤 설정이 제한적이며, 원하는 출력을 얻기 위해 여러 프롬프트가 필요할 수 있습니다.
Retrieval Augmented Generation (RAG, 검색 증강 생성)
- 장점: 검색과 생성을 결합, 더 동적인 응답 가능, 제한된 데이터로도 잘 작동할 수 있습니다.
- 단점: 복잡하며, 최적의 성능을 위해 Fine-tuning이 필요할 수 있습니다.
Fine-tuning (미세 조정)
- 장점: 매우 맞춤화 가능하며, 특정 작업에 맞게 조정할 수 있고, 성능이 더 좋을 가능성이 있습니다.
- 단점: 훈련 데이터, 컴퓨팅 자원, 기계 학습 전문 지식이 필요합니다.
고려해야 할 요인:
- 사용 사례: 구체적으로 어떤 문제를 해결하려고 하나요?
- 데이터 유무: Fine-tuned 모델을 훈련시키기에 충분한 데이터가 있나요?
- 비용: 훈련을 위한 컴퓨팅 자원에 투자할 의향이 있나요?
- 품질: 어느 정도의 정확성이나 맞춤 설정이 필요한가요?
- 지연 시간: 실시간 응답이 필요한가요?
- 개인정보 보호: 더 안전한 접근 방법이 필요한 민감한 데이터를 다루고 있나요?
이러한 질문에 답함으로써, 특정 필요에 가장 적합한 접근 방법을 더 잘 결정할 수 있습니다.
프롬프팅이란 무엇인가요?
프롬프팅 또는 프롬프트 엔지니어링은 GPT-3 또는 GPT-4와 같은 언어 모델의 행동을 안내하는 기술입니다. 특정 질문이나 문장(즉, “프롬프트”)을 모델에 입력하여 원하는 종류의 출력을 얻습니다.
- 정의: 프롬프팅은 언어 모델에 특정 입력 문자열(즉, “프롬프트”)을 제공하여 그 출력을 안내하는 행위입니다.
- 목적: 모델이 일관되고 관련성 있는 텍스트를 생성하도록 하고, 사용자의 목표와 일치시키는 것이 목적입니다.
어떻게 작동하나요?
- 입력 수정: 모델의 행동을 안내하기 위해 입력 텍스트를 변경합니다.
- 작업 특화: 프롬프트는 특정 작업이나 목표에 맞게 맞춤화될 수 있습니다.
- 복잡성: 프롬프트는 달성하려는 목표에 따라 간단한 문구나 복잡한 문장이 될 수 있습니다.
프롬프트 엔지니어링이란 무엇인가요?
- 정의: 언어 모델로부터 원하는 출력을 얻기 위해 효과적인 프롬프트를 만드는 과정을 프롬프트 엔지니어링이라고 합니다.
- 기술 세트: 언어 모델의 능력과 한계, 그리고 인간 언어의 뉘앙스를 이해하는 것이 포함됩니다.
왜 중요한가요?
- 유연성: 프롬프팅은 추가 훈련 없이도 사전 훈련된 모델로부터 유용한 출력을 빠르고 유연하게 얻을 수 있는 방법을 제공합니다.
- 비용 효율성: 일반적으로 파인 튜닝보다 자원을 덜 소모합니다.
- 적응성: 좋은 프롬프트 엔지니어링은 일반 목적의 모델을 다양한 특정 작업에 유용하게 만들 수 있습니다.
요약하자면, 프롬프팅은 특정 필요에 맞게 언어 모델의 행동을 안내하는 다목적이고 자원 효율적인 방법이며, 프롬프트 엔지니어링은 그러한 효과적인 프롬프트를 만드는 기술입니다.
파인 튜닝이란 무엇인가요?
파인 튜닝은 자연어 처리(NLP)에서 특정 작업이나 도메인에 사전 훈련된 언어 모델을 적용하는 인기 있는 기술입니다.
- 정의: 파인 튜닝은 사전 훈련된 언어 모델을 선택하고, 그 모델을 작업 특화된 작은 데이터셋으로 추가 훈련하여 특정 작업에 적용하는 과정입니다.
- 목적: 모델이 큰, 다양한 데이터셋에서 사전 훈련을 통해 얻은 지식을 활용하여 특정 작업에서의 성능을 향상시키는 것이 목적입니다.
어떻게 작동하나요?
- 1단계: 사전 훈련된 모델: 크고 다양한 데이터셋으로 사전 훈련된 언어 모델을 시작점으로 합니다.
- 2단계: 작업 특화 훈련: 이 사전 훈련된 모델을 작업 특화된 작은 데이터셋으로 추가 훈련합니다.
왜 중요한가요?
- 성능: 파인 튜닝은 일반 목적의 모델을 사용하는 것에 비해 대상 작업에서 더 나은 성능을 보통 보입니다.
- 효율성: 모델을 사전 훈련하는 데 사용된 계산 자원을 활용할 수 있어 비용 효율적입니다.
- 품질, 비용, 지연 시간: 작업 특화된 응용 프로그램에서 이러한 요소를 개선할 수 있습니다.
제한사항
- 데이터 요구사항: 파인 튜닝을 위해 작업 특화된 데이터셋이 필요합니다.
- 컴퓨팅 비용: 파인 튜닝은 자원을 많이 소모할 수 있고, 전문적인 하드웨어가 필요할 수 있습니다.
- 전문 지식: 대체로 기계 학습 원칙에 대한 깊은 이해가 필요합니다.
요약하면, 파인 튜닝은 특별한 데이터셋으로 추가 훈련을 통해 사전 훈련된 언어 모델을 특정 작업에 더 잘 적용할 수 있게 하는 방법입니다. 특정 응용 프로그램을 염두에 두고 모델의 성능을 최적화하려는 경우에 특히 유용합니다.
RAG란 무엇인가요?
Retrieval Augmented Generation (RAG, 검색 증강 생성)은 검색 기반 모델과 생성 모델의 능력을 결합하여 더 문맥적으로 관련성 있는 및 정보가 풍부한 응답을 생성하는 기술입니다. 이것은 외부 정보나 데이터베이스에 접근이 필요한 응용 프로그램에 특히 유용합니다.
- 정의: RAG는 응답을 생성하기 전에 데이터베이스나 코퍼스에서 관련 정보를 검색할 수 있는 능력으로 생성 언어 모델을 보강하는 방법입니다.
- 목적: 검색과 생성 능력을 모두 활용하여 더 문맥적으로 적절하고 정보가 풍부한 응답을 생성하는 것이 목적입니다.
어떻게 작동하나요?
- 1단계: 임베딩 모델: 임베딩 모델을 사용하여 입력 쿼리와 데이터베이스 문서를 벡터로 변환합니다. 이를 통해 의미론적 유사성을 비교할 수 있습니다.
- 2단계: 검색: 모델은 입력 쿼리 벡터와 문서 벡터 간의 ‘거리’를 측정하여 가장 관련성 있는 문서를 식별합니다.
- 3단계: 생성: 생성 모델은 프롬프트, 입력 쿼리, 그리고 검색된 문서를 사용하여 문맥적으로 적절한 응답을 생성합니다.
왜 중요한가요?
- 문맥적 관련성: RAG는 외부 정보를 활용하여 특정 쿼리에 더 관련성 있는 응답을 생성할 수 있습니다.
- 복잡한 쿼리 처리: 모델의 훈련 데이터에 없는 정보가 필요한 쿼리를 처리하는 데 유용합니다.
- 데이터 활용: 모델은 모델의 문맥 창을 초과하는 독점 데이터나 이전 사용자 대화를 활용할 수 있습니다.
제한사항
- 계산 비용: RAG는 검색과 생성 단계 때문에 계산 비용이 높을 수 있습니다.
- 복잡성: RAG를 구현하는 것은 복잡할 수 있으며, 기계 학습과 자연어 처리에 대한 전문 지식이 필요할 수 있습니다.
요약하면, RAG는 더 문맥적으로 관련성 있는 및 데이터 기반의 응답이 필요한 응용 프로그램에 대한 강력한 기술입니다. 검색 기반과 생성 모델의 장점을 결합하여 더 정확하고 정보가 풍부한 출력을 생성합니다.
어떤 접근 방식을 선택해야 할지
어떤 접근 방식을 선택해야 할지에 대해 일련의 질문을 통해 당신의 사용 사례에 적합한 방법을 선택할 수 있도록 도와 드리겠습니다. 이 질문들은 순서대로 봐야 합니다. 예를 들어, 질문 1에 대한 답이 ‘아니오’라면 질문 2로 넘어가야 합니다. 당신의 상황에 맞는 답을 찾을 때까지 계속 진행하세요.
질문 1: 작업이 표준화되어 있고 충분한 훈련 데이터가 있나요?
예시: PDF에서 은행 거래 내역을 JSON 형식으로 추출합니다. 훈련 데이터는 과거 기록을 통해 확보할 수 있습니다.
일반적으로 이러한 파인 튜닝이 결과를 제공하기 시작하려면 수천 개의 행이 필요한 훈련 데이터가 필요하며, 더 많을수록 좋습니다.
이 질문에 대한 답이 ‘예’라면, 오픈 소스 모델(예: MPT-7b 또는 Llama-2)을 파인 튜닝하는 것을 강력히 고려해야 합니다. 파인 튜닝된 오픈 소스 모델은 일반적으로 품질, 비용, 지연 시간 측면에서 프롬프트 기반 접근 방식보다 우수합니다. 모델을 어떻게 파인 튜닝하고 지속적으로 관련성을 유지할 수 있는지에 대한 자세한 내용은 이전에 게시한 글에서 찾을 수 있습니다.
질문 2: 당신의 사용 사례가 대부분 모델의 사전 훈련된 지식에 의존하나요?
예시: 발신자, 수신자, 회사에 대한 일부 세부 정보를 주어 판매 이메일을 생성합니다.
이 질문에 대한 답이 ‘예’라면, 프롬프트 기반 접근 방식이 가장 적합합니다. OpenAI의 GPT-4나 Anthropic의 Claude 2와 같은 강력한 모델에 대한 프롬프트를 만들어 시작하세요. 당신의 사용 사례에 주어진 적절한 평가 지표를 사용하여 여러 테스트 케이스를 실행하세요(자세한 내용은 여기). 그런 다음 GPT-3.5, Claude Instant 또는 Llama-2와 같은 다른 모델에서 프롬프트를 반복적으로 수정하여 품질, 비용, 지연 시간 기준을 충족하는 프롬프트/모델 조합을 결정하세요.
질문 3: 모델이 필요로 하는 추가적인 문맥이 모델의 문맥 창을 초과하나요?
예시: 고객 지원 센터 문서를 기반으로 한 Q&A 챗봇
이 질문에 대한 답이 ‘예’이고 전체 문맥을 사용하지 않아도 응답을 제공할 수 있다면, 검색 증강 생성(RAG)이 선호되는 접근 방식입니다. 문서를 Pinecone, Weaviate, Milvus, Chroma 등의 벡터 데이터베이스에 색인으로 업로드하고, 사용 사례에 적합한 임베딩 모델을 선택하세요(text-embeddings-ada가 항상 최선은 아닙니다 😃). 최상의 검색을 위해 다양한 청크 전략을 시도하세요. 문맥이 프롬프트에 있으면, 위에서 설명한 프롬프트 엔지니어링 팁을 따라 응용 프로그램이 원하는 결과를 제공하는지 확인하세요.
참고: 많은 양의 문맥이 필요하고 그 모든 것이 생성을 제공하기 위해 필요한 작업이 있습니다. 이러한 예로는 100페이지의 문서를 논리적인 경계로 분할하는 것이 있습니다. 이러한 경우에는 전체 문서를 문맥으로 받아들일 수 있는 큰 문맥 창을 가진 모델이 필요합니다. 2023년 8월 현재로는, 가장 큰 문맥 창을 가진 모델은 Anthropic Claude가 100k 토큰(~150 페이지), OpenAI의 GPT-4가 32k 토큰(~50 페이지)입니다.
보너스 질문: 작업이 표준화되어 있고, 모델이 독점 데이터에 접근해야 합니다. 어떻게 해야 하나요?
예시: 오랫동안 RAG를 실행하고 있고, 환영(가상의 정보 생성)을 최소화하거나 비용/지연 시간을 줄이고 싶습니다.
이것은 RAG와 파인 튜닝을 함께 사용할 수 있는 경우 중 하나입니다. 높은 품질의 입력-출력 데이터셋(입력은 RAG 결과를 포함하고, 출력은 올바른 답변입니다)이 있으면, 검색 결과에서 올바른 문맥을 식별하기 위해 오픈 소스 모델을 파인 튜닝할 수 있습니다. 실행 시간에, 파인 튜닝된 모델은 여전히 벡터 데이터베이스에서 검색 결과를 가져오지만, 원하는 출력을 제공하기 위해 추가적인 문맥이 너무 많이 필요하지 않을 것입니다.
LLM 애플리케이션을 구축하면서 이를 활용하는 방법
보시다시피, LLM 애플리케이션을 구축하는 접근 방식은 특정 작업에 크게 의존합니다. 여러 LLM 호출을 함께 결합할 수 있고, 애플리케이션에는 프롬프트, RAG, 그리고 파인 튜닝된 모델이 모두 포함될 수 있습니다. 특정 사용 사례에 대한 맞춤형 조언을 원하고, 많은 사용자 정의 코드를 작성하지 않고도 애플리케이션에서 이러한 접근 방식을 시도하고 싶다면, 여기에서 Vellum의 14일 무료 체험을 신청하세요. LLM으로 무엇을 구축하게 될지 기대되네요!
이러한 다양한 접근 방식을 통합하여 애플리케이션을 더욱 강력하고 유연하게 만들 수 있습니다. 특히, 복잡한 작업이나 다양한 데이터 소스를 다루는 경우에는 이러한 다양한 접근 방식이 특히 유용할 수 있습니다. 따라서, 사용 사례와 요구 사항에 따라 적절한 조합을 찾는 것이 중요합니다.
Generative AI project lifecycle
ChainForge 소개: 프롬프트 엔지니어링을 위한 시각적 프로그래밍 환경
ChainForge: LLM Evaluation Tool
언어 모델 응용 프로그램에 적합한 접근 방식을 선택하기 위해서는 작업의 성격, 훈련 데이터의 유무, 그리고 품질, 비용, 지연 시간 등에 대한 특별한 요구사항을 고려해야 합니다. 다음은 결정을 도와줄 가이드입니다:
접근 방식을 선택하기 위한 단계별 가이드
질문 1: 작업이 표준화되어 있고 충분한 훈련 데이터가 있나요?
- 예시: PDF에서 은행 거래 내역을 JSON 형식으로 추출해야 하며, 훈련 데이터가 과거 기록을 통해 확보되어 있다면.
- 데이터 요구사항: 일반적으로 파인 튜닝이 효과를 보기 시작하려면 수천 개의 행이 필요하며, 더 많을수록 좋습니다. 예: 오픈 소스 모델(예: MPT-7b 또는 Llama-2)을 파인 튜닝하는 것을 강력히 고려해야 합니다. 파인 튜닝은 품질, 비용, 지연 시간 측면에서 일반적으로 프롬프트 기반 접근 방식보다 우수합니다. 아니오: 다음 질문으로 넘어갑니다. Fine-tuning open source models: why is it relevant now?
질문 2: 작업이 잘 구성된 프롬프트로 해결될 만큼 간단한가요?
- 예시: 자주 묻는 질문에 답하는 챗봇을 만들고 있다면. 예: 프롬프트 기반 접근 방식이 충분할 수 있습니다. 프롬프트 엔지니어링은 필요한 결과를 빠르고 비용 효율적으로 얻을 수 있는 방법입니다. 아니오: 다음 질문으로 넘어갑니다.
질문 3: 외부 데이터를 활용하거나 복잡한 쿼리를 처리해야 하나요?
- 예시: 대규모 데이터베이스나 텍스트 코퍼스를 기반으로 질문에 답해야 하는 응용 프로그램이 있다면. 예: 검색 증강 생성(RAG)을 사용하는 것을 고려해야 합니다. 이 접근 방식은 모델이 외부 정보에 접근해야 하는 작업에 유용합니다. 아니오: 간단한 프롬프트 기반 접근 방식이나 파인 튜닝이 충분할 수 있습니다.
질문 4: 비용, 지연 시간, 품질 측면에서 제약 조건은 무엇인가요?
- 특별한 요구사항과 제한 사항을 평가합니다. 예를 들어, 지연 시간이 낮아야 한다면 프롬프트 기반 접근 방식이 더 적합할 수 있습니다. 파인 튜닝과 RAG는 계산 비용이 높을 수 있습니다.
이러한 질문에 순차적으로 답함으로써 특정 사용 사례에 가장 적합한 접근 방식을 좁혀나갈 수 있습니다. 각 접근 방식은 장단점이 있으며, 프로젝트의 고유한 요구사항에 따라 올바른 선택이 달라질 것입니다.