일관된 텍스트를 생성하는 것은 LLM이 두각을 나타내는 분야입니다. 효과적인 프롬프트 전략을 사용하면 모델을 조정하여 보다 우수하고 일관적이며 더욱 사실에 입각한 답변을 생성할 수 있습니다. 또한 LLM은 모든 종류의 실험과 평가를 수행하기 위한 유용한 데이터를 생성하는 데 특히 유용합니다. 가령, 다음과 같이 감정 분류기에 대한 빠른 샘플을 생성할 수 있습니다.
일관된 텍스트를 생성하는 것은 LLMs이 두각을 나타내는 분야입니다. 효과적인 프롬프트 전략을 사용하면 모델을 더 낫고, 일관성 있고, 더 사실에 기반한 답변을 생성할 수 있습니다. LLMs는 여러 종류의 실험과 평가를 수행하는 데 큰 도움이 되는 데이터를 생성하는 데 특히 유용합니다. 예를 들어, 다음과 같이 감정 분석을 위한 10가지 예를 생성해보겠습니다:
_Prompt:_
_프롬프트:_
```
```
감정 분석을 위한 10가지 예시를 작성해 줘. 예시는 긍정적 혹은 부정적으로 둘 중 하나로 분류할 수 있어. 부정적인 예시 2개와 긍정적인 예시 8개를 생성해줘. 다음 예시와 같은 형식을 사용해줘:
감정 분석을 위한 10가지 예시를 작성해 줘. 예시는 긍정적 혹은 부정적 둘 중 하나로 분류할 수 있어. 부정적인 예시 2개와 긍정적인 예시 8개를 생성해줘. 다음 예시와 같은 형식을 사용해줘.
Q: <문장>
Q: <문장>
A: <감정>
A: <감정>
```
```
_출력:_
_Output:_
```
```
Q: 나 방금 굉장한 소식을 들었어!
Q: 나 방금 굉장한 소식을 들었어!
A: 긍정
A: 긍정적
Q: 우리 급여가 올랐네요!
Q: 우리 급여가 인상되었어!
A: 긍정
A: 긍정적
Q: 나는 오늘 내가 성취한 일에 뿌듯함을 느껴.
Q: 나는 오늘 내가 성취한 일에 뿌듯함을 느껴.
A: 긍정
A: 긍정적
Q: 최고의 하루를 보내고 있어!
Q: 최고의 하루를 보내고 있어!
A: 긍정
A: 긍정적
Q: 이번 주말을 매우 고대하고있어!
Q: 이번 주말을 매우 고대하고있어!
A: 긍정
A: 긍정적
Q: 나는 지금 최고의 선물을 받았어!
Q: 나는 지금 최고의 선물을 받았어!
A: 긍정
A: 긍정적
Q: 나는 지금 매우 행복해.
Q: 나는 지금 매우 행복해.
A: 긍정
A: 긍정적
Q: 이렇게 훌륭한 가족의 일원으로서 축복받았다고 느껴.
Q: 이렇게 훌륭한 가족의 일원이라는 건 정말 축복이야.
A: 긍정
A: 긍정적
Q: 바깥 날씨가 굉장히 흐리네요.
Q: 바깥 날씨가 굉장히 흐려.
A: 부정
A: 부정적
Q: 방금 끔찍한 소식을 들었어요.
Q: 방금 끔찍한 소식을 들었어.
A: 부정
A: 부정적
```
```
이는 매우 유용합니다. 실제로 이 가이드의 또 다른 섹션의 테스트에서 이 예시를 사용하고 있을정도로요.
이는 매우 유용합니다. 이 가이드의 다른 섹션의 테스트에서 실제로 이 예시를 사용하고 있을정도로요.
import { Callout, FileTree } from "nextra-theme-docs";
import { Callout, FileTree } from "nextra-theme-docs";
import { Screenshot } from "components/screenshot";
import { Screenshot } from "components/screenshot";
import PAL from "../../img/pal.png";
import PAL from "../../img/pal.png";
[Gao et al., (2022)](https://arxiv.org/abs/2211.10435)은 프로그램 지원 언어 모델(PAL)이라고 불리며 솔루션을 얻기 위한 자유 형식 텍스트 대신 Python 인터프리터와 같은 프로그램 실행 시 해결 단계를 오프로드합니다.
[Gao et al., (2022)](https://arxiv.org/abs/2211.10435)는 LLM을 이용하여 자연어 문제를 읽고 중간 추론 단계로서의 프로그램을 생성하는 방법을 제시합니다. 그 방법은 프로그램지원언어모델(program-aided language models; PAL)이라고 이름 붙었으며, 해답을 얻기 위해 자유 형식 텍스트를 사용하는 대신 파이썬 인터프리터와 같은 프로그래밍 방식의 런타임을 통해 단계적으로 해결해 나간다는 점에서 생각의 사슬(chain-of-thought) 프롬프팅과 차이가 있습니다.
<Screenshot src={PAL} alt="PAL" />
<Screenshot src={PAL} alt="PAL" />
이미지 출처: [Gao et al., (2022)](https://arxiv.org/abs/2211.10435)
이미지 출처: [Gao et al., (2022)](https://arxiv.org/abs/2211.10435)
LangChain과 OpenAI GPT-3을 사용한 예를 살펴보겠습니다. 우리는 Python 인터프리터를 활용하여 질문을 해석하고 답변을 제공할 수 있는 간단한 애플리케이션을 개발해야하는 상황이라고 가정해보겠습니다.
LangChain과 OpenAI GPT-3을 사용한 예시를 살펴보겠습니다. 우리는 파이썬 인터프리터를 활용하여 질문을 해석하고 답변을 제공하는 간단한 애플리케이션을 개발해야 하는 상황이라고 가정해 보겠습니다.
특히, 날짜 이해가 필요한 질문에 LLM을 사용하여 답변할 수 있는 기능을 만드는 것에 초점을 맞추겠습니다. 프롬프트에 제공한 몇 가지 예시는 [여기](https://github.com/reasoning-machines/pal/blob/main/pal/prompt/date_understanding_prompt.py)에서 채택했습니다.
그 중에서도 날짜에 대한 이해가 필요한 질문에 대해서 LLM을 이용하여 답할 수 있는 기능을 만들고자 합니다. LLM에 제공할 프롬프트의 예제 중 일부는 [여기](https://github.com/reasoning-machines/pal/blob/main/pal/prompt/date_understanding_prompt.py)에서 채택했습니다.
다음은 우리가 필요로하는 import 문 입니다:
다음은 우리가 사용하는 import 문입니다.
```python
```python
import openai
import openai
@ -24,69 +24,69 @@ from langchain.llms import OpenAI
[Clavié et al., 2023](https://arxiv.org/abs/2303.07142)는 프롬프트 엔지니어링을 적용한 미디엄 스케일의 텍스트 분류 유스케이스 사례연구를 발표했습니다. 분류 작업을 통해서 특정 직업이 대학을 갓 졸업한 사람에게 꼭 맞는 "신입 레벨" 인지, 여러 프롬프트 엔지니어링 테크닉을 사용하여 평가한 뒤 GPT-3.5 (`gpt-3.5-turbo`)를 사용하여 결과를 공유했습니다.
[Clavié et al., 2023](https://arxiv.org/abs/2303.07142)는 생산 시스템에 중간 규모 텍스트 분류 사용 사례를 적용한 프롬프트 엔지니어링에 대한 사례 연구를 발표했습니다. 직업이 정말 대학을 갓 졸업한 사람에게 적합한 "입문 수준의 직업"인지 아닌지 분류하는 작업을 하여 일련의 프롬프트 엔지니어링 기술을 평가하고 GPT-3.5 (`gpt-3.5-turbo`)를 이용하여 결과를 보고했습니다.
이 연구는 강력한 베이스라인인 DeBERTa-V3를 포함한 여러 다른 모델들을 LLM이 가뿐히 능가했음을 증명합니다. 또한 `gpt-3.5-turbo`가 구 버전의 GPT3 variants의 모든 키 메트릭에서 두각을 나타냈음을 보여주었습니다만, 템플릿에 한정하여 추가 출력 파싱을 필요로 할 만큼 다른 variants보다는 조금 떨어진 성능을 확인할 수 있었습니다.
이 연구는 LLM이 DeBERTa-V3의 매우 강력한 기준선을 포함한 다른 모든 테스트된 모델들을 능가했음을 보여줍니다. `gpt-3.5-turbo` 또한 모든 주요 메트릭에서 구 버전의 GPT3 변종보다 눈에 띄게 뛰어난 성능을 보이지만, 템플릿에 대한 적용성이 다른 변종들에 비해 부족하여 추가적인 출력 파싱이 필요합니다.
프롬프트 엔지니어링 접근법에서 얻은 주요 결과는 다음과 같습니다:
이 연구의 프롬프트 엔지니어링 접근법에서 얻은 주요 결과는 다음과 같습니다.
- 전문가의 지식이 필요하지 않은 이러한 단순 작업의 경우, 모든 실험에서 Few-shot CoT 프롬프팅이 Zero-shot 프롬프팅에 비해 상대적으로 낮은 퍼포먼스를 보여주었습니다.
- 전문가의 지식이 필요하지 않은 이러한 단순 작업의 경우, 모든 실험에서 퓨샷 생각의 사슬 프롬프팅(Few-shot CoT prompting)이 제로샷 프롬프팅(Zero-shot prompting)에 비해 상대적으로 낮은 성능을 보여주었습니다.
- 프롬프트는 올바른 추론 도출에 엄청난 영향을 미칩니다. 모델에게 직업을 분류하라고 간단하게 명령했을 때에는 65.6의 F1 점수를 얻었으나, 포스트-프롬프트 엔지니어링 모델은 91.7의 F1 점수를 보여주었습니다.
- 프롬프트는 올바른 추론 도출에 엄청난 영향을 미칩니다. 모델에게 직업을 분류하라고 단순히 명령했을 때에는 65.6의 F1 점수를 얻었으나, 프롬프트 엔지니어링 된 모델은 91.7의 F1 점수를 보여주었습니다.
- 모델을 템플릿에 강제로 적용하려 한 모든 경우에 성능이 저하되었습니다. (이 방법은 논문 뒤 쪽의 GPT-4를 사용한 초기 테스트에서 사라졌습니다.)
- 모델을 템플릿에 강제로 적용하려 한 모든 경우에 성능이 저하되었습니다(이 현상은 논문 후반의 GPT-4를 사용한 초기 테스트에서 사라졌습니다).
- 아주 작은 수정사항이 성능에 엄청난 영향을 미쳤습니다.
- 여러 작은 수정사항이 성능에 엄청난 영향을 미쳤습니다.
- 아래 표에서 모든 수정사항에 따른 결과를 확인하세요.
- 아래 표에서 테스트 된 모든 수정 사항을 확인할 수 있습니다.
- 적절한 지시를 내리고, 키 포인트를 반복하는 것이 가장 큰 성능 동력으로 나타났습니다.