생성 모델 정보

Gemini 모델 제품군과 같은 생성형 인공지능 (AI) 모델은 텍스트, 이미지, 오디오를 비롯한 다양한 유형의 데이터 입력에서 콘텐츠를 생성할 수 있습니다. 가장 기본적인 수준에서 이러한 모델은 정교한 자동 완성 애플리케이션처럼 작동합니다. 입력 텍스트 ('말을 물가로 데려갈 수는 있지만')가 주어지면 생성형 모델은 학습 데이터에서 학습한 패턴을 기반으로 통계적으로 뒤에 올 가능성이 높은 출력 텍스트 ('마음을 움직일 수는 없지요')를 예측할 수 있습니다. 생성형 모델의 이 기본 속성을 다양한 애플리케이션에 사용할 수 있습니다.

  • 시, 단편 소설, 은유, 블로그 게시물과 같은 창의적 글쓰기 생성
  • 구조화된 데이터를 자유 형식 텍스트로 변환
  • 자유 형식 텍스트에서 정보 추출 및 요약
  • 코드 생성
  • 언어 간 번역

생성형 모델을 사용하여 이러한 기능을 빌드하는 데는 머신러닝 (ML) 전문 지식이 필요하지 않습니다. 대규모 데이터 세트를 수집하거나 모델을 학습할 필요가 없습니다. 첫 번째 프로토타입을 시작하려면 모델이 수행할 작업을 몇 문장으로 설명하기만 하면 됩니다.

텍스트 입력 및 출력만 처리하는 생성 모델을 대규모 언어 모델 (LLM)이라고도 합니다. Gemini 모델 제품군은 텍스트 데이터 외에도 더 많은 것을 처리할 수 있으며 LLM의 기능을 실행할 수 있지만 생성형 모델이라고 하는 것이 더 적절합니다.

애플리케이션 예시

다음 예는 생성형 모델의 일반적인 텍스트 입력과 출력을 보여줍니다.

시 생성

사용자 입력: Write me a four-line poem about puppies and Android phones. Make sure it rhymes.

모델 출력:

Puppies are cute,
Android phones are neat,
They both bring joy,
And make life complete.

목록 생성

사용자 입력: Generate a bulleted list of items I need to pack for a three-day camping trip.

모델 출력:

*   Tent
*   Sleeping bag
*   Sleeping pad
*   Camp stove
*   Pots and pans
*   Utensils
*   Food
*   Water
*   First-aid kit
*   Sunscreen
*   Insect repellent
*   ...

적절한 입력 텍스트(프롬프트라고도 함)를 작성하기만 하면 생성형 모델이 이와 같은 유용한 동작을 다양하게 생성하도록 할 수 있습니다. 생성형 모델이 원하는 작업을 하도록 하는 올바른 문구를 찾는 기술과 과학을 프롬프트 설계('프롬프트 엔지니어링' 또는 '프롬프트'라고도 함)라고 합니다.

프롬프트 설계 101

이전 섹션에서는 '시를 써 줘'와 같이 안내가 포함된 프롬프트의 예를 보여 드렸습니다. 이러한 유형의 안내는 특정 유형의 작업에 적합할 수 있습니다. 하지만 다른 애플리케이션의 경우 몇 번만 프롬프트라는 다른 프롬프트 기법이 더 효과적일 수 있습니다. 퓨샷 프롬프트는 대규모 언어 모델이 텍스트 데이터의 패턴을 인식하고 복제하는 데 매우 탁월하다는 사실을 활용합니다. 생성 모델에 완료하도록 학습하는 텍스트 패턴을 전송하는 것이 핵심입니다. 예를 들어 국가 이름을 입력으로 받아 수도를 출력하는 애플리케이션을 빌드하려고 한다고 가정해 보겠습니다. 다음은 이를 위해 설계된 텍스트 프롬프트입니다.

Italy : Rome
France : Paris
Germany :

