AI 초보자의 LLM 공부 기록 세 번째

AI 초보자의 LLM 공부 기록 세 번째

LLM에 대하여 초보자의 시선으로 알아본 내용을 기록한 글 그 세 번째입니다.
Clock Icon2024.10.15

안녕하세요 클래스메소드의 이수재입니다.
저번 글에 이은 세 번째 글입니다.
https://dev.classmethod.jp/articles/sujae-study-of-llm-2/
이 시리즈는 쉽고 빠르게 익히는 실전 LLM이라는 책을 베이스로 공부한 내용을 글로 남기는 것이 목적입니다.

프롬프트 엔지니어링(Prompt Engineering)

프롬프트 엔지니어링은 생성형 인공 지능(생성형 AI) 솔루션을 안내하여 원하는 결과를 생성하는 프로세스입니다. 생성형 AI는 인간을 모방하려고 시도하지만 고품질의 관련성 높은 결과물을 생성하려면 자세한 지침이 필요합니다. 프롬프트 엔지니어링에서는 AI가 사용자와 더 의미 있게 상호 작용하도록 안내하는 가장 적절한 형식, 구문, 단어 및 기호를 선택합니다. 프롬프트 엔지니어는 창의력을 발휘하고 시행착오를 거쳐 입력 텍스트 모음을 생성하므로 애플리케이션의 생성형 AI가 예상대로 작동합니다. - 출처(AWS 문서)

LLM에 대한 입력을 원하는 결과를 받을 수 있도록 정확하고 효과적으로 전달하는 방법 혹은 프로세스를 말합니다.
언어의 뉘앙스, 작업 중인 특정 도메인, 사용 중인 LLM의 능력과 한계를 이해할 필요가 있습니다.

파인 튜닝과 비교되기도 하는데 프롬프트 엔지니어링은 사전 훈련된 모델에 대해 입력 방법을 변경하는 것으로 최적의 답변을 이끌어내는 과정입니다.
반면 파인 튜닝은 사전 훈련된 모델에서 가중치를 조금씩 변경하여 어떤 정보(도메인)에 대해 적절한 상태로 튜닝하는 것을 말합니다.
해당 내용에 대해서는 다음 글도 참고해주세요.
https://medium.com/@minji.sql/prompt-활용편-프롬프트-엔지니어링-작성가이드-팁과-주의사항-예시-0357f81bc969

프롬프트 엔지니어링과 정렬

언어 모델의 정렬은 언어 모델이 인간의 가치, 선호도 및 의도와 일치하는 결과를 생성하도록 보장하는 과정을 말합니다. - 출처(언어 모델 정렬을 위한 TR-DPO)

언어 모델에서의 정렬(Alignment)란 모델이 사용자가 예상한 방향과 일치하는 방향으로 답변을 하도록 조정하는 것을 말합니다.

표준 언어 모델링에서 모델은 선행 단어의 맥락을 기반으로 다음 단어나 단어의 시퀀스를 예측하도록 훈련되는 경우가 많습니다.
그러나 이러한 방법으로 훈련된 모델은 특정 지시사항이나 프롬프트에 완벽히 답변하지 못하는 상황이 자주 발생합니다.[1]
프롬프트가 언어 모델과 정렬되지 않는다면 잘못된 답변을 생성할 수 있기 때문에 프롬프트 엔지니어링이 어려울 수 있습니다.

직접 요청하기

정렬을 위한 프롬프트 엔지니어링의 중요한 규칙은 요청하는 내용이 최대한 명확하고 직접적이어야 한다는 것입니다.
LLM에 작업을 요청할 때 그 작업을 가능한 한 명확하게 전달하는 것이 중요합니다.

제가 실제로 사용하는 방법 중 하나를 예시로 들자면

다음 문장을 비즈니스 일본어 표현으로 수정해줘
문장 : {수정을 요청할 문장}

위의 예시에서도 지켜지고 있는 내용이지만 명확한 지시문을 입력할 때는 아래 사항을 신경쓰는 것이 좋습니다.

  • 직접적인 지시 : 명확한 지시내용이 가장 먼저 오고 다음의 대상에 집중하도록 합니다.
  • 대상을 지시 : 예시의 '문장 :' 처럼 대상으로 하는 부분이 어딘지 지정합니다.

어떻게 질문해야할지 떠오르지 않는다면 일단 질문해보고 부족한 부분을 명확히 하는 식으로 진행하면 됩니다.

