프롬프트 엔지니어에 대한 고찰 프롬프트 엔지니어링이 단순 프롬프트를 잘 쓰는 것이 아닌, 전문적인 역량과 스킬이 필요한 이유가 잘 설명된 글입니다. 이 글에 대한 네 가지 reflection 을 해봤습니다. 1️⃣ 프롬프트와 프롬프트 엔지니어링에 대한 정의 시중에 많은 정의가 있지만 여전히 혼재되어 있어 재고(Revisiting)가 필요하다고 생각합니다.LLM의 아키텍처 개념을 사용하여 설명하면 어느 의미에서 프롬프트와, 프롬프트 엔지니어링인지 정확해지는 것 같습니다. 2️⃣ 프롬프트 엔지니어는? 생성형 AI 기업의 프롬프트 엔지니어는 LLM의 최종 출력층에서 "프롬프트 최적화를 하는 사람" 입니다. LLM <-> End user 사이에 위치하여 모델의 출력을 조정하고, 고도화하는 작업을 합니다. 프롬프트 엔지니어의 포지션은 최종 출력층이지만, 그 이전 층의 트랜스포머 아키텍처, 구송 요소들의 작동 원리를 알아야 프롬프트 최적화를 할 수 있습니다. 때문에, 단순히 ChatGPT의 답변을 잘 받았다고 혹은 문장을 잘 썼다고 프롬프트 엔지니어라 할 수 없을 것 같습니다. 3️⃣ Q(Query), K(Key), V (Value)가중치 행렬 활용 = 단어의 빈도수 제가 프롬프팅을 할 때 Q, K, V 값을 활용할 수 있도록 google ngram을 사용합니다. ngram 에 A단어/B단어의 빈도수를 비교하여, 가장 많이 쓰이는 단어를 프롬프트로 작성합니다. 예를들어, generate 보다는 develop 이 현대 영어(1980-현재)에서 더 빈도수가 큰 단어입니다. develop을 썼을 때, 원하는 결과를 쉽게 얻을 수 있었어요. LLM이 학습한 데이터 내 단어의 빈도수가 많을 수록, 언어의 semantic, syntax 의 관계가 더 커져, 원하는 결과물을 이끌어 낼 수 있었기 때문입니다. Attention 가중치가 올라갔다고 판단할 수 있을까요? 4️⃣ Q, K, V 가 무효할 때 = 언어의 Pragmatics 가 커질 때 Tokenizer 를 통해, 단어를 쪼개고 의미를 나누고, 문법의 패턴을 익힌다 하더라도 Pragmatics은 LLM이 하지 못하는 영역입니다. 그래서 엉뚱한 소리를 하거나, 이상한 답변을 해요. 특히 한국어는 더 그렇습니다. 한국어는 "고맥락"의 언어입니다. 문장이 발화된 상황에 의존하여, 발화 된 뜻을 상황속에서만 파악할 수 있습니다. 예를들어, 한국어에서 "괜찮아"가 맥락 의존적인 표현인데요. "커피마실래?" "괜찮아" 마시겠다는 건지, 안 마시겠다는 건지는 발화의 의도를 발화 상황에서 파악해야 합니다. 따라서, 이런 task 를 수행하는 기능 구현을 위한 프롬프트를 제작할 때는 "엔지니어링"을 해야 합니다. shot 으로 LLM에게 정보를 주거나, turn을 활용하여 role-play demonstration 을 하기도 해요. 결론: 요즘 한국어를 분석하면, 화용이 더 강해집니다. 언어의 형태나 의미보다는 기능이 더 중요해지는 거죠. meme이나, 주어를 생략하고 말하거나, 줄임말을 쓰는 것이 증거예요. 한국어의 화용을 LLM이 잘 이해할 수 있도록하는 프롬프트 엔지니어링이 필요할 것 같습니다.