Auto-CoT는 스스로 Chain-of-Thought 데모를 작성합니다 — 질문을 클러스터링하고, 클러스터당 하나를 선택하면 유사성보다
요약
Auto-CoT는 수동으로 작성하던 Few-shot Chain-of-Thought 데모를 모델이 스스로 생성하도록 자동화하는 기술입니다. 질문을 클러스터링하여 다양성을 확보함으로써 유사성 기반 검색의 오류 증폭 문제를 해결합니다.
핵심 포인트
- 수동 CoT 데모 작성의 번거로움과 편향성 해결
- 단순 유사성 기반 검색 대신 클러스터링을 통한 다양성 확보
- k-means 알고리즘을 활용해 문제 유형별 대표 질문 선정
- 모델이 스스로 추론 과정을 작성하여 데모 세트 구축
Few-shot Chain-of-Thought (CoT)는 모델이 추론하도록 만드는 신뢰할 수 있는 방법입니다. 몇 가지 풀이된 예시를 보여주면 모델은 그 습관을 복제합니다. 문제는 그 데모(demonstrations)가 어디에서 오느냐 하는 것입니다. 수동 Few-shot CoT (직접 제작하는 방식)는 사용자가 각 단계별 예시를 직접 작성해야 합니다. 이는 작성 속도가 느리고, 새로운 작업군으로 확장하기 어려우며, 한 개인의 표현 방식과 사각지대를 은연중에 반영하게 됩니다. Auto-CoT (Zhang et al., 2022)는 모델이 스스로 데모를 구축하게 함으로써, 정확도는 유지하면서 수작업은 제거합니다. 저는 이 과정이 작동하는 것을 관찰하기 위해 전체 파이프라인을 브라우저 내에서 구축했습니다. 그 구조는 다음과 같습니다.
명백한 자동화는 잘못된 방식입니다
데모를 자동으로 얻고 싶다면, 유혹적인 방법은 '검색 (retrieval)'입니다. 타겟과 가장 유사한 (similar) 질문 풀을 선택하고, 일반적인 Zero-shot CoT ("단계별로 생각해 봅시다.")가 각 질문에 대한 근거를 작성하게 하는 것입니다. 이는 자동화되어 있지만, Zero-shot CoT는 특정 어려운 질문 유형에 대해 상관관계가 있는 (correlated) 실수를 저지릅니다. 따라서 유사성에 기반해 선택된 세트는 동일한 유형의 오해를 불러일으키는 데모들로 채워질 수 있으며, 이는 오류를 희석하는 대신 오히려 증폭시킵니다. 유사성은 바로 이 함정입니다.
데모가 다양한 형태를 갖추도록 먼저 클러스터링하세요
Auto-CoT의 해결책은 구조적으로 다양성을 확보하는 것입니다. 풀에 있는 모든 질문을 임베딩(Embed)한 다음, 이를 클러스터링 (cluster) 합니다. k개의 클러스터는 k개의 서로 다른 문제 유형을 의미합니다. 다양성이 핵심입니다. 단일한 어려운 유형이 데모 세트를 지배할 수 없으며, 하나의 잘못된 근거는 다양한 나머지 데이터에 의해 상쇄됩니다. 이 데모에서는 간단한 개념 축 임베딩(toy concept-axis embedding)에 대해 실제 Lloyd 알고리즘 기반의 k-means를 사용했습니다 (실제 운영 환경의 Auto-CoT는 Sentence-BERT를 호출합니다). 하드코딩된 것은 아무것도 없습니다.
function kmeans(vecs, k){
let cent = farthestFirstInit(vecs, k); // 결정론적 확산
let assign = vecs.map(() => 0);
...
클러스터당 하나의 대표값
각 클러스터에서 중심점(centroid)에 가장 가까운 질문, 즉 가장 전형적인 구성원을 선택합니다. 이때 간결한 질문을 선호하는 가벼운 휴리스틱(heuristic)을 적용합니다(논문에서는 질문의 길이와 추론 단계에 제한을 둡니다). 클러스터당 하나의 대표값을 선택함으로써, 문제의 형태별로 하나씩 총 k개의 다양한 데모(demonstrations)를 정확히 얻을 수 있습니다.
모델이 직접 각 추론 과정을 작성하게 하기
각 대표값에 대해, 모델 스스로에게 마법 같은 제로샷(zero-shot) 문구를 사용하여 추론을 생성하도록 요청하고 그 답변을 읽어옵니다. 사람이 이를 작성하지 않습니다. 모델이 스스로 자신의 데모를 저술합니다.
async function autoDemo(question){
const rationale = await llm(`Q: ${question}\nA: Let's think step by step.`);
return `Q: ${question}\nA: Let's think step by step. ${rationale}`;
...```
## 한 번 조립하여 모든 쿼리에 재사용하기
자동으로 구축된 데모들을 연결(concatenate)하고, 새로운 질문 뒤에 단순한 "Let's think step by step."을 붙인 뒤 모델이 이를 완성하도록 합니다. 다양한 데모들은 모델이 대상 질문에 대해서도 동일한 방식으로 추론하도록 조건화(condition)합니다. 그리고 이 데모들은 풀(pool)로부터 *단 한 번* 구축된 후, 모든 새로운 질문에 대해 재사용됩니다.
```javascript
function autoCoTPrompt(demos, target){
return demos.join("\n\n") + `\n\nQ: ${target}\nA: Let's think step by step.`;
}
이 논문이 강조하는 교훈은 직관에 반합니다: 데모(demonstrations)의 유사성보다 다양성이 더 중요하다는 것입니다. 잘못된 정보를 주는 데모는 해롭지만, 다양성은 그로부터 면역력을 제공합니다. 이것이 바로 풀(pool)을 클러스터링(clustering)하는 것이 유사한 것을 검색(retrieving)하는 것보다 나은 이유입니다. 이는 프롬프트 구성(prompt-construction) 방식일 뿐 파인튜닝(fine-tune)을 수행하지 않으며, 레이블이 지정된 오답 체인을 추가하는 Contrastive-CoT나, 클러스터링된 예시 질문이 아닌 증류된 추론 템플릿을 재사용하는 Buffer-of-Thoughts와는 구별됩니다. 이 방식은 레이블링 비용을 제거하면서도 추론 벤치마크에서 수동 Few-shot CoT와 대등한 성능을 보이며, 클러스터링된 Zero-shot 오류에 대한 면역력을 갖춤으로써 단순한 유사성 샘플링(similarity-sampling)보다 뛰어난 성능을 발휘합니다. 반복되는 작업 유형이 있고 예시 질문 풀은 있지만 데모를 직접 작성할 의사가 없을 때 이 방식을 활용하십시오. 반면, 풀이 없는 완전한 일회성 작업이라면 이 방식은 건너뛰십시오. 라이브 데모에서 k 값을 변경하며 데모 세트가 다시 다양해지는 것을 확인해 보세요. k=1로 설정하여 다양성이 붕괴되는 것을 확인해 보시기 바랍니다:
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기