퓨샷 학습(Few-shot Learning, FSL)

작업에 대한 이해가 필요하거나 복잡한 작업인 경우엔 몇 가지 예시를 제공하는 것이 좋습니다.
이렇게 작업에 대한 적은 데이터를 제공하여 답을 유도하는 방법을 퓨샷 학습이라고 합니다.[2]

퓨샷 학습을 이용하면 특정한 분야에 대해서만 학습되어 있지 않은 오픈 소스 소프트웨어에서도 어느정도 정확도가 높은 답을 유도할 수 있습니다.

출력 구조화

LLM은 구조가 형식화 된 답변을 제공하지 않습니다.
다른 서비스와 연계하여 효율적으로 이용하기 위해서는 정형화 된 형식의 답변을 유도하는 것이 좋습니다.

예로 들면 위의 일본어 변환을 json 형식으로 받을 필요가 있다면 다음과 같이 질문할 수 있습니다.

다음 문장을 비즈니스 일본어 표현으로 수정해줘
그리고 답변은 다음과 같은 json 형식으로 해줘

문장 : {수정을 요청할 문장}
답변 : {"text" : "(내가 입력한 문장)", "translate" : "(변경한 문장)"}

페르소나 지정

같은 문장에서 단어 하나를 추가하거나 빼는 등 프롬프트에 입력하는 단어를 바꾸는 것만으로 다른 결과가 나올 수 있습니다.
이러한 다양성을 고려해 LLM에 말투나 스타일 등을 지정하는 것도 가능합니다.
예로 들면

  • 레몬 에이드 만드는 방법을 해적 말투로 알려줘
  • 다음 질문을 관련 지식이 없는 사람이 듣는다고 생각하고 답변해줘
  • 부정적인 사고를 가진 사람이 답변한다고 생각해줘. 다음 아이디어에 대해 어떻게 생각하는지 알려줘

등과 같습니다.

책에는 없는 내용이지만 긍정적인 페르소나, 부정적인 페르소나, 현실적인 페르소나 등 여러 페르소나를 등장시켜서 페르소나 간에 아이디어를 도출하도록 하는 활용 방법도 있습니다.

이 외에

한가지의 질문에 너무 상세하게 답변하는 경우 부정확한 정보가 포함될 가능성도 높아집니다.
교차 검증을 위해서 먼저 간결하게 답변을 받는 것이 좋습니다.[3]

여러 모델 다루기

프롬프트는 모델에 따라 답변이 다른 경우가 많습니다.
일부 프롬프트는 모델 간에 이전될 수 있지만 다른 경우에는 특정 모델과 작동하도록 조정하거나 재설계하는 과정이 필요합니다.

오픈 소스 프롬프트 엔지니어링

클로즈드 소스 모델의 경우에 다른 모델과 작동하도록 조정하는 것은 힘든 경우가 많습니다.
만약 어떠한 특정 분야에 대한 프롬프트를 만들고 싶은 경우 일반적인 클로즈드 소스 모델의 프롬프트 보다 오픈 소스 모델의 프롬프트를 조정하여 사용하는 것이 더 정확한 경우가 있습니다.

오픈 소스 모델이 어떻게 사전 훈련되고 파인튜닝 되었는지 확인하는 것이 중요합니다.
이에 따라 어떤 모델은 지시적인 명령문이 통하지 않는다거나 퓨샷 프롬프팅은 통하지 못하는 등 차이가 있을 수 있습니다.

마무리

책의 내용을 기반으로 챕터 3까지 LLM의 요소인 프롬프트 엔지니어링에 대해서 알아보았습니다.

긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 must01940 지메일로 보내주시면 감사합니다.

참고 문서

脚注
  1. 개인적인 생각으로는 2024년 기준으로 최근에 발표된 생성형 AI 서비스들은 정렬 과정 없이 프롬프트와 일치하는 방향으로 답변을 한다고 생각됩니다. ↩︎

  2. 이 외에 제로샷 학습, 원샷 학습 등 n샷 학습(n-shot learning)이라는 개념이 있습니다. 참고([개념] 생성 AI의 학습 방식: 제로샷·원샷·퓨샷 러닝(velog), 서쿠 ↩︎

  3. 이 글을 작성하고 있는 24년 기준으로 여러 대화형(ChatGPT, Claude 등) AI에 질문을 해보면 요약 정보를 먼저 알려주는 경우가 많았습니다. ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.