| <!--Copyright 2023 The HuggingFace Team. All rights reserved. | |
| Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on | |
| an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the | |
| specific language governing permissions and limitations under the License. | |
| β οΈ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be | |
| rendered properly in your Markdown viewer. | |
| --> | |
| # λκ·λͺ¨ μΈμ΄ λͺ¨λΈ(LLM) ν둬νν κ°μ΄λ [[llm-prompting-guide]] | |
| [[open-in-colab]] | |
| Falcon, LLaMA λ±μ λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ μ¬μ νλ ¨λ νΈλμ€ν¬λ¨Έ λͺ¨λΈλ‘, μ΄κΈ°μλ μ£Όμ΄μ§ μ λ ₯ ν μ€νΈμ λν΄ λ€μ ν ν°μ μμΈ‘νλλ‘ νλ ¨λ©λλ€. μ΄λ€μ λ³΄ν΅ μμμ΅ κ°μ λ§€κ°λ³μλ₯Ό κ°μ§κ³ μμΌλ©°, μ₯κΈ°κ°μ κ±Έμ³ μμ‘° κ°μ ν ν°μΌλ‘ νλ ¨λ©λλ€. κ·Έ κ²°κ³Ό, μ΄ λͺ¨λΈλ€μ λ§€μ° κ°λ ₯νκ³ λ€μ¬λ€λ₯ν΄μ Έμ, μμ°μ΄ ν둬ννΈλ‘ λͺ¨λΈμ μ§μνμ¬ λ€μν μμ°μ΄ μ²λ¦¬ μμ μ μ¦μ μνν μ μμ΅λλ€. | |
| μ΅μ μ μΆλ ₯μ 보μ₯νκΈ° μν΄ μ΄λ¬ν ν둬ννΈλ₯Ό μ€κ³νλ κ²μ νν "ν둬ννΈ μμ§λμ΄λ§"μ΄λΌκ³ ν©λλ€. ν둬ννΈ μμ§λμ΄λ§μ μλΉν μ€νμ΄ νμν λ°λ³΅μ μΈ κ³Όμ μ λλ€. μμ°μ΄λ νλ‘κ·Έλλ° μΈμ΄λ³΄λ€ ν¨μ¬ μ μ°νκ³ ννλ ₯μ΄ νλΆνμ§λ§, λμμ λͺ¨νΈμ±μ μ΄λν μ μμ΅λλ€. λν, μμ°μ΄ ν둬ννΈλ λ³νμ λ§€μ° λ―Όκ°ν©λλ€. ν둬ννΈμ μ¬μν μμ λ§μΌλ‘λ μμ ν λ€λ₯Έ μΆλ ₯μ΄ λμ¬ μ μμ΅λλ€. | |
| λͺ¨λ κ²½μ°μ μ μ©ν μ μλ μ νν ν둬ννΈ μμ± κ³΅μμ μμ§λ§, μ°κ΅¬μλ€μ λ μΌκ΄λκ² μ΅μ μ κ²°κ³Όλ₯Ό μ»λ λ° λμμ΄ λλ μ¬λ¬ κ°μ§ λͺ¨λ² μ¬λ‘λ₯Ό κ°λ°νμ΅λλ€. | |
| μ΄ κ°μ΄λμμλ λ λμ λκ·λͺ¨ μΈμ΄ λͺ¨λΈ ν둬ννΈλ₯Ό μμ±νκ³ λ€μν μμ°μ΄ μ²λ¦¬ μμ μ ν΄κ²°νλ λ° λμμ΄ λλ ν둬ννΈ μμ§λμ΄λ§ λͺ¨λ² μ¬λ‘λ₯Ό λ€λ£Ήλλ€: | |
| - [ν둬νν μ κΈ°μ΄](#basics-of-prompting) | |
| - [λκ·λͺ¨ μΈμ΄ λͺ¨λΈ ν둬νν μ λͺ¨λ² μ¬λ‘](#best-practices-of-llm-prompting) | |
| - [κ³ κΈ ν둬νν κΈ°λ²: ν¨μ·(Few-shot) ν둬νν κ³Ό μκ°μ μ¬μ¬(Chain-of-thought, CoT) κΈ°λ²](#advanced-prompting-techniques) | |
| - [ν둬νν λμ λ―ΈμΈ μ‘°μ μ ν΄μΌ νλ κ²½μ°](#prompting-vs-fine-tuning) | |
| <Tip> | |
| ν둬ννΈ μμ§λμ΄λ§μ λκ·λͺ¨ μΈμ΄ λͺ¨λΈ μΆλ ₯ μ΅μ ν κ³Όμ μ μΌλΆμΌ λΏμ λλ€. λ λ€λ₯Έ μ€μν κ΅¬μ± μμλ μ΅μ μ ν μ€νΈ μμ± μ λ΅μ μ ννλ κ²μ λλ€. νμ΅ κ°λ₯ν λ§€κ°λ³μλ₯Ό μμ νμ§ μκ³ λ λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ΄ ν μ€νΈλ₯Ό μμ±ν리 λ κ°κ°μ νμ ν ν°μ μ ννλ λ°©μμ μ¬μ©μκ° μ§μ μ μν μ μμ΅λλ€. ν μ€νΈ μμ± λ§€κ°λ³μλ₯Ό μ‘°μ ν¨μΌλ‘μ¨ μμ±λ ν μ€νΈμ λ°λ³΅μ μ€μ΄κ³ λ μΌκ΄λκ³ μ¬λμ΄ λ§νλ κ² κ°μ ν μ€νΈλ₯Ό λ§λ€ μ μμ΅λλ€. ν μ€νΈ μμ± μ λ΅κ³Ό λ§€κ°λ³μλ μ΄ κ°μ΄λμ λ²μλ₯Ό λ²μ΄λμ§λ§, λ€μ κ°μ΄λμμ μ΄λ¬ν μ£Όμ μ λν΄ μμΈν μμλ³Ό μ μμ΅λλ€: | |
| * [λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ μ΄μ©ν μμ±](../llm_tutorial) | |
| * [ν μ€νΈ μμ± μ λ΅](../generation_strategies) | |
| </Tip> | |
| ## ν둬νν μ κΈ°μ΄ [[basics-of-prompting]] | |
| ### λͺ¨λΈμ μ ν [[types-of-models]] | |
| νλμ λλΆλΆμ λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ λμ½λλ§μ μ΄μ©ν νΈλμ€ν¬λ¨Έμ λλ€. μλ₯Ό λ€μ΄ [LLaMA](../model_doc/llama), | |
| [Llama2](../model_doc/llama2), [Falcon](../model_doc/falcon), [GPT2](../model_doc/gpt2) λ±μ΄ μμ΅λλ€. κ·Έλ¬λ [Flan-T5](../model_doc/flan-t5)μ [BART](../model_doc/bart)μ κ°μ μΈμ½λ-λμ½λ κΈ°λ°μ νΈλμ€ν¬λ¨Έ λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ μ ν μλ μμ΅λλ€. | |
| μΈμ½λ-λμ½λ κΈ°λ°μ λͺ¨λΈμ μΌλ°μ μΌλ‘ μΆλ ₯μ΄ μ λ ₯μ **ν¬κ²** μμ‘΄νλ μμ± μμ μ μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄, λ²μκ³Ό μμ½ μμ μ μ¬μ©λ©λλ€. λμ½λ μ μ© λͺ¨λΈμ λ€λ₯Έ λͺ¨λ μ νμ μμ± μμ μ μ¬μ©λ©λλ€. | |
| νμ΄νλΌμΈμ μ¬μ©νμ¬ λκ·λͺ¨ μΈμ΄ λͺ¨λΈμΌλ‘ ν μ€νΈλ₯Ό μμ±ν λ, μ΄λ€ μ νμ λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ μ¬μ©νκ³ μλμ§ μλ κ²μ΄ μ€μν©λλ€. μλνλ©΄ μ΄λ€μ μλ‘ λ€λ₯Έ νμ΄νλΌμΈμ μ¬μ©νκΈ° λλ¬Έμ λλ€. | |
| λμ½λ μ μ© λͺ¨λΈλ‘ μΆλ‘ μ μ€ννλ €λ©΄ `text-generation` νμ΄νλΌμΈμ μ¬μ©νμΈμ: | |
| ```python | |
| >>> from transformers import pipeline | |
| >>> import torch | |
| >>> torch.manual_seed(0) # doctest: +IGNORE_RESULT | |
| >>> generator = pipeline('text-generation', model = 'openai-community/gpt2') | |
| >>> prompt = "Hello, I'm a language model" | |
| >>> generator(prompt, max_length = 30) | |
| [{'generated_text': "Hello, I'm a language model programmer so you can use some of my stuff. But you also need some sort of a C program to run."}] | |
| ``` | |
| μΈμ½λ-λμ½λλ‘ μΆλ‘ μ μ€ννλ €λ©΄ `text2text-generation` νμ΄νλΌμΈμ μ¬μ©νμΈμ: | |
| ```python | |
| >>> text2text_generator = pipeline("text2text-generation", model = 'google/flan-t5-base') | |
| >>> prompt = "Translate from English to French: I'm very happy to see you" | |
| >>> text2text_generator(prompt) | |
| [{'generated_text': 'Je suis très heureuse de vous rencontrer.'}] | |
| ``` | |
| ### κΈ°λ³Έ λͺ¨λΈ vs μ§μ/μ±ν λͺ¨λΈ [[base-vs-instructchat-models]] | |
| π€ Hubμμ μ΅κ·Ό μ¬μ© κ°λ₯ν λλΆλΆμ λκ·λͺ¨ μΈμ΄ λͺ¨λΈ 체ν¬ν¬μΈνΈλ κΈ°λ³Έ λ²μ κ³Ό μ§μ(λλ μ±ν ) λ κ°μ§ λ²μ μ΄ μ 곡λ©λλ€. μλ₯Ό λ€μ΄, [`tiiuae/falcon-7b`](https://huggingface.co/tiiuae/falcon-7b)μ [`tiiuae/falcon-7b-instruct`](https://huggingface.co/tiiuae/falcon-7b-instruct)κ° μμ΅λλ€. | |
| κΈ°λ³Έ λͺ¨λΈμ μ΄κΈ° ν둬ννΈκ° μ£Όμ΄μ‘μ λ ν μ€νΈλ₯Ό μμ±νλ λ° νμνμ§λ§, μ§μλ₯Ό λ°λΌμΌ νκ±°λ λνν μ¬μ©μ΄ νμν μμ°μ΄ μ²λ¦¬μμ μλ μ΄μμ μ΄μ§ μμ΅λλ€. μ΄λ μ§μ(μ±ν ) λ²μ μ΄ νμν©λλ€. μ΄λ¬ν 체ν¬ν¬μΈνΈλ μ¬μ νλ ¨λ κΈ°λ³Έ λ²μ μ μ§μμ¬νκ³Ό λν λ°μ΄ν°λ‘ μΆκ° λ―ΈμΈ μ‘°μ ν κ²°κ³Όμ λλ€. μ΄ μΆκ°μ μΈ λ―ΈμΈ μ‘°μ μΌλ‘ μΈν΄ λ§μ μμ°μ΄ μ²λ¦¬ μμ μ λ μ ν©ν μ νμ΄ λ©λλ€. | |
| [`tiiuae/falcon-7b-instruct`](https://huggingface.co/tiiuae/falcon-7b-instruct)λ₯Ό μ¬μ©νμ¬ μΌλ°μ μΈ μμ°μ΄ μ²λ¦¬ μμ μ ν΄κ²°νλ λ° μ¬μ©ν μ μλ λͺ κ°μ§ κ°λ¨ν ν둬ννΈλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€. | |
| ### μμ°μ΄ μ²λ¦¬ μμ [[nlp-tasks]] | |
| λ¨Όμ , νκ²½μ μ€μ ν΄ λ³΄κ² μ΅λλ€: | |
| ```bash | |
| pip install -q transformers accelerate | |
| ``` | |
| λ€μμΌλ‘, μ μ ν νμ΄νλΌμΈ("text-generation")μ μ¬μ©νμ¬ λͺ¨λΈμ λ‘λνκ² μ΅λλ€: | |
| ```python | |
| >>> from transformers import pipeline, AutoTokenizer | |
| >>> import torch | |
| >>> torch.manual_seed(0) # doctest: +IGNORE_RESULT | |
| >>> model = "tiiuae/falcon-7b-instruct" | |
| >>> tokenizer = AutoTokenizer.from_pretrained(model) | |
| >>> pipe = pipeline( | |
| ... "text-generation", | |
| ... model=model, | |
| ... tokenizer=tokenizer, | |
| ... torch_dtype=torch.bfloat16, | |
| ... device_map="auto", | |
| ... ) | |
| ``` | |
| <Tip> | |
| Falcon λͺ¨λΈμ bfloat16 λ°μ΄ν° νμ μ μ¬μ©νμ¬ νλ ¨λμμΌλ―λ‘, κ°μ νμ μ μ¬μ©νλ κ²μ κΆμ₯ν©λλ€. μ΄λ₯Ό μν΄μλ μ΅μ λ²μ μ CUDAκ° νμνλ©°, μ΅μ κ·Έλν½ μΉ΄λμμ κ°μ₯ μ μλν©λλ€. | |
| </Tip> | |
| μ΄μ νμ΄νλΌμΈμ ν΅ν΄ λͺ¨λΈμ λ‘λνμΌλ, ν둬ννΈλ₯Ό μ¬μ©νμ¬ μμ°μ΄ μ²λ¦¬ μμ μ ν΄κ²°νλ λ°©λ²μ μ΄ν΄λ³΄κ² μ΅λλ€. | |
| #### ν μ€νΈ λΆλ₯ [[text-classification]] | |
| ν μ€νΈ λΆλ₯μ κ°μ₯ μΌλ°μ μΈ νν μ€ νλλ κ°μ λΆμμ λλ€. μ΄λ ν μ€νΈ μνμ€μ "κΈμ μ ", "λΆμ μ " λλ "μ€λ¦½μ "κ³Ό κ°μ λ μ΄λΈμ ν λΉν©λλ€. μ£Όμ΄μ§ ν μ€νΈ(μν 리뷰)λ₯Ό λΆλ₯νλλ‘ λͺ¨λΈμ μ§μνλ ν둬ννΈλ₯Ό μμ±ν΄ λ³΄κ² μ΅λλ€. λ¨Όμ μ§μμ¬νμ μ 곡ν λ€μ, λΆλ₯ν ν μ€νΈλ₯Ό μ§μ νκ² μ΅λλ€. μ¬κΈ°μ μ£Όλͺ©ν μ μ λ¨μν κ±°κΈ°μ λλ΄μ§ μκ³ , μλ΅μ μμ λΆλΆμΈ `"Sentiment: "`μ μΆκ°νλ€λ κ²μ λλ€: | |
| ```python | |
| >>> torch.manual_seed(0) | |
| >>> prompt = """Classify the text into neutral, negative or positive. | |
| ... Text: This movie is definitely one of my favorite movies of its kind. The interaction between respectable and morally strong characters is an ode to chivalry and the honor code amongst thieves and policemen. | |
| ... Sentiment: | |
| ... """ | |
| >>> sequences = pipe( | |
| ... prompt, | |
| ... max_new_tokens=10, | |
| ... ) | |
| >>> for seq in sequences: | |
| ... print(f"Result: {seq['generated_text']}") | |
| Result: Classify the text into neutral, negative or positive. | |
| Text: This movie is definitely one of my favorite movies of its kind. The interaction between respectable and morally strong characters is an ode to chivalry and the honor code amongst thieves and policemen. | |
| Sentiment: | |
| Positive | |
| ``` | |
| κ²°κ³Όμ μΌλ‘, μ°λ¦¬κ° μ§μμ¬νμμ μ 곡ν λͺ©λ‘μμ μ νλ λΆλ₯ λ μ΄λΈμ΄ μ ννκ² ν¬ν¨λμ΄ μμ±λ κ²μ νμΈν μ μμ΅λλ€! | |
| <Tip> | |
| ν둬ννΈ μΈμλ `max_new_tokens` λ§€κ°λ³μλ₯Ό μ λ¬νλ κ²μ λ³Ό μ μμ΅λλ€. μ΄ λ§€κ°λ³μλ λͺ¨λΈμ΄ μμ±ν ν ν°μ μλ₯Ό μ μ΄νλ©°, [ν μ€νΈ μμ± μ λ΅](../generation_strategies) κ°μ΄λμμ λ°°μΈ μ μλ μ¬λ¬ ν μ€νΈ μμ± λ§€κ°λ³μ μ€ νλμ λλ€. | |
| </Tip> | |
| #### κ°μ²΄λͺ μΈμ [[named-entity-recognition]] | |
| κ°μ²΄λͺ μΈμ(Named Entity Recognition, NER)μ ν μ€νΈμμ μΈλ¬Ό, μ₯μ, μ‘°μ§κ³Ό κ°μ λͺ λͺ λ κ°μ²΄λ₯Ό μ°Ύλ μμ μ λλ€. ν둬ννΈμ μ§μμ¬νμ μμ νμ¬ λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ΄ μ΄ μμ μ μννλλ‘ ν΄λ³΄κ² μ΅λλ€. μ¬κΈ°μλ `return_full_text = False`λ‘ μ€μ νμ¬ μΆλ ₯μ ν둬ννΈκ° ν¬ν¨λμ§ μλλ‘ νκ² μ΅λλ€: | |
| ```python | |
| >>> torch.manual_seed(1) # doctest: +IGNORE_RESULT | |
| >>> prompt = """Return a list of named entities in the text. | |
| ... Text: The Golden State Warriors are an American professional basketball team based in San Francisco. | |
| ... Named entities: | |
| ... """ | |
| >>> sequences = pipe( | |
| ... prompt, | |
| ... max_new_tokens=15, | |
| ... return_full_text = False, | |
| ... ) | |
| >>> for seq in sequences: | |
| ... print(f"{seq['generated_text']}") | |
| - Golden State Warriors | |
| - San Francisco | |
| ``` | |
| 보μλ€μνΌ, λͺ¨λΈμ΄ μ£Όμ΄μ§ ν μ€νΈμμ λ κ°μ λͺ λͺ λ κ°μ²΄λ₯Ό μ ννκ² μλ³νμ΅λλ€. | |
| #### λ²μ [[translation]] | |
| λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ΄ μνν μ μλ λ λ€λ₯Έ μμ μ λ²μμ λλ€. μ΄ μμ μ μν΄ μΈμ½λ-λμ½λ λͺ¨λΈμ μ¬μ©ν μ μμ§λ§, μ¬κΈ°μλ μμμ λ¨μμ±μ μν΄ κ½€ μ’μ μ±λ₯μ 보μ΄λ Falcon-7b-instructλ₯Ό κ³μ μ¬μ©νκ² μ΅λλ€. λ€μ ν λ², λͺ¨λΈμκ² μμ΄μμ μ΄ν리μμ΄λ‘ ν μ€νΈλ₯Ό λ²μνλλ‘ μ§μνλ κΈ°λ³Έμ μΈ ν둬ννΈλ₯Ό μμ±νλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€: | |
| ```python | |
| >>> torch.manual_seed(2) # doctest: +IGNORE_RESULT | |
| >>> prompt = """Translate the English text to Italian. | |
| ... Text: Sometimes, I've believed as many as six impossible things before breakfast. | |
| ... Translation: | |
| ... """ | |
| >>> sequences = pipe( | |
| ... prompt, | |
| ... max_new_tokens=20, | |
| ... do_sample=True, | |
| ... top_k=10, | |
| ... return_full_text = False, | |
| ... ) | |
| >>> for seq in sequences: | |
| ... print(f"{seq['generated_text']}") | |
| A volte, ho creduto a sei impossibili cose prima di colazione. | |
| ``` | |
| μ¬κΈ°μλ λͺ¨λΈμ΄ μΆλ ₯μ μμ±ν λ μ‘°κΈ λ μ μ°ν΄μ§ μ μλλ‘ `do_sample=True`μ `top_k=10`μ μΆκ°νμ΅λλ€. | |
| #### ν μ€νΈ μμ½ [[text-summarization]] | |
| λ²μκ³Ό λ§μ°¬κ°μ§λ‘, ν μ€νΈ μμ½μ μΆλ ₯μ΄ μ λ ₯μ ν¬κ² μμ‘΄νλ λ λ€λ₯Έ μμ± μμ μ΄λ©°, μΈμ½λ-λμ½λ κΈ°λ° λͺ¨λΈμ΄ λ λμ μ νμΌ μ μμ΅λλ€. κ·Έλ¬λ λμ½λ κΈ°λ°μ λͺ¨λΈλ μ΄ μμ μ μ¬μ©λ μ μμ΅λλ€. μ΄μ μλ ν둬ννΈμ 맨 μ²μμ μ§μμ¬νμ λ°°μΉνμ΅λλ€. νμ§λ§ ν둬ννΈμ 맨 λλ μ§μμ¬νμ λ£μ μ μ ν μμΉκ° λ μ μμ΅λλ€. μΌλ°μ μΌλ‘ μ§μμ¬νμ μ κ·Ήλ¨ μ€ νλμ λ°°μΉνλ κ²μ΄ λ μ’μ΅λλ€. | |
| ```python | |
| >>> torch.manual_seed(3) # doctest: +IGNORE_RESULT | |
| >>> prompt = """Permaculture is a design process mimicking the diversity, functionality and resilience of natural ecosystems. The principles and practices are drawn from traditional ecological knowledge of indigenous cultures combined with modern scientific understanding and technological innovations. Permaculture design provides a framework helping individuals and communities develop innovative, creative and effective strategies for meeting basic needs while preparing for and mitigating the projected impacts of climate change. | |
| ... Write a summary of the above text. | |
| ... Summary: | |
| ... """ | |
| >>> sequences = pipe( | |
| ... prompt, | |
| ... max_new_tokens=30, | |
| ... do_sample=True, | |
| ... top_k=10, | |
| ... return_full_text = False, | |
| ... ) | |
| >>> for seq in sequences: | |
| ... print(f"{seq['generated_text']}") | |
| Permaculture is an ecological design mimicking natural ecosystems to meet basic needs and prepare for climate change. It is based on traditional knowledge and scientific understanding. | |
| ``` | |
| #### μ§μ μλ΅ [[question-answering]] | |
| μ§μ μλ΅ μμ μ μν΄ ν둬ννΈλ₯Ό λ€μκ³Ό κ°μ λ Όλ¦¬μ ꡬμ±μμλ‘ κ΅¬μ‘°νν μ μμ΅λλ€. μ§μμ¬ν, λ§₯λ½, μ§λ¬Έ, κ·Έλ¦¬κ³ λͺ¨λΈμ΄ λ΅λ³ μμ±μ μμνλλ‘ μ λνλ μ λ λ¨μ΄λ ꡬ문(`"Answer:"`) μ μ¬μ©ν μ μμ΅λλ€: | |
| ```python | |
| >>> torch.manual_seed(4) # doctest: +IGNORE_RESULT | |
| >>> prompt = """Answer the question using the context below. | |
| ... Context: Gazpacho is a cold soup and drink made of raw, blended vegetables. Most gazpacho includes stale bread, tomato, cucumbers, onion, bell peppers, garlic, olive oil, wine vinegar, water, and salt. Northern recipes often include cumin and/or pimentΓ³n (smoked sweet paprika). Traditionally, gazpacho was made by pounding the vegetables in a mortar with a pestle; this more laborious method is still sometimes used as it helps keep the gazpacho cool and avoids the foam and silky consistency of smoothie versions made in blenders or food processors. | |
| ... Question: What modern tool is used to make gazpacho? | |
| ... Answer: | |
| ... """ | |
| >>> sequences = pipe( | |
| ... prompt, | |
| ... max_new_tokens=10, | |
| ... do_sample=True, | |
| ... top_k=10, | |
| ... return_full_text = False, | |
| ... ) | |
| >>> for seq in sequences: | |
| ... print(f"Result: {seq['generated_text']}") | |
| Result: Modern tools often used to make gazpacho include | |
| ``` | |
| #### μΆλ‘ [[reasoning]] | |
| μΆλ‘ μ λκ·λͺ¨ μΈμ΄ λͺ¨λΈ(LLM)μκ² κ°μ₯ μ΄λ €μ΄ μμ μ€ νλμ΄λ©°, μ’μ κ²°κ³Όλ₯Ό μ»κΈ° μν΄μλ μ’ μ’ [μκ°μ μ¬μ¬(Chain-of-thought, CoT)](#chain-of-thought)κ³Ό κ°μ κ³ κΈ ν둬νν κΈ°λ²μ μ μ©ν΄μΌ ν©λλ€. κ°λ¨ν μ°μ μμ μ λν΄ κΈ°λ³Έμ μΈ ν둬ννΈλ‘ λͺ¨λΈμ΄ μΆλ‘ ν μ μλμ§ μλν΄ λ³΄κ² μ΅λλ€: | |
| ```python | |
| >>> torch.manual_seed(5) # doctest: +IGNORE_RESULT | |
| >>> prompt = """There are 5 groups of students in the class. Each group has 4 students. How many students are there in the class?""" | |
| >>> sequences = pipe( | |
| ... prompt, | |
| ... max_new_tokens=30, | |
| ... do_sample=True, | |
| ... top_k=10, | |
| ... return_full_text = False, | |
| ... ) | |
| >>> for seq in sequences: | |
| ... print(f"Result: {seq['generated_text']}") | |
| Result: | |
| There are a total of 5 groups, so there are 5 x 4=20 students in the class. | |
| ``` | |
| μ νν λ΅λ³μ΄ μμ±λμμ΅λλ€! 볡μ‘μ±μ μ‘°κΈ λμ¬λ³΄κ³ κΈ°λ³Έμ μΈ ν둬ννΈλ‘λ μ¬μ ν ν΄κ²°ν μ μλμ§ νμΈν΄ λ³΄κ² μ΅λλ€: | |
| ```python | |
| >>> torch.manual_seed(6) | |
| >>> prompt = """I baked 15 muffins. I ate 2 muffins and gave 5 muffins to a neighbor. My partner then bought 6 more muffins and ate 2. How many muffins do we now have?""" | |
| >>> sequences = pipe( | |
| ... prompt, | |
| ... max_new_tokens=10, | |
| ... do_sample=True, | |
| ... top_k=10, | |
| ... return_full_text = False, | |
| ... ) | |
| >>> for seq in sequences: | |
| ... print(f"Result: {seq['generated_text']}") | |
| Result: | |
| The total number of muffins now is 21 | |
| ``` | |
| μ λ΅μ 12μ¬μΌ νλλ° 21μ΄λΌλ μλͺ»λ λ΅λ³μ΄ λμμ΅λλ€. μ΄ κ²½μ°, ν둬ννΈκ° λ무 κΈ°λ³Έμ μ΄κ±°λ λͺ¨λΈμ ν¬κΈ°κ° μμμ μκΈ΄ λ¬Έμ μΌ μ μμ΅λλ€. μ°λ¦¬λ Falconμ κ°μ₯ μμ λ²μ μ μ ννμ΅λλ€. μΆλ‘ μ ν° λͺ¨λΈμκ²λ μ΄λ €μ΄ μμ μ΄μ§λ§, λ ν° λͺ¨λΈλ€μ΄ λ λμ μ±λ₯μ λ³΄μΌ κ°λ₯μ±μ΄ λμ΅λλ€. | |
| ## λκ·λͺ¨ μΈμ΄ λͺ¨λΈ ν둬ννΈ μμ±μ λͺ¨λ² μ¬λ‘ [[best-practices-of-llm-prompting]] | |
| μ΄ μΉμ μμλ ν둬ννΈ κ²°κ³Όλ₯Ό ν₯μμν¬ μ μλ λͺ¨λ² μ¬λ‘ λͺ©λ‘μ μμ±νμ΅λλ€: | |
| * μμ ν λͺ¨λΈμ μ νν λ μ΅μ λ° κ°μ₯ κ°λ ₯ν λͺ¨λΈμ΄ λ λμ μ±λ₯μ λ°νν κ°λ₯μ±μ΄ λμ΅λλ€. | |
| * κ°λ¨νκ³ μ§§μ ν둬ννΈλ‘ μμνμ¬ μ μ§μ μΌλ‘ κ°μ ν΄ λκ°μΈμ. | |
| * ν둬ννΈμ μμ λΆλΆμ΄λ 맨 λμ μ§μμ¬νμ λ°°μΉνμΈμ. λκ·λͺ¨ 컨ν μ€νΈλ₯Ό λ€λ£° λ, λͺ¨λΈλ€μ μ΄ν μ 볡μ‘λκ° 2μ°¨μ μΌλ‘ μ¦κ°νλ κ²μ λ°©μ§νκΈ° μν΄ λ€μν μ΅μ νλ₯Ό μ μ©ν©λλ€. μ΄λ κ² ν¨μΌλ‘μ¨ λͺ¨λΈμ΄ ν둬ννΈμ μ€κ°λ³΄λ€ μμμ΄λ λ λΆλΆμ λ μ£Όμλ₯Ό κΈ°μΈμΌ μ μμ΅λλ€. | |
| * μ§μμ¬νμ μ μ©ν ν μ€νΈμ λͺ ννκ² λΆλ¦¬ν΄λ³΄μΈμ. (μ΄μ λν΄μλ λ€μ μΉμ μμ λ μμΈν λ€λ£Ήλλ€.) | |
| * μμ κ³Ό μνλ κ²°κ³Όμ λν΄ κ΅¬μ²΄μ μ΄κ³ νλΆν μ€λͺ μ μ 곡νμΈμ. νμ, κΈΈμ΄, μ€νμΌ, μΈμ΄ λ±μ λͺ ννκ² μμ±ν΄μΌ ν©λλ€. | |
| * λͺ¨νΈν μ€λͺ κ³Ό μ§μμ¬νμ νΌνμΈμ. | |
| * "νμ§ λ§λΌ"λ μ§μ보λ€λ "무μμ ν΄μΌ νλμ§"λ₯Ό λ§νλ μ§μλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. | |
| * 첫 λ²μ§Έ λ¨μ΄λ₯Ό μ°κ±°λ 첫 λ²μ§Έ λ¬Έμ₯μ μμνμ¬ μΆλ ₯μ μ¬λ°λ₯Έ λ°©ν₯μΌλ‘ "μ λ"νμΈμ. | |
| * [ν¨μ·(Few-shot) ν둬νν ](#few-shot-prompting) λ° [μκ°μ μ¬μ¬(Chain-of-thought, CoT)](#chain-of-thought) κ°μ κ³ κΈ κΈ°μ μ μ¬μ©ν΄λ³΄μΈμ. | |
| * ν둬ννΈμ κ²¬κ³ μ±μ νκ°νκΈ° μν΄ λ€λ₯Έ λͺ¨λΈλ‘λ ν μ€νΈνμΈμ. | |
| * ν둬ννΈμ λ²μ μ κ΄λ¦¬νκ³ μ±λ₯μ μΆμ νμΈμ. | |
| ## κ³ κΈ ν둬ννΈ κΈ°λ² [[advanced-prompting-techniques]] | |
| ### ν¨μ·(Few-shot) ν둬νν [[few-shot-prompting]] | |
| μ μΉμ μ κΈ°λ³Έ ν둬ννΈλ€μ "μ λ‘μ·(Zero-shot)" ν둬ννΈμ μμμ λλ€. μ΄λ λͺ¨λΈμ μ§μμ¬νκ³Ό λ§₯λ½μ μ£Όμ΄μ‘μ§λ§, ν΄κ²°μ± μ΄ ν¬ν¨λ μμλ μ 곡λμ§ μμλ€λ μλ―Έμ λλ€. μ§μ λ°μ΄ν°μ μΌλ‘ λ―ΈμΈ μ‘°μ λ λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ μΌλ°μ μΌλ‘ μ΄λ¬ν "μ λ‘μ·" μμ μμ μ’μ μ±λ₯μ 보μ λλ€. νμ§λ§ μ¬λ¬λΆμ μμ μ΄ λ 볡μ‘νκ±°λ λ―Έλ¬ν μ°¨μ΄κ° μμ μ μκ³ , μλ§λ μ§μμ¬νλ§μΌλ‘λ λͺ¨λΈμ΄ ν¬μ°©νμ§ λͺ»νλ μΆλ ₯μ λν μꡬμ¬νμ΄ μμ μ μμ΅λλ€. μ΄λ° κ²½μ°μλ ν¨μ·(Few-shot) ν둬νν μ΄λΌλ κΈ°λ²μ μλν΄ λ³Ό μ μμ΅λλ€. | |
| ν¨μ· ν둬νν μμλ ν둬ννΈμ μμλ₯Ό μ 곡νμ¬ λͺ¨λΈμ λ λ§μ λ§₯λ½μ μ£Όκ³ μ±λ₯μ ν₯μμν΅λλ€. μ΄ μμλ€μ λͺ¨λΈμ΄ μμμ ν¨ν΄μ λ°λΌ μΆλ ₯μ μμ±νλλ‘ μ‘°κ±΄νν©λλ€. | |
| λ€μμ μμμ λλ€: | |
| ```python | |
| >>> torch.manual_seed(0) # doctest: +IGNORE_RESULT | |
| >>> prompt = """Text: The first human went into space and orbited the Earth on April 12, 1961. | |
| ... Date: 04/12/1961 | |
| ... Text: The first-ever televised presidential debate in the United States took place on September 28, 1960, between presidential candidates John F. Kennedy and Richard Nixon. | |
| ... Date:""" | |
| >>> sequences = pipe( | |
| ... prompt, | |
| ... max_new_tokens=8, | |
| ... do_sample=True, | |
| ... top_k=10, | |
| ... ) | |
| >>> for seq in sequences: | |
| ... print(f"Result: {seq['generated_text']}") | |
| Result: Text: The first human went into space and orbited the Earth on April 12, 1961. | |
| Date: 04/12/1961 | |
| Text: The first-ever televised presidential debate in the United States took place on September 28, 1960, between presidential candidates John F. Kennedy and Richard Nixon. | |
| Date: 09/28/1960 | |
| ``` | |
| μμ μ½λ μ€λν«μμλ λͺ¨λΈμ μνλ μΆλ ₯μ 보μ¬μ£ΌκΈ° μν΄ λ¨μΌ μμλ₯Ό μ¬μ©νμΌλ―λ‘, μ΄λ₯Ό "μμ·(One-shot)" ν둬νν μ΄λΌκ³ λΆλ₯Ό μ μμ΅λλ€. κ·Έλ¬λ μμ μ 볡μ‘μ±μ λ°λΌ νλ μ΄μμ μμλ₯Ό μ¬μ©ν΄μΌ ν μλ μμ΅λλ€. | |
| ν¨μ· ν둬νν κΈ°λ²μ νκ³: | |
| - λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ΄ μμμ ν¨ν΄μ νμ ν μ μμ§λ§, μ΄ κΈ°λ²μ 볡μ‘ν μΆλ‘ μμ μλ μ μλνμ§ μμ΅λλ€. | |
| - ν¨μ· ν둬νν μ μ μ©νλ©΄ ν둬ννΈμ κΈΈμ΄κ° κΈΈμ΄μ§λλ€. ν ν° μκ° λ§μ ν둬ννΈλ κ³μ°λκ³Ό μ§μ° μκ°μ μ¦κ°μν¬ μ μμΌλ©° ν둬ννΈ κΈΈμ΄μλ μ νμ΄ μμ΅λλ€. | |
| - λλ‘λ μ¬λ¬ μμκ° μ£Όμ΄μ§ λ, λͺ¨λΈμ μλνμ§ μμ ν¨ν΄μ νμ΅ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μΈ λ²μ§Έ μν λ¦¬λ·°κ° νμ λΆμ μ μ΄λΌκ³ νμ΅ν μ μμ΅λλ€. | |
| ### μκ°μ μ¬μ¬(Chain-of-thought, CoT) [[chain-of-thought]] | |
| μκ°μ μ¬μ¬(Chain-of-thought, CoT) ν둬νν μ λͺ¨λΈμ΄ μ€κ° μΆλ‘ λ¨κ³λ₯Ό μμ±νλλ‘ μ λνλ κΈ°λ²μΌλ‘, 볡μ‘ν μΆλ‘ μμ μ κ²°κ³Όλ₯Ό κ°μ ν©λλ€. | |
| λͺ¨λΈμ΄ μΆλ‘ λ¨κ³λ₯Ό μμ±νλλ‘ μ λνλ λ κ°μ§ λ°©λ²μ΄ μμ΅λλ€: | |
| - μ§λ¬Έμ λν μμΈν λ΅λ³μ μμλ‘ μ μνλ ν¨μ· ν둬νν μ ν΅ν΄ λͺ¨λΈμκ² λ¬Έμ λ₯Ό μ΄λ»κ² ν΄κ²°ν΄ λκ°λμ§ λ³΄μ¬μ€λλ€. | |
| - "λ¨κ³λ³λ‘ μκ°ν΄ λ΄ μλ€" λλ "κΉκ² μ¨μ μ¬κ³ λ¬Έμ λ₯Ό λ¨κ³λ³λ‘ ν΄κ²°ν΄ λ΄ μλ€"μ κ°μ 문ꡬλ₯Ό μΆκ°νμ¬ λͺ¨λΈμκ² μΆλ‘ νλλ‘ μ§μν©λλ€. | |
| [reasoning section](#reasoning)μ λ¨Έν μμμ μκ°μ μ¬μ¬(Chain-of-thought, CoT) κΈ°λ²μ μ μ©νκ³ [HuggingChat](https://huggingface.co/chat/)μμ μ¬μ©ν μ μλ (`tiiuae/falcon-180B-chat`)κ³Ό κ°μ λ ν° λͺ¨λΈμ μ¬μ©νλ©΄, μΆλ‘ κ²°κ³Όκ° ν¬κ² κ°μ λ©λλ€: | |
| ```text | |
| λ¨κ³λ³λ‘ μ΄ν΄λ΄ μλ€: | |
| 1. μ²μμ 15κ°μ λ¨Ένμ΄ μμ΅λλ€. | |
| 2. 2κ°μ λ¨Ένμ λ¨ΉμΌλ©΄ 13κ°μ λ¨Ένμ΄ λ¨μ΅λλ€. | |
| 3. μ΄μμκ² 5κ°μ λ¨Ένμ μ£Όλ©΄ 8κ°μ λ¨Ένμ΄ λ¨μ΅λλ€. | |
| 4. ννΈλκ° 6κ°μ λ¨Ένμ λ μ¬μ€λ©΄ μ΄ λ¨Έν μλ 14κ°κ° λ©λλ€. | |
| 5. ννΈλκ° 2κ°μ λ¨Ένμ λ¨ΉμΌλ©΄ 12κ°μ λ¨Ένμ΄ λ¨μ΅λλ€. | |
| λ°λΌμ, νμ¬ 12κ°μ λ¨Ένμ΄ μμ΅λλ€. | |
| ``` | |
| ## ν둬νν vs λ―ΈμΈ μ‘°μ [[prompting-vs-fine-tuning]] | |
| ν둬ννΈλ₯Ό μ΅μ ννμ¬ νλ₯ν κ²°κ³Όλ₯Ό μ»μ μ μμ§λ§, μ¬μ ν λͺ¨λΈμ λ―ΈμΈ μ‘°μ νλ κ²μ΄ λ μ’μμ§ κ³ λ―Όν μ μμ΅λλ€. λ€μμ λ μμ λͺ¨λΈμ λ―ΈμΈ μ‘°μ νλ κ²μ΄ μ νΈλλ μλ리μ€μ λλ€: | |
| - λλ©μΈμ΄ λκ·λͺ¨ μΈμ΄ λͺ¨λΈμ΄ μ¬μ νλ ¨λ κ²κ³Ό ν¬κ² λ€λ₯΄κ³ κ΄λ²μν ν둬ννΈ μ΅μ νλ‘λ μΆ©λΆν κ²°κ³Όλ₯Ό μ»μ§ λͺ»ν κ²½μ°. | |
| - μ μμ μΈμ΄μμ λͺ¨λΈμ΄ μ μλν΄μΌ νλ κ²½μ°. | |
| - μ격ν κ·μ νμ μλ λ―Όκ°ν λ°μ΄ν°λ‘ λͺ¨λΈμ νλ ¨ν΄μΌ νλ κ²½μ°. | |
| - λΉμ©, κ°μΈμ 보 보νΈ, μΈνλΌ λλ κΈ°ν μ νμΌλ‘ μΈν΄ μμ λͺ¨λΈμ μ¬μ©ν΄μΌ νλ κ²½μ°. | |
| μμ λͺ¨λ μμμμ, λͺ¨λΈμ λ―ΈμΈ μ‘°μ νκΈ° μν΄ μΆ©λΆν ν° λλ©μΈλ³ λ°μ΄ν°μ μ μ΄λ―Έ κ°μ§κ³ μκ±°λ ν©λ¦¬μ μΈ λΉμ©μΌλ‘ μ½κ² μ»μ μ μλμ§ νμΈν΄μΌ ν©λλ€. λν λͺ¨λΈμ λ―ΈμΈ μ‘°μ ν μΆ©λΆν μκ°κ³Ό μμμ΄ νμν©λλ€. | |
| λ§μ½ μμ μμλ€μ΄ μ¬λ¬λΆμ κ²½μ°μ ν΄λΉνμ§ μλλ€λ©΄, ν둬ννΈλ₯Ό μ΅μ ννλ κ²μ΄ λ μ μ΅ν μ μμ΅λλ€. | |