IT와 보안 그 어디 쯤

프롬프트 엔지니어링 #1

깊음위에 2024. 7. 5. 09:04
반응형

프롬프트 엔지니어링에 대한 얘기가 많이 나와서 뭔가 싶어 들여다 봤다.

와, 개 사기꾼들 정말 많다.

인터넷 초창기에 인터넷 정보검색사라는 게 있었다. 자격증 시험. 어떻게하면 인터넷에서 검색을 잘할 수 있나.. 지금 생각해보면 그게 자격증이 필요할 일인가..

처음 스마트폰이 보급되면서 트위터가 마구마구 인기를 끌었다. 그 시절에 SNS는 이렇게 쓰는 거다라고 강의하고 다니던 사람들이 있었다. 지들이 트위터를 만들었던가.

지금 느낌이 딱 그렇다. 뭐 되게 전문적인 얘기를 하는 거 같지만, 구체적으로 잘 물어보라는 얘기다. 이거로 돈벌이가 또 된다. 참 아이러니 하고...

그래, 뭐 트위터 어떻게 하는지, 아니 인공지능에 대해 프롬프트를 어떻게 잘 만들어야 하는지 알아보자.

LLM 마다 적용되어야 하는 프롬프트 방식이 다르다.

LLM의 아키텍처와 학습데이터가 다르기 때문에 각 모델에 최적화된 프롬프트가 다르기 때문이다. 예를 들어 GPT-3와 BERT 는 서로 다른 구조와 학습데이터를 가지고 있어서, 효과적인 프롬프트가 다르다.

GPT-3는 언어모델로, 광범위한 텍스트 데이터로 학습되었기 때문에 일반적인 언어 생성 작업에 강점이 있다. 얘한테 효과적인 프롬프트는 자연스러운 언어 생성을 유도하는 것. 예를 들어 "다음과 같은 내용으로 짧은 에세이를 작성해줘:" 와 같은 프롬프트가 효과적일 수 있다.

반면, BERT는 질문과 답변, 문장분류 등의 이해 기반 작업에 강점이 있다. 예를 들어서 "다음 문장이 긍정적인지 부정적인지 판단해 주세요:" 와같은 프롬프트가 BERT에서 더 잘 작동 될 수 있다.

사용 목적에 따라 사용하는 언어모델을 달리하고, 모델의 강점으로 고려해서 적절한 프롬프트를 설계하는 것이 중요하다.

LLM을 사용할 때 파라미터를 조절하는 것이 필요할 수 있다. 파라미터라는 것은 예를 들어 좀더 창의적인 반응을 얻고 싶다 라고 하면, temerature를 높여주면 되다. ( 그러면 거짓말을 밥먹듯이 할 수도 있다. ) top_p를 높여주면 질문할 때 마다 다양한 반응을 얻을 수 있다. 지금 말한 파라미터는 GPT-3기준의 파라미터이고, 모델별, 버전별로 달라질 수 있음을 잊지말자.

대표적인 예로 다음과 같은 차이를 볼 수 있다

  1. Temperature:
  • GPT-3에서는 "temperature"
  • BERT에서는 "softmax_temperature"
  1. Top-p (nucleus sampling):
  • GPT-3에서는 "top_p"
  • BART에서는 "top_k" 와 "top_p"
  1. Top-k sampling:
  • GPT-3에서는 "top_k"
  • CTRL에서는 "top_k_tokens"
  1. Repetition penalty:
  • GPT-3에서는 "repetition_penalty"
  • CTRL에서는 "repetition_penalty"

또 LLM의 구조와 학습 데이터에 따라 최적의 설정값도 달라질 수도 있다. 모델 별로 실험을 통해 적절한 설정을 찾아내는 것이 중요한데, 너님 부자면 막 다 구독하고 막 설정하고, 필요할 때 필요한 AI를 노예처럼 부릴 수도 있지만, 대부분 나처럼 무료 쓰거나 하나 두개 정도 구독하게 되겠지.
필요한 거 한두개 익혀보고 다른 언어모델을 접했을 때, 유사한 설정으로 시작해보고 튜닝하는게 가장 현실적일 것이다.

다양한 LLM 에 공통되고 뻔한 얘기부터 해보자.

프롬프트 엔지니어링에서 대다수의 LLM에 적용할 수 있는 공통된 기법들은 다음과 같다.

  1. 명확성과 구체성: 프롬프트를 명확하고 구체적으로 작성하여 LLM이 이해하기 쉽도록 한다. 애매모호한 표현은 피하는 것이 좋다.
  2. 구조화: 프롬프트를 단계별로 구조화하여 LLM이 논리적으로 이해할 수 있도록 한다. 예를 들어 문제 정의, 입력 데이터, 요구사항 등의 순서로 구성할 수 있다.
  3. 상황 설정: 프롬프트에 상황을 구체적으로 설정하여 LLM이 문맥을 이해하고 적절한 응답을 생성할 수 있도록 한다.
  4. 예시 제공: 프롬프트에 원하는 출력의 예시를 포함하면 LLM이 이를 참고하여 더 나은 결과를 생성할 수 있다.
  5. 메타 지침: 프롬프트에 LLM이 따라야 할 메타 지침을 포함시켜 의도한 방향으로 출력을 유도할 수 있다.
  6. 편향 최소화: 프롬프트에 편향된 내용이 포함되지 않도록 주의하여 공정성과 객관성을 유지한다.

어떠한가 굉장히 뻔한 얘기다. 그런데 잠깐, 여기서 메타지침이 뭘까?

메타 지침(Meta-instructions)이란 프롬프트에 포함되어 LLM에게 전달되는 추가적인 지침 또는 규칙을 의미한다.

메타 지침의 예시

  1. 객관성 유지: "이 주제에 대해 편향되지 않고 객관적으로 설명해 주세요."
  2. 윤리성 준수: "이 내용은 윤리적이고 법적인 범위 내에서 작성해 주세요."
  3. 창의성 발휘: "독창적이고 창의적인 아이디어를 제시해 주세요."
  4. 간결성: "간단명료하게 설명해 주세요. 불필요한 내용은 제외해 주세요."
  5. 구체성: "구체적인 예시와 세부사항을 포함해 주세요."

이렇게 프롬프트에 메타 지침을 포함시켜서 원하는 방향으로 출력을 생성하도록 유도할 수 있다.

위의 내요들은 대부분의 생성형 AI에서 공통으로 가지고 있는 요소들이다.

다음번 내용에서는 GPT-3기준으로, (공짜니까... ) 설정의 기본적인 내용을 시작으로 프롬프트 설계에 대한 내용을 살펴보고 테크닉들에 대해서도 함 다뤄보겠다.

반응형