최소 최대 프롬프트(LtM)는 CoT 프롬프팅에서 더 나아가 하나의 문제를 여러 개의 서브 문제들로 분할 후 각각을 해결하는 것입니다. 이 기술을 실제로 아이들을 위한 교육 전략에서 영감을 받아서 만들어졌습니다.
먼저 CoT 프롬프팅에서 풀어야 할 문제는 각각 서로를 기반으로하는 서브 문제들로 이루어져 있습니다. 두 번째로 이 서브 문제들은 한번에 하나씩 해결됩니다. 일반 CoT와는 다르게 이전에 풀었던 서브 문제들은 다음 문제를 푸는데에 사용됩니다.
조금 복잡한 소비자 서비스 질문을 해봅시다.
실패입니다. 이제 서브 문제들로 나누어보는 과정을 진행해봅시다.
첫 번째 서브 문제를 풀어봅시다.
첫 번째 문제를 푸는 것 만으로도 우리는 문제 전체를 풀 수 있었습니다. 만약 GPT-3가 답을 즉각적으로 주지 못한다고 해도 답을 줄때까지 우리는 다음 문제를 풀 수 있었습니다. Let's go step by step.
라는 문장을 사용하는 것을 참고하세요. 이 문장은 필수가 아니지만 최소한 이 예제에서는 도움이 되었습니다.
LtM은 문제를 여러 단계로 나누는데 명시적인 지시를 사용하는 것이 아니라 퓨샷 프롬프팅을 사용하는 것으로 위에서 설명이 되었습니다. 추가적으로 여러개의 프롬프트가 아니라 하나의 프롬프롬프트로 개발되는 경우도 종종 있습니다. 각 개별적인 단어들의 마지막 문자를 연결하는 문제를 풀어봅시다.
퓨샷을 사용하는 표준 프롬프트 예제는 제대로 작동하지 않습니다. 심지어 text-davinci-003같은 더 좋은 모델을 써도 그렇습니다.
사고 사슬 프롬프팅은 표준 프롬프트 보다는 낫습니다. 이제는 모델들이 단어의 마지막 문자를 추출하는 것이 가능해졌고 이전보다 문자들을 모으는 모으는 작업의 복잡성이 내려갔기 때문에 성능이 좋아질 수 밖에 없었습니다.
최소 최대 프롬프팅을 통해서 우리는 이전에 연결된 결과를 다시 진술하기 위한 개별 단계를 재구성하여 사고 사슬 개념을 강화한다. 이 방법은 새로운 문자를 연결하는 각각의 과정들을 단순화한다. 그리고 이 방법은 단어가 12개 이상일 때의 성능을 향상시킨다.
이 접근법은 그냥 사고 사슬 방식과 비슷해보일 수 있습니다. 하지만 실제로는 굉장히 다릅니다. 가장 다른 부분은 모든 단계에서 이전의 연결을 활용한다는 점입니다. "think, machine, learning"의 예를 들어봅시다, "k","e","g" 각각을 개별적으로 연결하는 것이 아니라 "k"와 "e"를 더해서 "ke"를 만들고 그 다음 "g"를 더하는 방식을 사용할 것입니다. 이 이전의 결과물을 활용하는 것으로 인해서 모델은 각각의 단계에서는 아주 조금의 작업만을 필요하기 때문에 더 긴 사슬을 형성할 수 있습니다.
12글자를 연결하는 지난 문제에서 사고 사슬은 34%의 정확도를 내었지만 최소 최대 프롬프팅에서는 74%의 정확도를 내었습니다.(text-davinci-002를 활용했을 때)
스캔 문제은 모델이 자연어를 일련의 행동으로 바꾸는 과정을 요구 합니다. 예를 들어서, "run left and walk twice"라는 문장을 "TURN_LEFT + RUN + WALK * 2"로 바꾸는 것입니다. 언어 모델은 학습 데이터보다 더 긴 문장을 마주했을 때 특히 더 나쁜 성능을 보입니다.
표준 프롬프팅을 사용했을 때 text-davinci-003은 인상적이지만 여전히 실패하고 있습니다.
우리는 2가지의 다른 프롬프트를 다룰 것입니다. 첫 번째 프롬프트는 기존의 문제를 더 단순화된 단계로 바꾸는 데 사용됩니다. 두 번째 프롬프트는 이러한 단순화된 단계를 합쳐 실제 행동으로 만드는 데 사용될 것입니다.
두 프롬프트는 모두 길고 그리고 토큰에 저장할 작업에 파이썬 압축 표기법을 사용할 것입니다.
첫 번째 단계에서는 자연어 설명을 보다 명확하게 만듭니다.(여전히 인간 친화적인 언어로) 이것은 매핑 단계에서 순차적으로 상황을 파악하는 데 도움이 될 것입니다. 예를 들어서 "jump around left twice"는 "jump left" -> TURN_LEFT + JUMP
, "jump around left" -> `(TURN_LEFT + JUMP) * 4로 축소됩니다. 또한 축소 단계는 반복의 개념을 설명하는 데에도 사용이됩니다.
두 번째 단계에서 우리는 축소된 결과물을 사용할 것이고 또 굉장히 긴 프롬프트를 사용해서 축소된 자연어 설명을 행동의 과정으로 만들 것입니다.
우리는 첫 번째 단계의 결과물을 삽입할 것입니다:
"jump around left twice" can be solved by: "jump left", "jump around left", "jump around left twice". "walk opposite left thrice" can be solved by: "walk opposite left", "walk opposite left thrice". So, "jump around left twice after walk opposite left thrice" can be solved by: "jump left", "jump around left", "jump around left twice", "walk opposite left", "walk opposite left thrice".
LLM으로요.
LtM은 여러 장점이 있습니다:
text-davinci-002에 표준 프롬프트로 작성한 결과는 6%정도의 SCAN문제 정확도를 가지는데 최소 최대 프롬프팅의 결과는 76%의 정확도를 가진다. 게다가 code-davinci-002 모델에서는 더 뚜렷하게 나타나는데 최소 최대 프롬프팅은 무려 99.7%의 정확도를 가진다.
Zhou, D., Schärli, N., Hou, L., Wei, J., Scales, N., Wang, X., Schuurmans, D., Cui, C., Bousquet, O., Le, Q., & Chi, E. (2022). Least-to-Most Prompting Enables Complex Reasoning in Large Language Models. ↩
Lake, B. M., & Baroni, M. (2018). Generalization without Systematicity: On the Compositional Skills of Sequence-to-Sequence Recurrent Networks. https://doi.org/10.48550/arXiv.1711.00350 ↩