/ GENAI, GCP

Generative AI 1 - Prompt Design Study

본 글은 제 개인적 학습을 위해 Generative AI with Vertex AI: Prompt Design 실습한 내용의 일부를 적은 글입니다. Prompt Design에 대하여 설명하지 않으며, 학습이 필요하시다면 Intro 부분을 참고하시기 바랍니다.

Intro

요즘 주목받는 GenAI를 공부하며, 많은 자료들을 찾아보고 있습니다. 과거에도 Google은 제가 k8s나 terraform을 공부할 때도 도움이 되는 학습자료를 많이 제공해 주었는데, GenAI 분야에서도 큰 도움을 주고 있네요. (🤗 문서와 더불어 학습하기 정말 최고인 것 같습니다.)

실습 환경을 제공해 주는 Qwiklabs(Generative AI with Vertex AI: Prompt Design)에서 실습을 할 수 있지만, 해당 과정은 크레딧이 필요한 유료과정입니다. 그러나, GoogleCloudPlatform의 generative-ai 깃헙에서 Colab에서 실습할 수 있는 환경을 제공하고 있습니다. 또한, 파이썬 코드만 참고하여 Google Cloud의 Vertex AI 대신 다른 언어 모델을 활용해 과금을 피할 수 있습니다.


👍 Prompt Design Best Practices

프롬프트의 의도를 잘못 해석할 가능성을 줄이기 위해 “unfancy” 하게 작성하는 방법을 다음과 같이 안내합니다.

  • 간결하게 작성
  • 구체적이고 명확하게 정의
  • 한 번에 하나의 작업만 요청
  • 예시를 포함하여 응답 품질 개선
  • 생성 작업을 분류 작업으로 바꿔 안전성 개선

생성형 작업은 브레인스토밍에 유용한 개방형 응답을 유도합니다.
예) 프로그래밍 실력을 향상시키는 방법을 추천해 주세요.
분류 작업은 결과의 가변성을 줄입니다.
예) Python, Java, C 중 어떤 활동을 추천하고 이유를 알려주세요

위 원칙을 포함하여 N-shot Prompting을 통해 향상된 답변을 받을 수 있습니다.

🖥️ Prompt Design

해당 부분에서는 5가지 분야에서 효과적인 Prompt를 작성하는 방법을 안내합니다.

1. Ideation

Generative 모델의 장점을 활용하여 아래와 같은 사용 예시를 소개합니다.

  • 마케팅 캠페인 활용 방법
  • 몇 가지 예시 질문을 생성하여 테스트용 문제 제작 방법
  • 밈, 인터뷰 질문, 이름 생성
  • 팁과 조언 받기
  • 의인화(impersonation) 하여 답변 받기

2. Question & Answering

question-answering 프롬프트를 만들 때는 가능한 많은 맥락(context)을 제공해야 합니다.

배경지식

  • Open domain:
    • Zero-shot prompting
    • Few-shot prompting
  • Closed domain:
    • Providing custom knowledge as context
    • Instruction-tune the outputs
    • Few-shot prompting

📭 Open

Few-shot 프롬프프 예시

prompt = """Q: 한국의 수도는 어디인가요?\n
            A: 서울
            Q: 미국의 수도는 어디인가요?\n
            A:
         """

📪 Closed

프롬프트에 내부 지식을 컨텍스트로 추가

context = """
Amazon S3의 데이터 보호 \n
Amazon S3에서는 미션 크리티컬 및 기본 데이터 스토리지에 적합하게 설계된, 내구성이 뛰어난 스토리지 인프라를 제공합니다. \n
AWS 리전의 최소 3개 가용 영역에 걸쳐 여러 디바이스에 객체를 중복 저장합니다.
...생략...
지정된 기간 동안 객체에 대해 99.999999999%의 내구성과 99.99%의 가용성을 제공할 수 있도록 설계되었습니다.
"""

question = "고가용성은 어떻게 달성됩니까?"

prompt = f"""아래 컨텍스트에서 대답합니다:
Context: {context}\n
Question: {question} \n
Answer:
"""

Instruction-tuning outputs (미움받을 용기 🤣)

모델이 컨텍스트에 제공된 외의 정보를 사용할 수 없게 지정하려면 다음과 같은 기법을 반영합니다.

question = "허깅페이스 모델을 호스팅 하려면 어떻게 해야 하나요?"

prompt = f"""주어진 다음 컨텍스트{Context}에 대해 대답하세요. \n
만약 {Context}에서 답변할 수 없고 출력에 확신이 없는 경우,
"제공된 컨텍스트에서 사용할 수 없는 정보"라고 말하세요. \n\n
Context: {context}?\n
Question: {question}\n
Answer:
"""

평가

질문과 ground truth(정답)에 대한 데이터 프레임을 만들어, Levenshtein distance, fuzzywuzzy 라이브러리를 사용해 평가합니다.

3. Text Classification

Classify, Given 등의 명령어를 프롬프트에 넣어 다양한 텍스트 분류 예시들을 보여줍니다.

  • Zero-shot 프롬프팅을 통한 문장 예측
  • Few-shot 프롬프팅을 통한 맥락에 맞는 분류
  • 주제 분류/스팸 탐지/의도 인식/언어 파악/유해성 파악/감정 파악

평가

해당 방법도 앞선 단계와 같이 ground truth(정답)과 예측에 대한 데이터 프레임을 만들고, sklearn.metrics 등을 활용하여 정확도를 평가합니다.

4. Text Extraction

다음과 같은 텍스트 추출 예시들을 보여줍니다.

  • 출력 예시(JSON 구조)를 프롬프트로 주고, 특정 문자열 들을 나열하여 주어진 포맷으로 출력하기
  • 프롬프트에 JSON 구조(key)를 정하고, 해당 키에 맞춰 JSON 구조로 출력하기
  • 문맥을 Few-Shot으로 제공하고 명령에 따라 대답 출력하기

5. Text Summarization

다음과 같은 지시를 프롬프트에 넣어 텍스트 요약 예시들을 보여줍니다.

  • 스크립트 요약
    • Provide a very short summary, no more than three sentences, for the following article:
    • Provide a TL;DR for the following article:
  • 글머리 기호(-, *)로 요약
    • Provide a very short summary in four bullet points for the following article:
  • # 토큰화 (SNS에서 #맛집, #추천 등의 요약)
    • Tokenize the hashtags of this tweet:
  • 5가지의 옵션으로 제목 생성
    • Write a title for this text, give me five options:

평가

요약 결과를 ROUGE 프레임워크로 평가합니다. 해당 측정법은 컴퓨터가 생성한 요약과 사람의 이상적인 요약 간의 n-gram, word sequences, word pairs 등의 겹치는 단어의 수를 계산합니다.


Outro

이제서야, 이전 RAG 포스팅에서 언급했던 메타의 ‘오픈북과 클로스드북 장점의 결합’과 ‘Instruction-tuning outputs의 존재 이유’가 이해 가는 것 같습니다. 또한 정량적인 평가 기준을 마련하는 방법을 알게 되어 매우 뿌듯합니다. 배움의 즐거움을 느끼게 해준 구글의 자료에 다시한번 감사함을 느낍니다.

본 글의 원본 교육 자료는 이 링크에서 만날 수 있습니다. 실습을 통해 Gen AI 지식을 얻어 가세요! 🤗


Gen AI Study Checkpoint

-->