이 프롬프트에서는 [country] : [capital] 패턴을 설정합니다. 이 프롬프트를 대규모 언어 모델에 전송하면 패턴이 자동 완성되고 다음과 같이 반환됩니다.

     Berlin
Turkey : Ankara
Greece : Athens

이 모델 응답이 약간 이상해 보일 수 있습니다. 모델은 독일의 수도 (필기 프롬프트의 마지막 국가)뿐만 아니라 추가 국가 및 수도 쌍의 전체 목록도 반환했습니다. 생성형 모델이 '패턴을 이어가기' 때문입니다. 입력 국가의 수도(예: '독일: 베를린')를 알려주는 함수를 빌드하는 것만이 목적이라면 모델이 '베를린' 뒤에 생성하는 텍스트는 중요하지 않을 수 있습니다. 실제로 애플리케이션 디자이너는 이러한 불필요한 예시를 자르는 것이 좋습니다. 또한 Germany가 고정 문자열이 아니라 최종 사용자가 제공하는 변수가 되도록 입력을 매개변수화하는 것이 좋습니다.

Italy : Rome
France : Paris
<user input here> :

국가 수도를 생성하기 위한 짧은 프롬프트를 작성했습니다.

몇 번의 프롬프트 템플릿에 따라 많은 작업을 완료할 수 있습니다. 다음은 Python을 JavaScript로 변환하는 약간 다른 형식의 프롬프트입니다.

Convert Python to JavaScript.
Python: print("hello world")
JavaScript: console.log("hello world")
Python: for x in range(0, 100):
JavaScript: for(var i = 0; i < 100; i++) {
Python: ${USER INPUT HERE}
JavaScript:

또는 이 '역사전' 프롬프트를 사용해 보세요. 정의가 주어지면 해당 정의에 맞는 단어를 반환합니다.

Given a definition, return the word it defines.
Definition: When you're happy that other people are also sad.
Word: schadenfreude
Definition: existing purely in the mind, but not in physical reality
Word: abstract
Definition: ${USER INPUT HERE}
Word:

이러한 짧은 프롬프트의 정확한 패턴은 약간 다를 수 있습니다. 프롬프트에 예시를 포함하는 것 외에도 프롬프트에 안내를 제공하는 것도 자체 프롬프트를 작성할 때 고려할 수 있는 추가 전략입니다. 이는 모델에 의도를 전달하는 데 도움이 됩니다.

프롬프트 표시 및 기존 소프트웨어 개발 비교

신중하게 작성된 사양에 따라 설계된 기존 소프트웨어와 달리 생성형 모델의 동작은 모델 트레이너에게도 상당히 불투명합니다. 따라서 특정 모델에 가장 적합한 프롬프트 구조 유형을 미리 예측할 수 없는 경우가 많습니다. 또한 생성형 모델의 동작은 대부분 학습 데이터에 의해 결정되며, 모델은 새 데이터 세트를 기준으로 지속적으로 조정되므로 모델이 충분히 변경되어 가장 효과적인 프롬프트 구조가 의도치 않게 변경되는 경우가 있습니다. 이번 업데이트로 크리에이터에게 어떤 영향을 미치나요? 실험해 보세요. 다양한 프롬프트 형식을 사용해 보세요.

모델 매개변수

모델로 보내는 모든 프롬프트에는 모델이 응답을 생성하는 방법을 제어하는 매개변수 값이 포함됩니다. 모델은 서로 다른 매개변수 값에 대해 서로 다른 결과를 생성할 수 있습니다. 가장 일반적인 모델 매개변수는 다음과 같습니다.

  1. 최대 출력 토큰: 응답에서 생성할 수 있는 최대 토큰 수를 지정합니다. 토큰 1개는 약 4자(영문 기준)입니다. 토큰 100개는 단어 약 60~80개에 해당합니다.

  2. Temperature: 온도는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)는 응답 생성 중 샘플링에 사용되며 topPtopK가 적용될 때 발생합니다. 강도가 낮을수록 확정적이거나 덜 개방형 응답이 필요한 프롬프트에 적합하며, 강도가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 강도가 0이면 확정적입니다. 즉, 확률이 가장 높은 응답이 항상 선택됩니다.

  3. topK: topK 매개변수는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. topK가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다 (그리디 디코딩이라고도 함). 반면에 topK가 3이면 강도를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다. 각 토큰 선택 단계에서 확률이 가장 높은 topK 토큰이 샘플링됩니다. 그런 다음 강도 샘플링을 사용하여 선택된 최종 토큰으로 topP을 기준으로 토큰을 추가로 필터링합니다.

  4. topP: topP 매개변수는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 토큰은 확률의 합이 topP 값과 같아질 때까지 확률이 가장 높은 순에서 낮은 순으로 선택됩니다. 예를 들어 토큰 A, B, C의 확률이 0.3, 0.2, 0.1이고 topP 값이 0.5이면 모델은 온도를 사용하여 다음 토큰으로 A 또는 B를 선택하고 C는 후보에서 제외합니다. 기본 topP 값은 0.95입니다.

  5. stop_sequences: 모델에 콘텐츠 생성을 중지하도록 지시하는 중지 시퀀스를 설정합니다. 중지 시퀀스는 어떤 문자 시퀀스든 될 수 있습니다. 생성된 콘텐츠에 표시될 수 있는 문자 시퀀스는 사용하지 않는 것이 좋습니다.

