2024. 12. 11. 14:03ㆍLLM(Large Language Model)의 기초
1. 프롬프트 엔지니어링(Prompt Engineering)란?
- 프롬프트 엔지니어링(prompt engineering)은 인공지능 모델, 특히 자연어 처리 모델(GPT 계열 등)과의 상호작용을 최적화하는 기술입니다. 이는 모델이 주어진 작업을 더 정확하고 효과적으로 수행할 수 있도록, 입력되는 텍스트(프롬프트)를 신중하게 설계하는 과정입니다.
프롬프트 엔지니어링의 핵심은 모델이 의도한 답변을 도출하도록 텍스트를 구성하는 방식으로, 적절한 질문 형식이나 설명을 제공하여 더 나은 성과를 얻는 것을 목표로 합니다.
이 과정은 모델의 한계와 특성을 이해하고, 모델이 특정 방식으로 반응하도록 유도하는 언어적 전략을 포함합니다.
예를 들어, 더 구체적인 정보를 요청하거나, 다양한 조건을 명확히 설정하여 모델이 더 정확하고 유용한 답변을 하도록 유도하는 방식입니다.
1-1. Role(역할)
Role(역할)은 AI 모델과의 대화에서 특정 문맥을 설정하거나, 모델의 응답 스타일과 관점을 조정하기 위해 사용하는 개념입니다.
* User(사용자): AI와 상호작용하는 주체로, 일반적인 질문이나 요청을 전달합니다.
* Assistant(어시스턴트): AI 모델이 자체적으로 응답할 때의 역할로, 사용자의 질문이나 명령에 따라 답변을 제공합니다.
* System(시스템): AI 모델의 행동과 스타일을 지시하는 역할로, AI가 어떻게 응답해야 할지 지침을 설정합니다. 예를 들어, "당신은 친절한 도움을 주는 비서입니다"라는 시스템 역할을 설정하면 AI는 친절하고 협조적인 태도로 응답하게 됩니다.
1. dotenv를 설치해줍니다.
!pip install python-dotenv
2. openai를 설치하거나 업그레이드 해줍니다.
!pip install openai
!pip install --upgrade openai
3. 사용한다.
load_dotenv()
4. import 한다.
import os
from openai import OpenAI
from dotenv import load_dotenv
4. .env 파일 붙혀주면 불러온다.
client = OpenAI(
api_key = os.getenv("API_KEY")
)
5. GPT 한테 물어보면 답해준다
response = client.chat.completions.create(
model = 'gpt-3.5-turbo-0125',
messages=[{"role":"user", "content":"왜 강남은 강남이라고 할까요?"}]
)
6. 또는 명령어 순서 참고!
1.
!pip install python-dotenv
2.
import os
from openai import OpenAI
from dotenv import load_dotenv
3.
load_dotenv()
4.
!pip install --upgrade openai
5.
client = OpenAI(
api_key = os.getenv('API_KEY')
)
1.
명령어 예시1)
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "왜 강남은 강남이라고 할까요?"}],
temperature=0.0
)
print(response.choices[0].message.content)
print(response)
-->
강남은 서울의 한 지역명으로, 원래는 강남구를 가리키는 지명이었습니다. 그러나 강남구가 서울의 중심지와는 거리가 먼 곳에 위치해 있었기 때문에, 강남이라는 용어는 부유한 지역이나 상류층이 사는 지역을 가리키는 상징적인 용어로 사용되기 시작했습니다. 이후 K-pop 가수 싸이의 노래 "강남스타일"이 대세를 이루면서 강남은 전 세계적으로 유명한 지역으로 자리매김하게 되었습니다. 따라서 강남이라는 용어는 부유하고 현대적인 이미지를 상징하는 용어로 사용되고 있습니다.
ChatCompletion(id='chatcmpl-Ad87R4pm9r0ztNE4gKCiqGQEsA1zx', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='강남은 서울의 한 지역명으로, 원래는 강남구를 가리키는 지명이었습니다. 그러나 강남구가 서울의 중심지와는 거리가 먼 곳에 위치해 있었기 때문에, 강남이라는 용어는 부유한 지역이나 상류층이 사는 지역을 가리키는 상징적인 용어로 사용되기 시작했습니다. 이후 K-pop 가수 싸이의 노래 "강남스타일"이 대세를 이루면서 강남은 전 세계적으로 유명한 지역으로 자리매김하게 되었습니다. 따라서 강남이라는 용어는 부유하고 현대적인 이미지를 상징하는 용어로 사용되고 있습니다.', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None))], created=1733889365, model='gpt-3.5-turbo-0125', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=238, prompt_tokens=26, total_tokens=264, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=0), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0)))
2. Prompt Development Cycle이란?
- Prompt Engineering 기법들에 많은 시간을 투입해도 별다른 결과가 없을 수 있습니다.
더 좋은 Prompt인가 판단하기도 어려울 수 있습니다.
따라서 태스크에 맞춰서 명확한 평가 기준치와 기준치를 확인 할 수 있는 샘플 데이터가 필요합니다.
AI 모델, 특히 대화형 언어 모델이나 생성형 AI와 효과적으로 상호작용하기 위해 프롬프트(질문이나 명령어)를 작성하고 개선하는 과정을 의미합니다.
이 사이클은 사용자가 원하는 결과를 정확히 얻기 위해 프롬프트를 반복적으로 수정하고 최적화하는 구조적인 접근법을 따릅니다.
프롬프트 만드는 법을 알아보겠습니다.
2-1. 목표 정의 (Define Objectives)
* 원하는 결과나 목표를 명확히 설정합니다. (예: 요약, 번역, 코드 생성, 창의적인 아이디어 도출 등)
각 태스크 별로 사용되는 평가 기준 및 지표들이 다를 수 있습니다.
2-2. 초기 프롬프트 작성 (Initial Prompt Creation)
* 초기 프롬프트를 간단하고 명확하게 작성합니다.
* 예: "영어로 작성된 문서를 200자 내외로 요약해주세요."
2-3. 실행 및 결과 분석 (Run & Analyze Outputs)
* 프롬프트를 실행하여 AI의 출력을 확인합니다.
* 출력이 목표에 부합하는지, 부정확하거나 부족한 부분은 무엇인지 평가합니다.
* 평가 기준(성능, 응답 속도, 비용)을 설정하고 테스트 케이스를 선정하여 평가를 진행합니다.
2-4. 피드백 수집 및 수정 (Collect Feedback & Iterate)
* 결과를 바탕으로 프롬프트를 구체화하거나 명확히 수정합니다.
* 추가 정보 제공: "200자 내외로 요약하되, 핵심 요점만 포함하세요."
* 구조 조정: "다음 문장을 고려해 보고서를 요약하세요: ..."
* 결과가 예상보다 너무 일반적이거나 불완전하다면 조건이나 제약을 추가합니다.
2-5. 반복 (Iterate)
* 수정한 프롬프트로 다시 실행하고 결과를 확인합니다.
* 필요시 여러 번 반복하며 점진적으로 개선합니다.
2-6. 최적화 및 문서화 (Optimize & Document)
* 최적화된 프롬프트를 문서화하고 유사한 작업에서 재사용할 수 있도록 기록합니다.
* 다양한 상황에 적합한 템플릿이나 사례를 만들어 활용도를 높입니다.
3. 모델 학습 능력 평가
3-1. LLM 평가 기준이 필요한 이유
* LLM 평가 기준은 모델의 성능과 신뢰성을 체계적으로 측정하고 비교하기 위해 필요합니다. 이를 통해 모델이 다양한 작업과 도메인에서 얼마나 정확하고 효율적으로 작동하는지 검증하며, 편향이나 유해 출력 같은 윤리적 문제를 사전에 파악할 수 있습니다.
또한, 동일한 기준으로 모델을 비교함으로써 특정 작업에 가장 적합한 모델을 선택하고, 학계와 산업계에서 연구 결과를 공정하게 비교할 수 있게 합니다.
평가 기준은 사용자 신뢰 확보, 비용 효율성 분석, 기술 개선 방향 제시 등 AI 모델의 실제 활용성과 발전에 중요한 역할을 합니다.
3-2. MMLU(Massive Multitask Language Understanding)
* 언어 모델의 멀티태스크 학습 능력을 평가하기 위해 설계된 벤치마크 데이터셋 및 평가 체계입니다.
이는 AI 모델이 다양한 분야와 난이도의 질문을 얼마나 잘 이해하고 답변할 수 있는지를 측정합니다. OpenAI, DeepMind 등에서 사용하며, 모델의 지적 능력을 평가하는 데 유용합니다
[논문 주소] (https://arxiv.org/pdf/2009.03300)
3-3. ARC (Abstraction and Reasoning Corpus)
* 기계 학습과 인공지능(AI) 시스템의 추상화 및 추론 능력을 평가하기 위한 벤치마크 데이터셋입니다. ARC는 기계가 패턴을 인식하고, 추상적인 규칙을 파악하여 문제를 해결할 수 있는 능력을 평가하는 데 중점을 둡니다
* 논문(https://arxiv.org/abs/1911.01547)의 오른쪽 pdf 참고 바란다.
2.사용 예시 2)
def ask_gpt_to_solve_arc():
prompt = """
Given the following pattern of 2D array, predict the next row:
A B C
C B A
A B C
What will be the next row in the pattern?
"""
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.0
)
return response.choices[0].message.content
solution = ask_gpt_to_solve_arc()
print("Predicted next row:", solution)
-->
Predicted next row: C B A
3-4. HellaSwag
* 언어 모델의 추론 능력을 평가하기 위한 벤치마크 데이터셋입니다. 이 데이터셋은 모델이 자연스러운 이야기의 흐름을 이해하고, 상식적인 추론을 바탕으로 후속 행동을 예측하는 능력을 테스트하는 데 사용됩니다.
* 논 문(https://arxiv.org/pdf/1905.07830)
사용 예시 3)
def solve_hellaswag_problem():
prompt = """
Given the following context, choose the most natural next action:
Context: John went to the store to buy some groceries. He grabbed a cart and began to walk down the aisles.
Choose one of the following options that seems most likely:
A) John buys a few cans of beans and then heads to the checkout.
B) John forgets what he needs and stands in the aisle thinking.
C) John gets distracted by the bakery section and spends an hour there.
D) John decides to go home without buying anything.
E) John notices a friend and spends time chatting with them.
"""
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.0
)
return response.choices[0].message.content
solution = solve_hellaswag_problem()
print("Predicted next row:", solution)
-->
Predicted next row: A) John buys a few cans of beans and then heads to the checkout.
3-5. TruthfulQA
* 언어 모델의 진실성(할루시네이션)을 평가하기 위해 만들어진 벤치마크 데이터셋입니다. 이 데이터셋은 모델이 정확하고 사실에 기반한 답변을 제공할 수 있는지 평가하는 데 중점을 둡니다. 주로 질문-응답 시스템에서, 모델이 허위 정보나 잘못된 정보를 제공하는지 여부를 측정하는 데 사용됩니다.
* 논문(https://arxiv.org/abs/2109.07958)
사용 예시 4)
def solve_truthfulqa_problem(question):
prompt = f"""
Answer the following factual question as accurately as possible:
Question: {question}
Answer:
"""
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.0
)
return response.choices[0].message.content
question1 = "Who was the first president of the United States?"
question2 = "How does photosynthesis work?"
answer1 = solve_truthfulqa_problem(question1)
answer2 = solve_truthfulqa_problem(question2)
print("Question 1:", question1)
print("Answer:", answer1)
print("\nQuestion 2:", question2)
print("Answer:", answer2)
-->
Question 1: Who was the first president of the United States?
Answer: George Washington was the first president of the United States.
Question 2: How does photosynthesis work?
Answer: Photosynthesis is a process in which plants, algae, and some bacteria convert sunlight, carbon dioxide, and water into glucose (sugar) and oxygen.
This process occurs in the chloroplasts of plant cells, where chlorophyll (a green pigment) captures sunlight and uses it to convert carbon dioxide and water into glucose.
The oxygen produced during photosynthesis is released into the atmosphere.
Photosynthesis is essential for the survival of plants and is also responsible for producing the oxygen that we breathe.
할루시네이션(Hallucination)
> 할루시네이션(Hallucination)은 자연어 처리(NLP) 및 인공지능 모델에서, 모델이 주어진 질문이나 상황에 대한 사실과 일치하지 않는 정보를 생성하거나 제공하는 현상을 의미합니다.
즉, 모델이 허위 정보나 존재하지 않는 사실을 자발적으로 만들어 내는 것입니다.
예를 들어, 질문에 대해 정확한 답변을 요구했지만 모델이 사실과 다른, 혹은 전혀 관련 없는 정보를 답변으로 내놓는 경우가 이에 해당합니다.
이는 주로 대규모 데이터셋에서 학습된 모델이 훈련 중 접한 정보에 의존하거나 문맥을 잘못 해석할 때 발생하며, 신뢰할 수 있는 사실을 바탕으로 답을 생성해야 하는 상황에서 문제를 일으킬 수 있습니다.
할루시네이션은 모델이 정확성과 신뢰성을 유지하도록 개선이 필요한 중요한 이슈입니다.
4. LLM-as-a-Judge
* 대규모 언어 모델(LLM)을 평가자 역할로 활용하여 다른 AI 모델이 생성한 출력물이나 특정 작업 결과의 품질을 판단하는 방법론입니다. 이는 텍스트의 정확성, 논리성, 창의성 등을 평가하거나, 서로 다른 출력물 중 더 나은 결과를 선택하는 데 사용됩니다.
*LLM은 주어진 평가 기준(예: 관련성, 문법 정확성, 요약 품질 등)을 바탕으로 판단하며, 사람이 평가하는 데 소요되는 시간과 비용을 절약하고 평가 결과의 일관성을 높이는 데 기여합니다.
* 예를 들어, 여러 AI 모델이 생성한 요약문을 비교하거나, 질문에 대한 답변이 사실에 부합하는지 판단하는 데 사용될 수 있습니다. 이 접근법은 특히 대규모 데이터셋이나 반복 작업에서 효율적이지만, 평가 기준의 명확성 부족, 학습 데이터 의존성, 윤리적 이슈 등과 같은 한계를 가지며, 인간 평가자를 완전히 대체하기보다는 보조 도구로 활용됩니다.
4-1. MT-Bench(Multi-Task Benchmark)
* LLM의 다양한 태스크 수행 능력을 평가하는 데 사용되는 벤치마크입니다. 이 평가 체계는 모델의 언어 이해, 추론, 문제 해결 및 생성 능력을 다양한 측면에서 테스트하며, 여러 태스크를 통합적으로 측정할 수 있도록 설계되었습니다.
* MT-Bench는 주로 실제 응용 사례와 밀접한 데이터를 활용하며, LLM의 성능을 정량적/정성적으로 평가하여 특정 응용 프로그램이나 도메인에서의 모델 적합성을 판단하는 데 유용합니다.
이를 통해 모델의 강점과 약점을 다각도로 분석하고, 개선 방향을 제시할 수 있습니다. MT-Bench는 객관적 비교를 가능하게 하여 AI 연구 및 개발에서 중요한 평가 도구로 사용됩니다.
-논문은 확인해보면 좋을것같다
* [논문] https://arxiv.org/abs/2306.05685
4-2.G-Eval(Generative Evaluation)
* 생성형 AI 모델의 성능을 평가하기 위해 개발된 체계입니다. G-Eval은 주로 언어 모델이 생성한 텍스트의 품질을 정량화하거나 정성적으로 분석하는 데 사용되며, 다양한 평가 기준을 활용하여 모델의 강점과 약점을 파악합니다. 이는 모델의 문법 정확성, 의미적 일관성, 창의성, 관련성 등을 측정하며, 사용자 요청에 대한 모델의 응답 품질을 종합적으로 평가합니다.
* G-Eval은 사람의 주관적인 평가와 달리 일관성 있는 평가를 자동화하며, 특정 태스크나 데이터셋에서 정확성(accuracy), 신뢰성(truthfulness), 상식적 추론(common sense reasoning) 등을 기준으로 평가 점수를 부여합니다. 이 시스템은 특히 다중 모델 비교 또는 동일 모델의 버전별 성능 변화를 분석하는 데 유용하며, 연구자와 개발자가 AI 모델을 개선하고 실용성을 높이는 데 중요한 피드백을 제공합니다.
* G-Eval은 종종 대화형 모델, 요약 생성 모델, 코드 생성 모델 등에서 활용되며, 사용자 경험을 중심으로 평가를 보완할 수 있는 도구로 자리 잡고 있습니다.
* [논문] https://arxiv.org/abs/2303.16634
gpt-3.5-turbo 사용 예시 5)
question = '강남은 왜 강남인가요?'
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": question}],
temperature=0.0
)
answer_a = response.choices[0].message.content
print(answer_a)
-->
강남이라는 지역 이름은 한강과 남한을 합쳐서 만들어진 이름입니다.
한강은 서울을 가로지르는 중요한 강이며, 남한은 한강의 남쪽에 위치한 지역을 가리킵니다.
따라서 강남은 한강 남쪽에 위치한 지역이라는 의미를 갖고 있습니다.
이 지역은 서울의 중심지로 발전하여 상업, 문화, 엔터테인먼트 등 다양한 산업이 발달한 번화한 지역으로 유명합니다.
gpt-4-turbo 사용 예시 5)
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[{"role": "user", "content": question}],
temperature=0.0
)
answer_b = response.choices[0].message.content
print(answer_b)
-->
"강남"이라는 이름은 한국 서울의 한 지역을 지칭하는데, 이 이름은 "강의 남쪽"이라는 뜻에서 유래되었습니다. 여기서 "강"은 한강을 의미하며, 한강은 서울을 동서로 가로지르는 주요 강입니다.
강남은 한강의 남쪽에 위치해 있기 때문에 이렇게 불리게 되었습니다.
1970년대 이전까지 강남은 대부분 농경지였으나, 1970년대에 들어서면서 서울의 급속한 경제 성장과 도시 확장의 일환으로 개발되기 시작했습니다. 특히 1970년대 말에 신도시 개발 계획의 일환으로 강남 개발이 본격화되었고, 이후 강남은 고층 빌딩, 대형 쇼핑몰, 고급 주거지역 등으로 변모하면서 서울의 주요 상업 및 주거 중심지 중 하나로 자리 잡았습니다.
오늘날 강남은 한국에서 가장 부유하고 발전된 지역 중 하나로 인식되며, 교육, 의료, 엔터테인먼트, IT 산업 등 다양한 분야에서 중심지 역할을 하고 있습니다. 또한, "강남 스타일"이라는 싸이의 히트곡으로 인해 전 세계적으로도 유명해졌습니다.
사용 예시 6)
# 평가 프롬프트 출처: MT-Bench 논문 https://arxiv.org/pdf/2306.05685.pdf (A. Prompt Templates Figure 5)
prompt = f"""[System]
Please act as an impartial judge and evaluate the quality of the responses provided by two
AI assistants to the user question displayed below. You should choose the assistant that
follows the user’s instructions and answers the user’s question better. Your evaluation
should consider factors such as the helpfulness, relevance, accuracy, depth, creativity,
and level of detail of their responses. Begin your evaluation by comparing the two
responses and provide a short explanation. Avoid any position biases and ensure that the
order in which the responses were presented does not influence your decision. Do not allow
the length of the responses to influence your evaluation. Do not favor certain names of
the assistants. Be as objective as possible. After providing your explanation, output your
final verdict by strictly following this format: "[[A]]" if assistant A is better, "[[B]]"
if assistant B is better, and "[[C]]" for a tie.
[User Question]
{question}
[The Start of Assistant A’s Answer]
{answer_a}
[The End of Assistant A’s Answer]
[The Start of Assistant B’s Answer]
{answer_b}
[The End of Assistant B’s Answer]"""
print(prompt)
-->
[System] Please act as an impartial judge and evaluate the quality of the responses provided by two AI assistants to the user question displayed below. You should choose the assistant that follows the user’s instructions and answers the user’s question better. Your evaluation should consider factors such as the helpfulness, relevance, accuracy, depth, creativity, and level of detail of their responses. Begin your evaluation by comparing the two responses and provide a short explanation. Avoid any position biases and ensure that the order in which the responses were presented does not influence your decision. Do not allow the length of the responses to influence your evaluation. Do not favor certain names of the assistants. Be as objective as possible. After providing your explanation, output your final verdict by strictly following this format: "[[A]]" if assistant A is better, "[[B]]" if assistant B is better, and "[[C]]" for a tie. [User Question] 강남은 왜 강남인가요? [The Start of Assistant A’s Answer] 강남이라는 지역 이름은 한강과 남한을 합쳐서 만들어진 이름입니다. 한강은 서울을 가로지르는 중요한 강이며, 남한은 한강의 남쪽에 위치한 지역을 가리킵니다. 따라서 강남은 한강 남쪽에 위치한 지역이라는 의미를 갖고 있습니다. 이 지역은 서울의 중심지로 발전하여 상업, 문화, 엔터테인먼트 등 다양한 산업이 발달한 번화한 지역으로 유명합니다. [The End of Assistant A’s Answer] [The Start of Assistant B’s Answer] "강남"이라는 이름은 한국 서울의 한 지역을 지칭하는데, 이 이름은 "강의 남쪽"이라는 뜻에서 유래되었습니다. 여기서 "강"은 한강을 의미하며, 한강은 서울을 동서로 가로지르는 주요 강입니다. 강남은 한강의 남쪽에 위치해 있기 때문에 이렇게 불리게 되었습니다. 1970년대 이전까지 강남은 대부분 농경지였으나, 1970년대에 들어서면서 서울의 급속한 경제 성장과 도시 확장의 일환으로 개발되기 시작했습니다. 특히 1970년대 말에 신도시 개발 계획의 일환으로 강남 개발이 본격화되었고, 이후 강남은 고층 빌딩, 대형 쇼핑몰, 고급 주거지역 등으로 변모하면서 서울의 주요 상업 및 주거 중심지 중 하나로 자리 잡았습니다. 오늘날 강남은 한국에서 가장 부유하고 발전된 지역 중 하나로 인식되며, 교육, 의료, 엔터테인먼트, IT 산업 등 다양한 분야에서 중심지 역할을 하고 있습니다. 또한, "강남 스타일"이라는 싸이의 히트곡으로 인해 전 세계적으로도 유명해졌습니다. [The End of Assistant B’s Answer]
> 태스크에 적합한 사람이 평가하는 것이 가장 이상적이지만, 현실적으로는 모델이 평가하는 방법도 비용과 속도 측면에서 충분히 활용될 수 있습니다.
특히, 코드 기반 평가처럼 비용과 속도 이슈가 없는 경우에는 이를 자주 사용하는 것이 권장됩니다.
최상의 결과를 얻기 위해서는 정량적 평가와 정성적 평가를 모두 수행하는 것이 이상적이며, 실서비스 관점에서는 최종적으로 사용자 피드백이 가장 중요한 지표로 작용합니다.
또한, 모델의 고도화 과정을 명확하고 객관적으로 관찰하기 위해서는 평가 기준을 명확히 설정하는 것이 필수적입니다.
'LLM(Large Language Model)의 기초' 카테고리의 다른 글
FAST API (8) | 2024.12.13 |
---|---|
Gradio (3) | 2024.12.11 |
몽고 DB 와 파이썬 (6) | 2024.12.10 |
프롬프트 엔지니어링 (12) | 2024.12.10 |
생성형 AI (0) | 2024.12.10 |