/ The Blog of Jinho Ko / Computer science / AI

·

5 min read

Getting the Very Best Out of GPT

My opinion and techniques for better GPT prompting

By Jinho Ko

GPT(3.5와 4)를 몇 달 계 계속 써 볼 일이 있어 꾸준히 사용하면서 여러 실험을 해 봤다. 물론 버전이 계속 증가할수록 더 혁신적인 기능도 많이 생기겠지만, 우선은 현재 기준으로 내가 느낀 것을 써 보려고 한다.

내가 파악한 GPT의 능력

우선, 과거에 논란이 되었던 것이 GPT가 검색엔진을 대체할 수 있느냐? 인데, 사실 잠정적으로는 (현재 GPT의 구조로는) 모델 크기를 키우더라도 불가능하다고 본다. 아무리 GPT 4이더라도, 자세하게 보면 일반적인 상식을 벗어난 전공지식은 거의 틀리고 일반인이 많이 접하지 못할 법한 지식은 거의 다 틀린다. 특히 연도, 사람 이름 등 고유명사들에 대한 답변 능력이 매우 떨어진다. 아무래도 고유명사에 대한 데이터가 많이 없으니 약할 수 밖에 없다고 생각한다. 버전이 거듭해서 올라가면서 지능은 높아지고 있으나, 그 지식의 양이 충분히 universal하냐 하면 그렇지는 못하다고 본다. 오히려 지능은 높아서 틀린 내용을 답변에 더 교묘히 섞어 넣는다. 3.5의 경우 아예 이상한 소리를 해서 무시하면 그만이었으나, GPT4에 올라와서는 그것을 최종적으로 인간이 분별하기가 더 힘들어졌다. 산업에 사용되었을 때 리스크가 더 높아진다는 의미이다.

내가 생각하는 현재 GPT의 가장 큰 문제는 무엇을 모르는지 모른다는 것이다. 단순한 확률 모델로써 가장 확률이 높은 토큰을 내뱉기만 하기 때문에, 틀린 사실이더라도 마땅한 더 나은 답안이 없으면 막 말하고 보는 것이다. 실제로 X에 대해 아느냐?고 질문을 했을 때 모른다 답변해도 X에 대해 설명해 보라고 하면 어떻게든 답변을 한다. (그것이 맞는 말일 때도 있고 틀린 말일 때도 있음) 즉 지식 수준이 떨어지고 높고의 문제가 아니라, 앎과 모름이 확실해야 하는데 그것에 대한 자아가 없음이 가장 큰 문제라고 본다. 이는 단순히 parameter size의 문제가 아닌 architecture 자체의 문제로써, 이를 해결하려면 새로운 아키텍쳐가 등장해야 한다고 예측한다.

또 GPT가 생성하는 답변의 hallucination 정도와 quality는 기본적으로 trade-off 관계에 있다는 느낌을 받았다. 일반적으로 어떠한 글, 답변의 질은 일반적으로 문장이 수려하거나 내용이 풍부하고 구체적일 때 좋다고 하는데, 그럴수록 hallucination이 급격하게 증가한다. 결국 우리가 prompting을 함으로써 기대할 수 있는 것은, 이 능력의 절대치를 조금이라도 높이고, 또 질을 선택하느냐 사실을 선택하느냐 - 이것을 결정하는 것이 전부인 것이다.

더 좋은 답변을 위한 테크닉