프롬프트 유형

프롬프트에 포함된 컨텍스트 정보의 수준에 따라 프롬프트는 크게 세 가지 유형으로 분류됩니다.

제로샷 프롬프트

이러한 프롬프트에는 모델이 복제할 예시가 포함되어 있지 않습니다. 제로샷 프롬프트는 추가 예시나 정보 없이 프롬프트를 완료하는 모델의 능력을 보여줍니다. 즉, 모델은 기존 지식을 기반으로 그럴듯한 답변을 생성해야 합니다.

일반적으로 사용되는 제로샷 프롬프트 패턴은 다음과 같습니다.

  • Instruction-content
<Overall instruction>
<Content to operate on>

예를 들면 다음과 같습니다.

Summarize the following into two sentences at the third-grade level:

Hummingbirds are the smallest birds in the world, and they are also one of the
most fascinating. They are found in North and South America, and they are known
for their long, thin beaks and their ability to fly at high speeds.

Hummingbirds are made up of three main parts: the head, the body, and the tail.
The head is small and round, and it contains the eyes, the beak, and the brain.
The body is long and slender, and it contains the wings, the legs, and the
heart. The tail is long and forked, and it helps the hummingbird to balance
while it is flying.

Hummingbirds are also known for their coloration. They come in a variety of
colors, including green, blue, red, and purple. Some hummingbirds are even able
to change their color!

Hummingbirds are very active creatures. They spend most of their time flying,
and they are also very good at hovering. Hummingbirds need to eat a lot of food
in order to maintain their energy, and they often visit flowers to drink nectar.

Hummingbirds are amazing creatures. They are small, but they are also very
powerful. They are beautiful, and they are very important to the ecosystem.
  • 안내 콘텐츠 안내
<Overall instruction or context setting>
<Content to operate on>
<Final instruction>

예를 들면 다음과 같습니다.

Here is some text I'd like you to summarize:

Hummingbirds are the smallest birds in the world, and they are also one of the
most fascinating. They are found in North and South America, and they are known
for their long, thin beaks and their ability to fly at high speeds. Hummingbirds
are made up of three main parts: the head, the body, and the tail. The head is
small and round, and it contains the eyes, the beak, and the brain. The body is
long and slender, and it contains the wings, the legs, and the heart. The tail
is long and forked, and it helps the hummingbird to balance while it is flying.
Hummingbirds are also known for their coloration. They come in a variety of
colors, including green, blue, red, and purple. Some hummingbirds are even able
to change their color! Hummingbirds are very active creatures. They spend most
of their time flying, and they are also very good at hovering. Hummingbirds need
to eat a lot of food in order to maintain their energy, and they often visit
flowers to drink nectar. Hummingbirds are amazing creatures. They are small, but
they are also very powerful. They are beautiful, and they are very important to
the ecosystem.

