Improve some Korean translation of Applications part

pull/240/head
Pt J 11 months ago
parent ab2aea9b43
commit 9c0dff1727
No known key found for this signature in database
GPG Key ID: BB8E44974AA42548

@ -2,8 +2,8 @@
import { Callout } from 'nextra-theme-docs'
이 장에서는 프롬프트 엔지니어링을 사용하여 유용하고 고급 작업을 수행할 수 있는 몇 가지 흥미로운 고급 방법을 다룹니다.
이 장에서는 프롬프트 엔지니어링을 사용하여 유용 고급 작업을 수행할 수 있는 몇 가지 흥미로운 고급 방법을 다룹니다.
<Callout emoji="⚠️">
This section is under heavy development.
</Callout>
</Callout>

@ -1,7 +1,7 @@
{
"pal": "PAL프로그램 언어 지원 모델)",
"pal": "PAL프로그램지원언어모델)",
"generating": "데이터 생성",
"coding": "Generating Code",
"workplace_casestudy": "학위가 필요한 직업을 분류한 사례연구",
"workplace_casestudy": "학위가 필요한 직업을 분류한 사례 연구",
"pf": "Prompt Function"
}

@ -1,47 +1,44 @@
# 데이터 생성
일관된 텍스트를 생성하는 것은 LLM이 두각을 나타내는 분야입니다. 효과적인 프롬프트 전략을 사용하면 모델을 조정하여 보다 우수하고 일관적이며 더욱 사실에 입각한 답변을 생성할 수 있습니다. 또한 LLM은 모든 종류의 실험과 평가를 수행하기 위한 유용한 데이터를 생성하는 데 특히 유용합니다. 가령, 다음과 같이 감정 분류기에 대한 빠른 샘플을 생성할 수 있습니다.
일관된 텍스트를 생성하는 것은 LLMs이 두각을 나타내는 분야입니다. 효과적인 프롬프트 전략을 사용하면 모델을 더 낫고, 일관성 있고, 더 사실에 기반한 답변을 생성할 수 있습니다. LLMs는 여러 종류의 실험과 평가를 수행하는 데 큰 도움이 되는 데이터를 생성하는 데 특히 유용합니다. 예를 들어, 다음과 같이 감정 분석을 위한 10가지 예를 생성해보겠습니다:
_프롬프트:_
_Prompt:_
```
감정 분석을 위한 10가지 예시를 작성해 줘. 예시는 긍정적 혹은 부정적으로 둘 중 하나로 분류할 수 있어. 부정적인 예시 2개와 긍정적인 예시 8개를 생성해줘. 다음 예시와 같은 형식을 사용해줘:
감정 분석을 위한 10가지 예시를 작성해 줘. 예시는 긍정적 혹은 부정적 둘 중 하나로 분류할 수 있어. 부정적인 예시 2개와 긍정적인 예시 8개를 생성해줘. 다음 예시와 같은 형식을 사용해줘.
Q: <문장>
A: <감정>
```
_출력:_
_Output:_
```
Q: 나 방금 굉장한 소식을 들었어!
A: 긍정
A: 긍정
Q: 우리 급여가 올랐네요!
A: 긍정
Q: 우리 급여가 인상되었어!
A: 긍정
Q: 나는 오늘 내가 성취한 일에 뿌듯함을 느껴.
A: 긍정
A: 긍정
Q: 최고의 하루를 보내고 있어!
A: 긍정
A: 긍정
Q: 이번 주말을 매우 고대하고있어!
A: 긍정
Q: 이번 주말을 매우 고대하고 있어!
A: 긍정
Q: 나는 지금 최고의 선물을 받았어!
A: 긍정
A: 긍정
Q: 나는 지금 매우 행복해.
A: 긍정
A: 긍정
Q: 이렇게 훌륭한 가족의 일원으로서 축복받았다고 느껴.
A: 긍정
Q: 이렇게 훌륭한 가족의 일원이라는 건 정말 축복이야.
A: 긍정
Q: 바깥 날씨가 굉장히 흐리네요.
A: 부정
Q: 바깥 날씨가 굉장히 흐.
A: 부정
Q: 방금 끔찍한 소식을 들었어.
A: 부정
Q: 방금 끔찍한 소식을 들었어.
A: 부정
```
이는 매우 유용합니다. 실제로 이 가이드의 다른 섹션의 테스트에서 이 예시를 사용하고 있을정도로요.
이는 매우 유용합니다. 이 가이드의 다른 섹션의 테스트에서 실제로 이 예시를 사용하고 있을 정도로요.