GPT에 이런저런 실험을 해 보고 실무에서 사용하면서 몇 가지 테크닉을 얻었는데, 이 섹션에서 그 기술과 그에 대한 나름의 논리를 하나하나 설명해보려 한다.

  1. 풍부하고 구체적인 내용을 생성하려면(quality를 유도하려면), 세부적이고 자세한 키워드 중심으로 input을 넣어주는 것이 좋다.
    • 세부적인 unseen한 키워드가 등장할 때, 관련된 내용을 더 잘 retrieval할 가능성이 높다.
    • 다만 hallucination의 가능성은 급격하게 늘어난다.
  2. 프롬프트는 짧을수록 좋다.
    • 짧고 간결하고 명확한 프롬프트가 좋다
  3. 프롬프트가 길 수록 앞에 나온 내용이나 명령, 조건을 잘 까먹거나 지키지 않는다.
    • 따라서 중요한 제약사항이나 내용이 있다면 프롬프트 마지막에 반복하는 것이 좋다.
    • 혹은 강조의 단어 (e.g. 무조건, 꼭, 명심)를 포함하여 해당 내용을 작성한다.
  4. GPT는 autoregressive model임을 기억하라.
    • GPT는 앞에 나온 토큰부터 읽는다. 따라서 제공하는 내용 간 선후관계 혹은 인과관계를 잘 분석하여 그 순서대로 prompt를 작성한다.
  5. GPT는 내가 말한 그대로 한다는 것을 명심하라.
    • GPT를 그 행동과 판단, 발언이 무궁무진한 천방지축이나 말은 잘 듣는 어린아이라고 생각하면 좋다.
    • ‘당연히 이렇게 하겠지’ 라고 기대하면 안 된다. 하지 말라고 말한 적 없으면 한다. (temperature이랑은 크게 무관한 현상이라고 판단됨)
    • 내가 원하는 답변의 명확한 형식이 있다면, 그 형식 외에는 다른 답변을 생각해낼 수 없도록 프롬프트를 엄밀하게 작성하는 것이 중요하다.
  6. 지식, 지능과 무관하게 GPT 자체의 일 처리 능력이 계속 부족하다고 생각되면 CoT, ToT, iterative prompting를 적용해보자.
  7. 생성 결과의 품질 보장(quality assurance) 를 위해서는 체인을 여러 단계로 구축하는 것이 낫고, 창의성을 살리려면 체인 수를 줄이는 것이 낫다.
  8. 부정의 사용을 피하라.
    • 긍정형으로 질문하는 것이 답변의 질이 더 좋다.
  9. 랜덤성 있는 답변을 유도하지 말라.
    • GPT에 기대하는 답변 속에 랜덤성이 섞여 있으면(e.g. 순서를 랜덤으로 배치하라), 전반적인 답변의 정확도가 크게 떨어진다.
  10. 용어, 지칭의 사용을 명확하게 하라.
    • 어떤 대상을 X라고 지칭했다면, 같은 대상에 대해서는 X라고 써 주는 것이 좋다. 지시대명사를 피하고 고유대명사를 적극적으로 활용할 것.
    • 프롬프트의 앞에 나오는 내용에 대응되는 고유 토큰을 활용하면 좋다. 예를 들어 ①, ②와 같은 토큰은 프롬프트 내 다른 곳에 등장할 일도 없고 비슷한 의미를 가지는 토큰도 없다. 따라서 이러한 토큰으로 지칭하고자 하는 내용을 명확하게 지정하고, 나중에 인용하면 주어진 정보를 충실하게 하여 생성한다.
    • 나아가 이 token을 활용해 답변하라고 할 시 hallucination이 매우 개선된다. (Prompt의 indexing을 통한 enhanced retrieval이라고 볼 수도 있을 것 같음)
  11. 요약하자면, 프롬프트를 좋은 논문 작성하듯이 작성하라.
    • 비록 자연어 입력을 받지만, 모델 입장에서 화려한 수식어구는 중요하지 않다.
    • 프롬프트를 자세하게 주는 것이 핵심이 아니고, 이해가 명확하도록, 내 명령에 예외가 없도록 체계적이고 논리적으로 프롬프트를 작성해야 한다.
    • 어떻게 보면 좋은 논문을 쓰는 것과 비슷하다!
last modified June 2, 2024
comments powered by Disqus

© Copyright 2024. Jinho Ko. All rights reserved. Last updated: June 02, 2024.