Merge branch '01_Tech' into main

pull/243/head
Sun-woo Park 11 months ago committed by GitHub
commit 44f6ff067c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -4,9 +4,9 @@ import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import ACTIVE from '../../img/active-prompt.png'
Chain-of-thought (CoT) 방식은 사람이 라벨링을 한 예제에 의존합니다. 이 방법의 문제점은 예시가 다양한 작업에 가장 효과적인 예시가 아닐 수 있다는 것입니다. 이 문제를 해결하기 위해 [Diao 외, (2023)](https://arxiv.org/pdf/2302.12246.pdf)는 최근 Active-Prompt라는 새로운 프롬프트 접근 방식을 제안하여 LLMs을 다양한 작업별 예시 프롬프트(사람이 설계한 CoT 추론으로 라벨링)에 적용했습니다.
Chain-of-thought (CoT) 방법은 사람이 만든 고정된 규범을 의존합니다. 이 규범의 문제점은 다양한 작업에 대해 가장 효과적인 예시가 아닐 수 있다는 것입니다. 이 문제를 해결하기 위해 [Diao 외, (2023)](https://arxiv.org/pdf/2302.12246.pdf)는 최근 Active-Prompt라는 새로운 프롬프트 접근 방식을 제안하여 LLMs을 다양한 작업별 예시 프롬프트(사람이 설계한 CoT 추론으로 라벨링)에 적용했습니다.
아래는 제안 방식에 대한 개요도입니다. 첫 번째 단계는 몇 가지 CoT 예제를 포함하거나 포함하지 않고 LLM에 질문하는 것입니다. 일련의 훈련 질문에 대해 *k* 개의 가능한 답변이 생성됩니다. 불확실성 지표는 *k*개의 답변(불일치 사용)을 기반으로 계산됩니다. 가장 불확실한 질문은 사람이 라벨을 달도록 선택됩니다. 그런 다음 라벨이 달린 새로운 예시를 사용하여 각 질문을 추론합니다.
아래는 제안 방식에 대한 개요도입니다. 첫 번째 단계는 몇 가지 CoT 예제를 포함하거나 포함하지 않고 LLM에 질문하는 것입니다. 일련의 학습 질문에 대해 *k* 개의 가능한 답변이 생성됩니다. 불확실성 메트릭은 *k*개의 답변(불일치 사용)을 기반으로 계산됩니다. 가장 불확실한 질문은 사람이 주석을 달기 위해 선택합니다. 그런 다음 주석이 달린 새로운 예제를 사용하여 각 질문을 추론합니다.
<Screenshot src={ACTIVE} alt="ACTIVE" />
Image Source: [Diao et al., (2023)](https://arxiv.org/pdf/2302.12246.pdf)
이미지 출처: [Diao et al., (2023)](https://arxiv.org/pdf/2302.12246.pdf)

@ -6,21 +6,21 @@ import APE from '../../img/APE.png'
import APECOT from '../../img/ape-zero-shot-cot.png'
<Screenshot src={APE} alt="APE" />
Image Source: [Zhou et al., (2022)](https://arxiv.org/abs/2211.01910)
이미지 출처: [Zhou et al., (2022)](https://arxiv.org/abs/2211.01910)
[Zhou et al., (2022)](https://arxiv.org/abs/2211.01910)은 명령의 자동 생성 및 선택을 위한 프레임워크인 자동 프롬프트 엔지니어(APE)를 제안합니다. 명령 생성 문제는 LLM을 사용하여 솔루션 후보를 생성하고 검색하는 블랙 박스 최적화 문제로 취급되는 자연어 합성으로 해결됩니다.
[Zhou et al., (2022)](https://arxiv.org/abs/2211.01910)은 명령의 자동 생성 및 선택을 위한 프레임워크인 자동 프롬프트 엔지니어(APE)를 제안합니다. 명령 생성 문제는 LLM을 사용하여 솔루션 후보를 생성하고 검색하는 블랙 박스 최적화 문제로 해결된 자연어 합성으로 프레임화됩니다.
첫 번째 단계에는 태스크 명령어 후보를 생성하기 위한 출력 데모가 제공되는 대규모 언어 모델(추론 모델)이 포함됩니다. 이러한 후보 솔루션은 검색 절차를 안내합니다. 명령은 대상 모델을 사용하여 수행되며 계산된 평가 점수에 따라 최적의 명령이 선택됩니다.
첫 번째 단계는 작업에 대한 명령어 후보를 생성하기 위해 출력 데모가 제공되는 큰 언어 모델(인터페이스 모델)을 포함합니다. 이러한 후보 솔루션이 검색 절차를 안내합니다. 대상 모델을 사용하여 명령을 실행한 다음 계산된 평가 점수를 기준으로 가장 적합한 명령을 선택합니다.
APE는 사람이 설계한 "Let's think step by step" 프롬프트보다 더 우수한 zero-shot CoT 프롬프트(아래)를 찾아냈습니다. ([Kojima et al., 2022](https://arxiv.org/abs/2205.11916)).
APE는 사람이 설계한 "단계별로 생각하자" 프롬프트보다 더 우수한 zero-shot CoT 프롬프트를 찾아냈습니다. ([Kojima et al., 2022](https://arxiv.org/abs/2205.11916)).
"Let's work this out in a step by step way to be sure we have the right answer."라는 프롬프트는 CoT 추론을 유도하여 MultiArith와 GSM8K의 벤치마크에서 성능을 향상시켰습니다:
"우리가 올바른 답을 가지고 있는지 확인하기 위해 단계적으로 이 문제를 해결합시다."라는 프롬프트는 일련의 추론을 이끌어 내고 MultiArith 및 GSM8K 벤치마크에서 성능을 향상시킵니다:
<Screenshot src={APECOT} alt="APECOT" />
Image Source: [Zhou et al., (2022)](https://arxiv.org/abs/2211.01910)
이미지 출처: [Zhou et al., (2022)](https://arxiv.org/abs/2211.01910)
이 논문에서는 프롬프트를 자동으로 최적화하는 아이디어인 프롬프트 엔지니어링과 관련된 중요한 주제를 다룹니다. 이 페이지에서는 이 주제에 대해 더 자세히 설명하지는 않고, 관련된 중요한 논문을 아래에 소개합니다:
이 논문에서는 프롬프트를 자동으로 최적화하는 아이디어인 프롬프트 엔지니어링과 관련된 중요한 주제를 다룹니다. 우리는 이 주제에 대해 더 자세히 설명하지는 않지만, 관심이 있는 경우 몇 가지 주요 문서를 참조하세요:
- [AutoPrompt](https://arxiv.org/abs/2010.15980) - 경사 유도 검색(gradient-guided search)을 기반으로 다양한 일련의 작업에 대한 프롬프트를 자동으로 만드는 방법을 제안.
- [Prefix Tuning](https://arxiv.org/abs/2101.00190) - NLG 문제에서 학습 가능한 연속 접두사를 앞에 붙이는 미세 튜닝에 대한 가벼운 대안 제시.
- [Prompt Tuning](https://arxiv.org/abs/2104.08691) - 역전파를 통해 소프트 프롬프트를 학습하는 매커니즘 제안.
- [AutoPrompt](https://arxiv.org/abs/2010.15980) - 경사 유도 검색(gradient-guided search)을 기반하여 자동으로 생성하는 프롬프트의 다양한 방법을 제안.
- [Prefix Tuning](https://arxiv.org/abs/2101.00190) - NLG 작업에 대해 학습 가능한 연속 접두사를 추가하는 미세 조정에 대한 가벼운 대안.
- [Prompt Tuning](https://arxiv.org/abs/2104.08691) - 역전파를 통해 소프트 프롬프트를 학습하는 매커니즘 제안.

@ -2,7 +2,7 @@
프롬프트 엔지니어링을 위한 더 진보된 기법 중 하나로 자기 일관성(Self-Consistency)이 있습니다. [Wang et al. (2022)](https://arxiv.org/pdf/2203.11171.pdf)에서 제안한 자기 일관성은 "생각의 사슬 프롬프트에 사용되는 naive greedy 디코딩을 대체하는 것"을 목표로 합니다. 이 아이디어는 퓨샷 생각의 사슬(few-shot CoT)을 통해 여러 가지 다양한 추론 경로를 샘플링하고, 여러 번의 프롬프트 생성 과정을 거쳐 가장 일관된 답을 선택하는 것입니다. 이를 통해 산술 및 상식적인 추론과 관련된 작업에서 생각의 사슬 프롬프트의 성능을 향상시킬 수 있습니다.
다음의 산술 추론에 대한 예를 살펴봅시다:
다음의 산술 추론에 대한 예를 살펴봅시다:
*Prompt:*
```

@ -9,84 +9,103 @@ import ZEROCOT from '../../img/zero-cot.png'
<Screenshot src={COT} alt="COT" />
Image Source: [Wei et al. (2022)](https://arxiv.org/abs/2201.11903)
이미지 출처: [Wei et al. (2022)](https://arxiv.org/abs/2201.11903)
[Wei et al. (2022)](https://arxiv.org/abs/2201.11903)에서 소개된 생각의 사슬(CoT) 프롬프트는 중간 추론 단계를 통해 복잡한 추론을 가능하게 합니다. 이를 단답형 프롬프트와 결합하면 응답하기 전에 추론이 필요한 복잡한 작업에서 더 나은 결과를 얻을 수 있습니다.
*프롬프트:*
*Prompt:*
```
집합 {4, 8, 9, 15, 12, 2, 1}에서 홀수를 모두 더하면 짝수입니다.
답변: 홀수(9, 15, 1)를 모두 더하면 25가 됩니다. 위의 명제는 거짓입니다.
집합 {4, 8, 9, 15, 12, 2, 1}에서 홀수를 모두 더하면 짝수.
답변: 홀수(9, 15, 1)를 모두 더하면 25가 돼. 위의 명제는 거짓이야.
집합 {17, 10, 19, 4, 8, 12, 24}에서 홀수를 모두 더하면 짝수입니다.
답변: 홀수(17, 19)를 모두 더하면 36이 됩니다. 위의 명제는 참입니다.
집합 {17, 10, 19, 4, 8, 12, 24}에서 홀수를 모두 더하면 짝수.
답변: 홀수(17, 19)를 모두 더하면 36이 돼. 위의 명제는 참이야.
집합 {16, 11, 14, 4, 8, 13, 24}에서 홀수를 모두 더하면 짝수입니다.
답변: 홀수(11, 13)를 모두 더하면 24가 됩니다. 위의 명제는 참입니다.
집합 {16, 11, 14, 4, 8, 13, 24}에서 홀수를 모두 더하면 짝수.
답변: 홀수(11, 13)를 모두 더하면 24가 돼. 위의 명제는 참이야.
집합 {17, 9, 10, 12, 13, 4, 2}에서 홀수를 모두 더하면 짝수입니다.
답변: 홀수(17, 9, 13)를 모두 더하면 39가 됩니다. 위의 명제는 거짓입니다.
집합 {17, 9, 10, 12, 13, 4, 2}에서 홀수를 모두 더하면 짝수.
답변: 홀수(17, 9, 13)를 모두 더하면 39가 돼. 위의 명제는 거짓이야.
집합 {15, 32, 5, 13, 82, 7, 1}에서 홀수를 모두 더하면 짝수입니다.
집합 {15, 32, 5, 13, 82, 7, 1}에서 홀수를 모두 더하면 짝수.
답변:
```
*출력:*
*Output:*
```
홀수(15, 5, 13, 7, 1)를 모두 더하면 41이 됩니다. 위의 명제는 거짓입니다.
홀수(15, 5, 13, 7, 1)를 모두 더하면 41이 돼. 위의 명제는 거짓이야.
```
와우! 추론 단계를 추가했을 때 완벽한 결과를 볼 수 있습니다. 사실 더 적은 수의 예제, 즉 하나의 예제만 추가해도 이 과제를 해결할 수 있습니다:
와우! 추론 단계를 추가했을 때 완벽한 결과를 볼 수 있습니다. 사실 더 적은 수의 예시, 즉 하나의 예시만 추가해도 이 과제를 해결할 수 있습니다:
*프롬프트:*
*Prompt:*
```
이 그룹의 홀수는 4, 8, 9, 15, 12, 2, 1과 같이 짝수로 합산됩니다.
A: 홀수(9, 15, 1)를 모두 더하면 25가 됩니다. 정답은 거짓입니다.
이 그룹의 홀수의 합은 짝수야: 4, 8, 9, 15, 12, 2, 1
A: 홀수(9, 15, 1)를 모두 더하면 25가 돼. 정답은 거짓이야.
이 그룹의 홀수는 15, 32, 5, 13, 82, 7, 1과 같이 짝수로 합산됩니다.
이 그룹의 홀수의 합은 짝수야: 15, 32, 5, 13, 82, 7, 1
A:
```
*출력:*
*Output:*
```
홀수(15, 5, 13, 7, 1)를 모두 더하면 41이 됩니다. 답은 False입니다.
홀수(15, 5, 13, 7, 1)를 모두 더하면 41이 돼. 답은 거짓이야.
```
논문의 저자들은 위와 같은 결과가 충분히 큰 LLM에서만 발생하는 특성이라고 주장한다는 점을 명심하세요.
논문의 저자들은 위와 같은 결과가 충분히 큰 대규모언어모델에서만 발생하는 특성이라고 주장한다는 점을 명심하세요.
## Zero-shot COT Prompting
<Screenshot src={ZEROCOT} alt="Zero-shot COT" />
Image Source: [Kojima et al. (2022)](https://arxiv.org/abs/2205.11916)
이미지 출처: [Kojima et al. (2022)](https://arxiv.org/abs/2205.11916)
최근에 나온 아이디어 중 하나로 zero-shot CoT가 있습니다. [zero-shot CoT](https://arxiv.org/abs/2205.11916) (Kojima et al. 2022) 원래의 프롬프트에 "단계적으로 생각하자"를 추가하는 것이 핵심입니다. 간단한 문제를 풀고 모델이 어떻게 작동하는지 살펴봅시다:
최근에 나온 아이디어 중 하나로 제로샷 생각의 사슬\(zero-shot CoT\)이 있습니다. [zero-shot CoT](https://arxiv.org/abs/2205.11916) (Kojima et al. 2022) 원래의 프롬프트에 "단계별로 생각하기"를 추가하는 것이 핵심입니다. 간단한 문제를 풀고 모델이 어떻게 작동하는지 살펴봅시다:
*프롬프트:*
*Prompt:*
```
저는 시장에 가서 사과 10개를 샀습니다. 사과 2개를 이웃에게 주고 2개를 수리공에게 주었습니다. 그리고 사과 5개를 더 사서 1개는 제가 먹었습니다. 저는 몇 개의 사과를 가지고 있었나요?
나는 시장에 가서 사과 10개를 샀어. 사과 2개를 이웃에게 주고, 2개를 수리공에게 주었어. 그리고 사과 5개를 더 사서 1개는 내가 먹었어. 나는 몇 개의 사과를 가지고 있었니?
```
*출력:*
*Output:*
```
사과 11개
```
정답이 틀렸습니다! 위에서 제안한 프롬프트로 시도해 보겠습니다.
오답입니다! 위에서 제안한 "단계별로 생각하기"를 추가한 프롬프트로 시도해 보겠습니다.
*프롬프트:*
*Prompt:*
```
저는 시장에 가서 사과 10개를 샀습니다. 저는 사과 2개를 이웃에게 주고 2개를 수리공에게 주었습니다. 그리고 사과 5개를 더 사서 1개는 제가 먹었습니다. 사과가 몇 개나 남았나요?
나는 시장에 가서 사과 10개를 샀어. 나는 사과 2개를 이웃에게 주고, 2개를 수리공에게 주었어. 그리고 사과 5개를 더 사서 1개는 내가 먹었어. 사과가 몇 개나 남았니?
차근차근 생각해 봅시다.
단계별로 생각해 보자.
```
*출력:*
*Output:*
```
먼저 사과 10개로 시작했습니다.
이웃에게 2개, 수리공에게 2개를 나누어 주었으므로 사과가 6개가 남았습니다.
그런 다음 사과 5개를 더 사서 이제 사과가 11개가 되었습니다.
마지막으로 사과 1개를 먹었으므로 사과 10개가 남게 됩니다.
먼저 사과 10개로 시작했.
이웃에게 2개, 수리공에게 2개를 나누어 주었으므로 사과가 6개가 남았.
그런 다음 사과 5개를 더 사서 이제 사과가 11개가 되었.
마지막으로 사과 1개를 먹었으므로 사과 10개가 남게 .
```
이 간단한 프롬프트가 위와 같은 문제에 효과적이라는 점이 인상적입니다. 프롬프트에 사용할 예제가 너무 많지 않을 때 특히 유용합니다.
이 간단한 프롬프트가 위와 같은 문제에 효과적이라는 점이 인상적입니다. 프롬프트에 사용할 예시가 그리 많지 않을 때 특히 유용합니다.
## Automatic Chain-of-Thought (Auto-CoT)
데모와 함께 생각의 사슬 프롬프트를 적용할 때, 이 과정은 효과적이고 다양한 예시를 수작업으로 포함합니다. 이러한 수작업은 차선의 해결책으로 이어질 수 있습니다. [Zhang 등(2022)](https://arxiv.org/abs/2210.03493)은 "단계별로 생각해보자"라는 프롬프트가 있는 대규모언어모델을 활용하여 데모를 위한 추론 사슬을 하나씩 생성함으로써 수작업을 없애는 접근 방식을 제안합니다. 이 자동 프로세스는 여전히 생성된 체인에 실수가 있을 수 있습니다. 실수로 인한 영향을 완화하기 위해서는 데모의 다양성이 중요합니다. 이 연구에서는 다양한 질문을 샘플링하고 데모를 구성하기 위한 추론 체인을 생성하는 Auto-CoT를 제안합니다.
Auto-CoT는 두 가지 주요 단계로 구성됩니다:
- 1단계): **질문 클러스터링\(question clustering\)**: 주어진 데이터 세트의 질문을 몇 개의 클러스터로 분할합니다.
- 2단계): **데모 샘플링\(demonstration sampling\)**: 각 클러스터에서 대표 질문을 선택하고 간단한 휴리스틱과 함께 제로샷 생각의 사슬(Zero-Shot-Cot)를 사용해 추론 체인을 생성합니다.
간단한 휴리스틱은 질문의 길이(예: 60개의 토큰)와 추론 단계 수(예: 5개의 추론 단계)가 될 수 있습니다. 이렇게 하면 모델이 간단하고 정확한 데모를 사용하도록 장려합니다.
그 과정은 아래에 설명되어 있습니다:
<Screenshot src={AUTOCOT} alt="AUTOCOT" />
이미지 출처: [Zhang et al. (2022)](https://arxiv.org/abs/2210.03493)
Auto-CoT 코드는 [여기](https://github.com/amazon-science/auto-cot)에서 확인할 수 있습니다.

@ -4,13 +4,13 @@ import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import DSP from '../../img/dsp.jpeg'
[Li et al., (2023)](https://arxiv.org/abs/2302.11520) 에서는 원하는 요약을 생성하는 데 있어 LLM을 더 잘 설명하는 새로운 프롬프트 기법을 제안합니다.
[Li et al., (2023)](https://arxiv.org/abs/2302.11520) 에서는 원하는 요약을 생성하는 데 있어 대규모언어모델을 더 잘 안내하는 새로운 프롬프팅 기법을 제안합니다.
조정 가능한 정책 LM은 자극/힌트를 생성하도록 훈련됩니다. LLMs을 최적화하기 위해 RL을 더 많이 사용하고 있습니다.
조정 가능한 정책 언어모델\(Tuneable policy LM\)은 자극\(stimulus\)/힌트\(hint\)를 생성하도록 훈련됩니다. 대규모언어모델을 최적화하기 위해 강화 학습\(RL\)을 더 많이 사용하고 있습니다.
아래 그림은 Directional Stimulus 프롬프트가 표준 프롬프트와 어떻게 비교되는지 보여줍니다. 정책 LM은 블랙박스 frozen LLM을 안내하는 힌트를 생성하기 위해 작게 최적화될 수 있습니다.
아래 그림은 Directional Stimulus 프롬프팅이 표준 프롬프팅과 어떻게 비교되는지 보여줍니다. 정책 언어모델은 블랙박스 고정 대규모언어모델\(black-box frozen LLM\)을 안내하는 힌트를 생성하기 위해 작게 최적화될 수 있습니다.
<Screenshot src={DSP} alt="DSP" />
Image Source: [Li et al., (2023)](https://arxiv.org/abs/2302.11520)
이미지 출처: [Li et al., (2023)](https://arxiv.org/abs/2302.11520)
전체 예는 곧 제공될 예정입니다!
전체 예는 곧 제공될 예정입니다!

@ -1,5 +1,5 @@
# GraphPrompts
[Liu et al., 2023](https://arxiv.org/abs/2302.08043)에서는 다운스트림 작업의 성능을 개선하기 위해 그래프를 위한 새로운 프롬프 프레임워크인 GraphPrompt를 소개합니다.
[Liu et al., 2023](https://arxiv.org/abs/2302.08043)에서는 다운스트림 작업의 성능을 개선하기 위해 그래프를 위한 새로운 프롬프 프레임워크인 GraphPrompt를 소개합니다.
더 많은 예제가 곧 추가될 예정입니다!

@ -11,14 +11,14 @@ Image Source: [Liu et al. 2022](https://arxiv.org/pdf/2110.08387.pdf)
비슷한 아이디어를 사용하여 예측을 하기 전에 지식을 생성하는 데에도 모델을 사용할 수 있을까요? 이것이 바로 [Liu et al. 2022](https://arxiv.org/pdf/2110.08387.pdf)의 논문에서 시도한 것, 즉 프롬프트의 일부로 사용할 지식을 생성하는 것입니다. 특히 상식적인 추론과 같은 작업에 얼마나 도움이 될까요?
간단한 프롬프트를 시도해보겠습니다:
간단한 예제 프롬프트를 살펴보겠습니다:
*Prompt:*
*프롬프트:*
```
골프의 목적 중 하나는 다른 사람보다 더 높은 점수를 얻기 위해 노력하는 것이다. 예, 아니오?
```
*Output:*
*출력:*
```
예.
```
@ -27,7 +27,7 @@ Image Source: [Liu et al. 2022](https://arxiv.org/pdf/2110.08387.pdf)
먼저 몇 가지 "지식"을 생성합니다:
*Prompt:*
*프롬프트:*
```
Input: 그리스는 멕시코보다 크다.
Knowledge: 그리스는 약 131,957 제곱 킬로미터이고, 멕시코는 약 1,964,375 제곱 킬로미터로 멕시코가 그리스보다 1,389% 더 크다.
@ -62,13 +62,13 @@ Knowledge:
다음 단계는 지식을 통합하고 예측하는 것입니다. 답변 형식을 알려주기 위해 질문을 질의응답 형식으로 재구성했습니다.
*Prompt:*
*프롬프트:*
```
Question: 골프의 목적중 하나는 다른 사람보다 더 높은 총점을 얻기 위해 노력하는 것이다. 예, 아니오?
Knowledge: 골프의 목적은 최소의 스트로크로 한 세트의 홀을 플레이하는 것이다. 골프 한 라운드는 일반적으로 18홀로 구성된다. 표준 골프 코스에서는 각 홀을 라운드마다 한 번씩 플레이합니다. 각 스트로크는 1점으로 계산되며 총 스트로크 수를 사용하여 게임의 승자를 결정한다.
설명하고 답해줘:
설명하고 답하십시오:
```
*Answer 1(매우 높은 확신):*
@ -81,7 +81,7 @@ Question: 골프의 목적중 하나는 다른 사람보다 더 높은 총점을
Knowledge: 골프는 경쟁하는 선수(또는 골퍼)가 여러 종류의 클럽을 사용하여 가장 적은 수의 스트로크로 코스에 있는 한 세트의 홀에 공을 치는 정밀한 클럽 앤 볼 스포츠다. 각 홀에서 기록한 총 타수를 합산하여 계산하는 점수가 최저가 되도록 코스를 완주하는 것이 목표다. 가장 낮은 점수를 기록한 플레이어가 게임에서 승리한다.
설명하고 답해줘:
설명하고 답하세요:
```
*Answer 2(낮은 확신)*

@ -4,7 +4,7 @@ import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import MCOT from '../../img/multimodal-cot.png'
[Zhang et al. (2023)](https://arxiv.org/abs/2302.00923)은 최근 멀티모달 CoT 프롬프트 접근 방식을 제안했습니다. 기존의 CoT는 언어 양식에 중점을 둡니다. 반면, 멀티모달 CoT는 텍스트와 이미지를 2단계 프레임워크에 통합합니다. 첫 번째 단계에서는 멀티모달 정보를 기반으로 근거 생성합니다. 그 다음에는 두 번째 단계인 답변 추론이 이어지며, 이 단계에서는 생성된 정보 활용하여 답변을 도출합니다.
[Zhang et al. (2023)](https://arxiv.org/abs/2302.00923)은 최근 멀티모달 생각의 사슬 프롬프팅\(multimodal chain-of-thought prompting\) 접근 방식을 제안했습니다. 기존의 CoT는 언어 양식\(language modality\)에 중점을 둡니다. 반면, 멀티모달 CoT는 텍스트와 이미지를 2단계 프레임워크에 통합합니다. 첫 번째 단계에서는 멀티모달 정보를 기반으로 근거 생성\(rationale generation\)을 포함합니다. 그 다음에는 두 번째 단계인 답변 추론이 이어지며, 이 단계에서는 생성된 정보적 근거들\(informative generated rationales\)을 활용하여 답변을 도출합니다.
멀티모달 CoT 모델(1B)은 ScienceQA 벤치마크에서 GPT-3.5보다 성능이 뛰어났습니다.

@ -1,3 +1,25 @@
# Retrieval Augmented Generation (RAG)
This page needs a translation! Feel free to contribute a translation by clicking the `Edit this page` button on the right side.
import { Screenshot } from 'components/screenshot';
import RAG from '../../img/rag.png';
General-purpose 언어 모델은 일반적인 작업을 달성하도록 감정 분석 및 명명된 엔티티 인식을 미세 조정할 수 있습니다. 이러한 작업에는 일반적으로 추가적인 배경 지식이 필요하지 않습니다.
더 복잡한 지식을 모아 요약하는 작업의 경우 외부 지식 소스에 액세스하여 완료하는 언어 모델 기반 시스템을 구축할 수 있습니다 이를 통해 사실적 일관성을 높이고, 생성된 응답의 신뢰성을 향상시키며, "환각" 문제를 완화하는 데 도움이 됩니다.
Meta AI 연구원들은 이러한 지식을 모아 요약하는 작업을 해결하기 위해 [Retrieval Augmented Generation (RAG)](https://ai.facebook.com/blog/retrieval-augmented-generation-streamlining-the-creation-of-intelligent-natural-language-processing-models/) 라는 방법을 도입했습니다. RAG는 정보 구성 요소를 글자 생성기 모델과 결합합니다. RAG는 미세 조정이 가능하며 전체 모델을 재교육할 필요 없이 내부 지식을 효율적으로 수정할 수 있습니다.
RAG는 입력을 받아 주어진 소스(예: 위키피디아)에서 관련된/지원하는 문서들을 찾습니다. 문서는 원래 입력 프롬프트와 컨텍스트로 연결되어 최종 출력을 생성하는 텍스트 생성기에 공급됩니다 따라서 시간이 지남에 따라 RAG는 어떤 상황이던 사실적으로 적응할 수 있습니다. 이는 LLM의 매개 변수 지식이 정적이기 때문에 매우 유용합니다. RAG는 언어 모델들의 재교육 우회를 허용하여, 검색 기반 생성을 통해 신뢰할 수 있는 출력물을 생성하여 최신 정보로 접속할 수 있습니다.
Lewis et al.,(2021)은 RAG에 대한 범용 미세 조정 레시피를 제안했습니다. 사전 훈련된 seq2seq 모델은 파라메트릭 메모리로 사용되고 위키피디아의 밀집한 벡터 인덱스는 논파라메트릭 메모리로 사용됩니다 (사전 훈련된 신경 리트리버를 사용하여 허용됨). 다음은 접근 방식의 개요입니다:
<Screenshot src={RAG} alt="RAG" />
이미지 소스: [Lewis et el. (2021)](https://arxiv.org/pdf/2005.11401.pdf)
RAG는 [자연스러운 질문](https://ai.google.com/research/NaturalQuestions), [웹 질문](https://paperswithcode.com/dataset/webquestions), 큐레이드 트랙과 같은 여러 벤치마크에서 강력한 성능을 발휘합니다. RAG는 MS-MARCO와 Jeopardy 질문들을 테스트할 때 보다 사실적이고 구체적이며 다양한 응답을 생성합니다. RAG는 ​​또한 FEVER 사실 검증 결과를 개선합니다.
이것은 지식을 모아 요약하는 작업에서 언어 모델의 출력을 향상시키기 위한 실행 가능한 옵션으로서 RAG의 잠재력을 보여줍니다.
최근에는 이러한 리트리버 기반 접근 방식이 더욱 대중화되었으며 기능과 사실적 일관성을 향상시키기 위해 ChatGPT와 같은 인기 있는 LLM이 결합되었습니다.
LangChain 문서에서 [소스를 사용한 질문 답변에 리트리버와 LLM을 사용하는 방법에 대한 간단한 예시](https://python.langchain.com/en/latest/modules/chains/index_examples/vector_db_qa_with_sources.html)를 찾을 수 있습니다.

@ -1,14 +1,167 @@
# ReAct
# ReAct Prompting
import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import REACT from '../../img/react.png'
import REACT1 from '../../img/react/table1.png'
import REACT2 from '../../img/react/alfworld.png'
[Yao et al., 2022](https://arxiv.org/abs/2210.03629)에서는 LLM을 사용하여 추론 추적과 작업별 액션을 인터리브 방식으로 생성하는 프레임워크를 소개했습니다. 추론 추적을 생성하면 모델이 실행 계획을 유도, 추적, 업데이트하고 예외를 처리할 수 있습니다. 실행 단계에서는 지식 기반이나 환경과 같은 외부 소스와 인터페이스하고 정보를 수집할 수 있습니다.
[Yao et al., 2022](https://arxiv.org/abs/2210.03629)에서는 대규모언어모델을 사용하여 *추론 추적\(reasoning traces\)*과 *작업별 행동\(task-specific actions\)*을 인터리브 방식으로 생성하는 ReAct라는 프레임워크를 소개했습니다.
ReAct 프레임워크를 사용하면 LLMs이 외부 도구와 상호 작용하여 보다 신뢰할 수 있고 사실적인 대응으로 이어지는 추가 정보를 검색할 수 있습니다.
추론 추적을 생성하면 모델이 행동 계획을 유도, 추적, 업데이트하고 예외를 처리할 수 있습니다. 행동 단계\(action step\)에서는 지식 기반이나 환경과 같은 외부 소스와 상호 작용하고 정보를 수집할 수 있습니다.
ReAct 프레임워크를 사용하면 대규모언어모델이 외부 도구와 상호 작용하여 보다 신뢰할 수 있고 사실적인 응답으로 이어지는 추가 정보를 검색할 수 있습니다.
연구 결과에 따르면 ReAct는 언어 및 의사 결정 작업에서 여러 최신 기술의 기준선을 능가할 수 있는 것으로 나타났습니다. 또한 ReAct는 인간의 해석 가능성과 대규모언어모델의 신뢰성을 향상시킵니다. 전반적으로 저자들은 추론 과정에서 얻은 내부 지식과 외부 정보를 모두 사용할 수 있는 생각의 사고(CoT)와 함께 ReAct를 사용하는 것이 가장 좋은 접근 방식이라는 사실을 발견했습니다.
## How it Works?
ReAct는 인간이 새로운 작업을 학습하고 의사 결정이나 추론을 할 수 있도록 하는 "행동" 과 "추론"의 시너지 효과에서 영감을 받았습니다.
생각의 사고(CoT) 프롬프팅은 다른 작업들 중에 산술 및 상식적 추론과 관련된 질문에 대한 답을 생성하기 위해 추론 추적을 수행하는 대규모언어모델의 능력을 보여주었습니다[(Wei et al., 2022)](https://arxiv.org/abs/2201.11903). 그러나 외부 세계에 대한 접근성이 부족하거나 지식을 업데이트하는 능력이 부족하면 사실 착각(fact hallucination)이나 오류 전파 같은 문제가 발생할 수 있습니다.
ReAct는 추론과 행동을 대규모언어모델과 결합하는 일반적인 패러다임입니다. ReAct는 대규모언어모델이 작업을 위해 언어 추론 추적과 행동을 생성하도록 유도합니다. 이를 통해 시스템은 행동에 대한 계획을 생성, 유지 및 조정하는 동시에 외부 환경(예: Wikipedia)과의 상호 작용을 통해 추론에 추가 정보를 통합할 수 있습니다. 아래 그림은 ReAct의 예와 질문 답변을 수행하는데 필요한 다른 단계들을 보여줍니다.
<Screenshot src={REACT} alt="REACT" />
Image Source: [Yao et al., 2022](https://arxiv.org/abs/2210.03629)
이미지 출처: [Yao et al., 2022](https://arxiv.org/abs/2210.03629)
위의 예에서, 우리는 [HotpotQA](https://hotpotqa.github.io/)에서 아래 질문과 같은 프롬프트를 전달합니다:
```
Apple Remote 외에 Apple Remote가 원래 상호 작용하도록 설계된 프로그램을 제어할 수 있는 다른 장치는 어떤 것이 있니?
```
문맥내(in-context) 예시는 프롬프트에 추가되지만, 여기에서는 단순화를 위해 제외됨을 유의하세요. 우리는 모델이 작업 해결 궤적(생각, 행동)으 생성하는 것을 볼 수 있습니다. Obs는 상호작용 중인 환경(예: 검색 엔진)에서의 관찰에 해당합니다. 본질적으로, ReAct는 추론을 지원하기 위해 정보를 검색할 수 있으면, 추론은 다음에 검색할 대상을 타겟팅하는데 도움이 됩니다.
## ReAct Prompting
ReAct 프롬프팅이 어떻게 작동하는지 설명하기 위해, 논문에서 예시를 살펴보겠습니다.
첫 번째 단계는 트레이닝 세트(예:HotPotQA)에서 사례를 선택하고 ReAct 형식의 궤적을 구성하는 것이다. 이것들은 프롬프트에서 퓨샷(few-shot) 견본으로 사용됩니다. 궤적은 위 그림과 같이 여러 생각-행동-관찰 단계로 구성됩니다. 자유 형태 사고는 질문 분해, 정보 추출, 상식/산술적 추론 수행, 검색 공식화 안내, 그리고 최종 답변 합성과 같은 다른 작업들을 수행하는데 사용됩니다.
다음은 ReAct 프롬프트 모범 예시입니다(논문에서 가지고 온 것으로, 간결하게 하기 위해 하나의 예로 줄였습니다).
```
질문 콜로라도 조산 운동의 동쪽 구역이 확장되는 지역의 표고 범위는 얼마이니?
생각 1 콜로라도 조산 운동을 검색하여, 콜로라도 조산 운동의 동쪽 구역이 확장되는 지역을 찾은 다음, 그 지역의 표고 범위를 찾아야 해.
행동 1 검색하기[콜로라도 조산 운동]
관찰 1 콜로라도 조산 운동은 콜로라도와 그 주변 지역에서 산이 형성되는 과정(조산 운동)을 말해.
생각 2 동부에 대한 언급이 없어. 그래서 동부 섹터를 찾아봐야겠어.
행동 2 찾아보기[동부 섹터]
관찰 2 (결과 1 / 1) 동쪽 섹터는 고원 지대까지 뻗어 있고 중앙 평원 조산 운동이라고 불려.
생각 3 콜로라도 조산 운동의 동쪽 섹터는 고원 지대까지 뻗어 있어. 따라서 고원 지대를 검색하여 해발 범위를 찾아야 해.
행동 3 검색[고원 지대]
관찰 3 고원 지대는 두 개의 다른 지대 중 하나를 가르켜.
생각 4 대신 고원 지대(미국)를 검색해야해.
행동 4 검색[고원 지대 (미국)]
관찰 4 고원 지대는 대평원\(the Great Plains\)의 일부 지역이야. 동쪽에서 서쪽으로, 고원 지대는 약 1,800피트에서 7,000피트(550~2,130m)까지 고도가 높아져.[3]
생각 5 고원 지대의 해발 고도는 약 1,800~7,000피트이므로, 정답은 1,800~7,000피트야.
행동 5 완료[1,800~7,000피트]
...
```
다른 형태의 작업을 위해서는 다른 프롬프트가 사용되는 것에 유의하세요. 추론이 가장 중요한 작업(예: HotpotQA)의 경우, 작업 해결 궤적에 여러 생각-행동-관찰 단계가 사용됩니다. 많은 행동 단계가 포함되는 의사 결정의 경우, 생각은 드물게 사용됩니다.
## Results on Knowledge-Intensive Tasks
이 논문에서는 먼저 질문 답변(HotPotQA) 그리고 사실 확인([Fever](https://fever.ai/resources.html))과 같은 지식 집약적 추론 작업에 대해 ReAct를 평가합니다. PaLM-540B를 프롬프팅을 위한 기본 모델로 사용하였습니다.
<Screenshot src={REACT1} alt="REACT1" />
이미지 출처: [Yao et al., 2022](https://arxiv.org/abs/2210.03629)
서로 다른 프롬프팅 방법을 사용하는 HotPotQA와 Fever에 대한 프롬프팅 결과를 보면 일반적으로 두 작업 모두에서 ReAct가 Act(행동만 포함)보다 더 나은 성능을 보입니다.
또한 ReAct가 Fever에서는 CoT보다 성능이 뛰어나고 HotPotQA에서는 CoT보다 뒤처지는 것을 관찰할 수 있습니다. 자세한 오류 분석은 논문에서 확인할 수 있습니다. 요약하자면:
- CoT 는 사실 착각에 시달립니다.
- ReAct의 구조적 제약은 추론 단계를 공식화할 때 유연성이 떨어집니다.
- ReAct는 검색하는 정보에 크게 의존합니다; 정보가 없는 검색 결과는 모델 추론을 방해하고 생각을 복구하고 재구성하는데 어려움을 초래합니다.
ReAct와 CoT+Self-Consistency 간의 전환을 결합하고 지원하는 프롬프팅 방법은 일반적으로 모든 다른 프롬프팅 방법들보다 성능이 뛰어납니다.
## Results on Decision Making Tasks
이 논문에서는 의사 결정 작업에서 ReAct의 성능을 입증하는 결과도 보고합니다. ReAct는 [ALFWorld](https://alfworld.github.io/)(텍스트 기반 게임)와 [WebShop](https://webshop-pnlp.github.io/)(온라인 쇼핑 웹사이트 환경)이라는 두 가지 벤치마크에서 평가되었습니다. 두 벤치마크 모두 효과적으로 행동하고 탐색하기 위해 추론이 필요한 복잡한 환경을 포함합니다.
ReAct 프롬프트는 추론과 행동의 결합이라는 동일하 핵심 아이디어를 유지하면서 이러한 작업들에 대해 다르게 설계되었습니다. 아래는 ReAct 프롬프팅이 포함된 ALFWorld 문제의 예시입니다.
<Screenshot src={REACT2} alt="REACT2" />
이미지 출처: [Yao et al., 2022](https://arxiv.org/abs/2210.03629)
ReAct는 ALFWorld와 Webshop 모두에서 Act 보다 성능이 뛰어납니다. 어떠한 생각이 없는 Act는 목표를 하위 목표로 정확하게 분해하는데 실패하였습니다. 추론은 이러한 유형의 작업에 대해 ReAct에서 이점이 있는 것으로 보이지만, 현재 프롬프팅 기반 방법은 여전히 이러한 작업들에 대한 전문 인력의 성능에는 미치지 못 합니다.
## LangChain ReAct Usage
아래는 ReAct 프롬프팅 접근 방식이 실제로 어떻게 이루어지는지에 대한 개략적인 예입니다. 우리는 대규모언어모델과 다른 도구의 힘을 결합하여 작업을 수행하는 에이전트를 구축하기 위해 ReAct 프레임워크를 활용하는 기능이 이미 내장되어 있기 때문에 대규모언어모델과 [LangChain](https://python.langchain.com/en/latest/index.html)에 대해 OpenAI를 사용할 것이다.
먼저 필요한 라이브러리를 설치하고 가지고 옵니다:
``` python
%%capture
# update or install the necessary libraries
!pip install --upgrade openai
!pip install --upgrade langchain
!pip install --upgrade python-dotenv
!pip install google-search-results
# import libraries
import openai
import os
from langchain.llms import OpenAI
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from dotenv import load_dotenv
load_dotenv()
# load API keys; you will need to obtain these if you haven't yet
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
os.environ["SERPER_API_KEY"] = os.getenv("SERPER_API_KEY")
```
이제 우리는 대규모언어모델, 우리가 사용할 도구들, 그리고 ReAct 프레임워크를 대규모언어모델과 도구를 함께 활용할 수 있는 에이전트를 구성할 수 있습니다. 외부 정보 검색하기 위한 검색 API와 수학 도구로는 대규모언어모델을 사용하는 것에 유의하세요.
``` python
llm = OpenAI(model_name="text-davinci-003" ,temperature=0)
tools = load_tools(["google-serper", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
```
구성이 완료되면, 우리는 이제 원하는 쿼리/프롬프트로 에이전트를 실행할 수 있습니다. 여기서는 백서에서 설명하는 것처럼 퓨샷 견본을 제공하지 않는다는 점에 유의하세요.
``` python
agent.run("Olivia Wilde의 남자 친구는 누구이니? 0.23 거듭제곱을 하면 현재 그의 나이는 얼마이니?")
```
체인 실행\(chain execution\)은 다음과 같습니다:
``` yaml
> Entering new AgentExecutor chain...
나는 Olivia Wilde의 남자 친구가 누구인지 알아내고 0.23 거듭제곱을 한 그의 나이를 계산해야해.
행동 : 검색
행동 입력 : "Olivia Wilde 남자 친구"
관찰 : Olivia Wilde는 Jason Sudeikis와 수년간의 약혼을 끝낸 후 Harry Styles와 사귀기 시작했어. (두 사람간의 관계 타임라인 참조)
생각 : Harry Styles의 나이를 알아야해.
행동 : 검색
행동 입력 : "Harry Styles 나이"
관찰 : 29 세
생각 : 나는 29 에 0.23 거듭제곱을 계산해야 해.
행동 : 계산기
행동 입력 : 29^0.23
관찰 : 답변 : 2.169459462491557
생각 : 나는 이제 마지막 답변을 알고 있어.
최종 답변 : Olivia Wilde의 남자 친구인 Harry Styles는 29 세이고, 그의 나이에 0.23 거듭제곱한 값은 2.169459462491557 이야.
> Finished chain.
```
출력은 다음과 같습니다:
```
"Olivia Wilde의 남자 친구인 Harry Styles는 29 세이고, 그의 나이에 0.23 거듭제곱한 값은 2.169459462491557 이야."
```
이 예제는 [LangChain 문서](https://python.langchain.com/docs/modules/agents/agent_types/react)에서 가져온 것이므로 해당 문서에 공로가 있습니다. 우리는 학습자가 다양한 도구와 작업의 조합을 탐색해 볼 것을 권장합니다.
전체 예제는 곧 제공될 예정입니다!
이 코드에 대한 노트북은 여기에서 찾을 수 있습니다: https://github.com/dair-ai/Prompt-Engineering-Guide/blob/main/notebooks/react.ipynb

@ -35,8 +35,9 @@ ToT를 사용할 때, 다른 작업들은 후보의 수와 생각/단계의 수
```
세 명의 다른 전문가들이 이 질문에 답하고 있다고 상상해보도록 해.
모든 전문가들은 자신의 생각의 한 단계를 적어내고, 그것을 그룹과 공유할거야.
그런 다음 모든 전문가들은 다음 단계로 넘어가, 등등.
모든 전문가들은 자신의 생각의 한 단계를 적어내고,
그것을 그룹과 공유할거야.
그런 다음 모든 전문가들은 다음 단계로 넘어가. 등등.
만약 어떤 전문가가 어떤 시점에서든 자신이 틀렸다는 것을 깨닫게 되면 그들은 떠나.
그렇다면 질문은...
```

Loading…
Cancel
Save