@ -1,19 +1,19 @@
# PAL (프로그램 지원 언어 모델)
# PAL (프로그램지원언어모델)
import { Callout, FileTree } from "nextra-theme-docs";
import { Screenshot } from "components/screenshot";
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" />
이미지 출처: [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
import openai
@ -24,69 +24,69 @@ from langchain.llms import OpenAI
from dotenv import load_dotenv
```
우선 몇 가지 설정을 해보겠습니다:
우선 몇 가지를 구성해 보겠습니다.
```python
load_dotenv()
# API 설정
# API 구성
openai.api_key = os.getenv("OPENAI_API_KEY")
# LangChain 설정
# LangChain 구성
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
```
모델 인스턴스를 셋업합니다:
모델 인스턴스를 설정합니다.
```python
llm = OpenAI(model_name='text-davinci-003', temperature=0)
```
설정 프롬프트 + 질문:
프롬프트와 질문을 설정합니다.
```python
question = "오늘은 2023년 2월 27일이야. 나는 정확히 25년전에 태어났어. 내가 태어난 날짜를 MM/DD/YYYY 형식으로 반환해줘"
question = "오늘은 2023년 2월 27일이야. 나는 정확히 25년 전에 태어났어. 내가 태어난 날짜를 MM/DD/YYYY 형식으로 알려줘."
DATE_UNDERSTANDING_PROMPT = """
# Q: 36시간이 지나면 2015년이야. 오늘로부터 일주일 뒤는 며칠인지 MM/DD/YYYY 형식으로 반환해줘.
# Q: 2015년까지 36시간 남았어. 오늘로부터 일주일 뒤는 며칠인지 MM/DD/YYYY 형식으로 알려줘.
# 2015년이 되기까지 36시간이 남았다면 오늘은 36시간 전이다.
today = datetime(2015, 1, 1) - relativedelta(hours=36)
# 오늘부터 일주일 뒤
# 오늘부터 일주일 뒤
one_week_from_today = today + relativedelta(weeks=1)
# The answer formatted with %m/%d/%Y is
# 답을 %m/%d/%Y 형식으로 하면
one_week_from_today.strftime('%m/%d/%Y')
# Q: 2019년의 첫 날은 화요일이고 오늘은 2019년의 첫 번째 월요일이야. 오늘 날짜를 MM/DD/YYY로 반환해줘.
# 2019년의 첫 날이 화요일이고 오늘이 2019년 첫 월요일이라면 오늘은 6일 후입니다.
# Q: 2019년의 첫 날은 화요일이고 오늘은 2019년의 첫 월요일이야. 오늘 날짜를 MM/DD/YYYY 형식으로 알려줘.
# 2019년의 첫 날이 화요일이고 오늘이 2019년 첫 월요일이라면 오늘은 6일 후다.
today = datetime(2019, 1, 1) + relativedelta(days=6)
# %m/%d/%Y 형식으로 포맷팅된 답변은
# 답을 %m/%d/%Y 형식으로 하면
today.strftime('%m/%d/%Y')
# Q: 콘서트는 1943년 6월 1일에 열리기로 예정되어 있었는데, 하루 연기되어 오늘로 변경됐어. 10일 전 날짜를 MM/DD/YYY 형식으로 반환해줘.
# 콘서트가 1943년 6월 1일로 예정되어 있었으나 오늘로 하루 연기되었다면, 오늘은 하루가 지난 것입니다.
# Q: 콘서트는 1943년 6월 1일에 열리기로 예정되어 있었는데, 하루 연기되어 오늘로 변경됐어. 10일 전 날짜를 MM/DD/YYY 형식으로 알려줘.
# 콘서트가 1943년 6월 1일로 예정되어 있었으나 오늘로 하루 연기되었다면, 오늘은 하루가 지난 것다.
today = datetime(1943, 6, 1) + relativedelta(days=1)
# 열흘 전,
# 열흘 전의 날짜는
ten_days_ago = today - relativedelta(days=10)
# %m/%d/%Y의 형식으로 반환된 답은
# 답을 %m/%d/%Y의 형식으로 하면
ten_days_ago.strftime('%m/%d/%Y')
# Q: 오늘은 1969년 4월 19일이야. 24시간 후의 날짜를 MM/DD/YYYY 형식으로 반환해줘.
# 오늘의 날짜는 4/19/1969 입니다.
# Q: 오늘은 1969년 4월 19일이야. 24시간 후의 날짜를 MM/DD/YYYY 형식으로 알려줘.
# 오늘의 날짜는 1969년 4월 19일이다.
today = datetime(1969, 4, 19)
# 24시간 후,
# 24시간 후의 날짜는
later = today + relativedelta(hours=24)
# %m/%d/%Y의 형식으로 반환된 답은
# 답을 %m/%d/%Y의 형식으로 하면
today.strftime('%m/%d/%Y')
# Q: Jane은 오늘이 2002년 3월 11일이라고 생각했지만 실제로는 3월 12일이고 하루 뒤야. 24시간 후의 날짜를 MM/DD/YYYY 형식으로 반환해줘.
# 제인은 오늘 날짜를 3/11/2002 라고 생각했고, 사실 오늘은 3월 12일이면 오늘 날짜는 3/1/2002 입니다.
# Q: 영희는 오늘이 2002년 3월 11일이라고 생각했지만 실제로는 다음날인 3월 12일이야. 24시간 후의 날짜를 MM/DD/YYYY 형식으로 알려줘.
# 영희는 오늘 날짜를 2002년 3월 11일이라고 생각했고, 사실 오늘은 3월 12일이면 오늘 날짜는 2002년 3월 12일이다.
today = datetime(2002, 3, 12)
# 24시간 후,
# 24시간 후의 날짜는
later = today + relativedelta(hours=24)
# %m/%d/%Y의 형식으로 반환된 답은
# 답을 %m/%d/%Y의 형식으로 하면
later.strftime('%m/%d/%Y')
# Q: Jane은 2001년 2월 마지막 날 태어났어. 오늘은 Jane의 16번째 생일이야. 어제의 날짜를 MM/DD/YYYY 형식으로 반환해줘.
# Jane이 2001년 2월의 마지막 날에 태어났다면 오늘은 16년 후입니다.
# Q: 영희는 2001년 2월 마지막 날 태어났어. 오늘은 영희의 16번째 생일이야. 어제의 날짜를 MM/DD/YYYY 형식으로 알려줘.
# 영희가 2001년 2월의 마지막 날에 태어났고 오늘이 영희의 16번째 생일이라면 오늘은 16년 후다.
today = datetime(2001, 2, 28) + relativedelta(years=16)
# 어제,
# 어제 날짜는
yesterday = today - relativedelta(days=1)
# %m/%d/%Y의 형식으로 반환된 답은
# 답을 %m/%d/%Y의 형식으로 하면
yesterday.strftime('%m/%d/%Y')
# Q: {question}
""".strip() + '\n'

@ -1,41 +1,42 @@
# 학위가 필요한 직업을 분류한 사례연구
# 학위가 필요한 직업을 분류한 사례 연구
[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 프롬프팅에 비해 상대적으로 낮은 퍼포먼스를 보여주었습니다.
- 프롬프트는 올바른 추론 도출에 엄청난 영향을 미칩니다. 모델에게 직업을 분류하라고 간단하게 명령했을 때에는 65.6의 F1 점수를 얻었으나, 포스트-프롬프트 엔지니어링 모델은 91.7의 F1 점수를 보여주었습니다.
- 모델을 템플릿에 강제로 적용하려 한 모든 경우에 성능이 저하되었습니다. (이 방법은 논문 뒤 쪽의 GPT-4를 사용한 초기 테스트에서 사라졌습니다.)
- 아주 작은 수정사항이 성능에 엄청난 영향을 미쳤습니다.
- 아래 표에서 모든 수정사항에 따른 결과를 확인하세요.
- 적절한 지시를 내리고, 키 포인트를 반복하는 것이 가장 큰 성능 동력으로 나타났습니다.
- 모델에게 (사람)이름을 지어주고 불러주는 것은 F1 점수를 증가시켰습니다.
- 전문가의 지식이 필요하지 않은 이러한 단순 작업의 경우, 모든 실험에서 퓨샷 생각의 사슬 프롬프팅(Few-shot CoT prompting)이 제로샷 프롬프팅(Zero-shot prompting)에 비해 상대적으로 낮은 성능을 보여주었습니다.
- 프롬프트는 올바른 추론 도출에 엄청난 영향을 미칩니다. 모델에게 직업을 분류하라고 단순히 명령했을 때에는 65.6의 F1 점수를 얻었으나, 프롬프트 엔지니어링 모델은 91.7의 F1 점수를 보여주었습니다.
- 모델을 템플릿에 강제로 적용하려 한 모든 경우에 성능이 저하되었습니다(이 현상은 논문 후반의 GPT-4를 사용한 초기 테스트에서 사라졌습니다).
- 여러 작은 수정사항이 성능에 엄청난 영향을 미쳤습니다.
- 아래 표에서 테스트 된 모든 수정 사항을 확인할 수 있습니다.
- 적절한 지시를 내리고 요점을 반복하는 것이 가장 큰 성능 동력으로 나타났습니다.
- 단순히 모델에게 (사람) 이름을 지어주는 것으로 F1 점수가 0.6 상승했습니다.
### 실험에 쓰인 프롬프트 수정사항들
### 테스트 된 프롬프트 수정 사항들
| 약어 | 설명 |
| -------- | --------------------------------------------------------------------------------- |
| Baseline | 채용 공고를 제공하고 갓 졸업한 신입에게 적합한지 묻습니다. |
| CoT | 쿼리를 날리기 전에 몇 가지 정확한 예시를 제공합니다. |
| Zero-CoT | 모델에게 단계별로 추론한 뒤 정답을 제시하도록 요구합니다. |
| rawinst | 역할 및 작업에 대한 지침을 사용자 메시지에 추가하여 제공합니다. |
| sysinst | 시스템 메시지로서의 역할과 작업에 대한 지침을 제공합니다. |
| bothinst | 시스템 메시지로서의 역할과 사용자 메시지로서의 작업을 사용하여 명령을 분할합니다. |
| mock | 토론 내용을 인식하는 부분을 따라하여 작업 지시를 내립니다. |
| reit | 주요 요소를 반복하여 지시를 보강합니다. |
| Baseline | 채용 공고를 제공하고 갓 졸업한 사람에게 적합한지 묻습니다. |
| CoT | 질의를 하기 전에 정확히 분류된 몇 가지 예시를 제공합니다. |
| Zero-CoT | 모델에게 단계별로 추론하여 정답을 제시하도록 요구합니다. |
| rawinst | 역할 및 작업에 대한 지시를 사용자 메시지에 추가함으로써 제공합니다. |
| sysinst | 역할 및 작업에 대한 지시를 시스템 메시지로서 제공합니다. |
| bothinst | 시스템 메시지로서의 역할과 사용자 메시지로서의 작업으로 명령을 분할합니다. |
| mock | 그들을 인정하는 의사 토론을 통해 작업 지시를 제공합니니다. |
| reit | 요점을 반복하여 지시를 강화합니다. |
| strict | 모델에게 주어진 템플릿을 엄격히 준수하여 답변하도록 요청합니다. |
| loose | 주어진 템플릿 뒤에 최종 답변만 반환하도록 요청합니다. |
| loose | 최종 답변만 주어진 탬플릿을 준수하여 반환하도록 요청합니다. |
| right | 모델에게 올바른 결론에 도달하도록 요청합니다. |
| info | 일반적인 추론 실패를 해결하기 위한 추가 정보를 제공합니다. |
| name | 모델에게 이름을 지어주고 대화 시 사용합니다. |
| pos | 쿼리를 날리기 전 모델에게 긍정적인 피드백을 제공합니다. |
| name | 모델에게 대화에서 부를 이름을 제공합니다. |
| pos | 질의를 하기 전 모델에게 긍정적인 피드백을 제공합니다. |
### 위의 프롬프트 수정사항이 성능에 미치는 영향
| | 정확도 | 리콜 | F1 | 템플릿 고착도 |
### 프롬프트 수정 사항이 성능에 미치는 영향
| | 정확도 | 재현율 | F1 | 템플릿 고착도 |
| --------------------------------------- | -------- | ------ | -------- | ------------- |
| _Baseline_ | _61.2_ | _70.6_ | _65.6_ | _79%_ |
| _CoT_ | _72.6_ | _85.1_ | _78.4_ | _87%_ |
@ -52,5 +53,4 @@
| +bothinst+mock+reit+right+info+name | 85.7 | 96.8 | 90.9 | 79% |
| +bothinst+mock+reit+right+info+name+pos | **86.9** | **97** | **91.7** | 81% |
템플릿 고착도란 요구한 형식으로 모델이 응답한 빈도를 나타냅니다.
Template stickiness refers to how frequently the model answers in the desired format.
템플릿 고착도란 모델이 요구받은 형식으로 응답한 빈도를 나타냅니다.

Loading…
Cancel
Save