Summarize it in two sentences at the third-grade reading level.
  • 연속 경우에 따라 모델이 지시 없이 텍스트를 계속할 수 있습니다. 예를 들어 다음은 모델이 제공된 입력을 계속하려는 제로샷 프롬프트입니다.
Once upon a time, there was a little sparrow building a nest in a farmer's
barn. This sparrow

제로 샷 프롬프트를 사용하여 시, 코드, 스크립트, 음악 작품, 이메일, 편지와 같은 광고소재 텍스트 형식을 생성합니다.

원샷 프롬프트

이러한 프롬프트는 모델에 패턴을 복제하고 계속 진행할 수 있는 단일 예를 제공합니다. 이렇게 하면 모델에서 예측 가능한 응답을 생성할 수 있습니다.

예를 들어 다음과 같은 음식 페어링을 생성할 수 있습니다.

Food: Apple
Pairs with: Cheese
Food: Pear
Pairs with:

퓨샷 프롬프트

이러한 프롬프트는 모델에 복제할 여러 예를 제공합니다. 퓨샷 프롬프트를 사용하여 패턴을 기반으로 데이터를 합성하는 등 복잡한 작업을 완료할 수 있습니다.

프롬프트의 예는 다음과 같습니다.

Generate a grocery shopping list for a week for one person. Use the JSON format
given below.
{"item": "eggs", "quantity": "6"}
{"item": "bread", "quantity": "one loaf"}

생성형 모델의 내부

이 섹션에서는 다음 질문에 답하는 것을 목표로 합니다. 생성 모델의 응답에 임의성이 있나요? 아니면 확정적인가요?

간단히 말하자면 둘 다 '예'입니다. 생성 모델에 프롬프트를 입력하면 두 단계로 텍스트 응답이 생성됩니다 첫 번째 단계에서 생성형 모델은 입력 프롬프트를 처리하고 다음에 나올 가능성이 있는 가능한 토큰 (단어)에 대한 확률 분포를 생성합니다. 예를 들어 '강아지가 ...를 넘어갔다'라는 입력 텍스트를 프롬프트하면 생성 모델은 다음에 올 가능성이 있는 단어의 배열을 생성합니다.

[("fence", 0.77), ("ledge", 0.12), ("blanket", 0.03), ...]

이 프로세스는 결정론적입니다. 생성형 모델은 동일한 프롬프트 텍스트를 입력할 때마다 동일한 분포를 생성합니다.

두 번째 단계에서는 생성 모델이 여러 디코딩 전략 중 하나를 통해 이러한 분포를 실제 텍스트 응답으로 변환합니다. 간단한 디코딩 전략은 시간 단계마다 가장 가능성이 높은 토큰을 선택할 수 있습니다. 이 프로세스는 항상 결정론적입니다. 대신 모델이 반환한 분포에서 무작위로 샘플링하여 응답을 생성할 수 있습니다. 이 프로세스는 확률적 (무작위)입니다. 온도를 설정하여 이 디코딩 프로세스에서 허용되는 무작위성 수준을 제어합니다. 온도가 0이면 가장 확률이 높은 토큰만 선택되고 무작위성이 없습니다. 반대로 온도가 높으면 모델에서 선택한 토큰에 높은 수준의 무작위성이 주입되어 더 예기치 않고 놀라운 모델 응답이 발생합니다.

추가 자료

  • 이제 프롬프트와 생성형 모델에 대해 자세히 알아봤으므로 Google AI Studio를 사용하여 직접 프롬프트를 작성해 보세요.
  • 프롬프트 작성을 위한 권장사항에 대해 자세히 알아보려면 프롬프트 가이드라인을 참고하세요.