2-3. 프롬프트 체계: 태그와 문장
프롬프트는 주문(呪文)이 아니다. 텍스트 인코더에 넣는 입력이다. 모델이 학습 때 본 형식으로 써야 잘 듣는다. 형식은 크게 둘이다. 태그 나열과 문장.
형식은 학습 데이터가 정한다
1-5에서 봤다. 모델은 (그림, 설명) 쌍으로 학습한다. 그 설명이 어떻게 쓰여 있었는지가 프롬프트 쓰는 법을 정한다.
| 태그 방식 | 문장 방식 | |
|---|---|---|
| 학습 때 본 설명 | 그림 게시판의 태그 | 언어 모델이 그림을 보고 쓴 설명문 |
| 텍스트 인코더 | CLIP | T5, LLM 계열 |
| 대표 모델 | Illustrious, NoobAI, Pony | Flux, Qwen-Image 계열 |
| 쓰는 법 | 단어를 쉼표로 나열 | 장면을 문장으로 서술 |
태그 방식
그림 게시판에서는 사람들이 그림마다 태그를 단다. 등장인물 수, 머리 모양, 옷, 자세, 배경. 이 태그 목록이 그대로 학습의 설명이 됐다.
1girl, solo, long hair, silver hair, red eyes, school uniform, sitting, classroom, window, sunset
쓰는 요령
- 게시판의 실제 태그를 쓴다. 모델은 본 적 있는 태그에만 정확히 반응한다.
long hair는 태그다.hair that is long은 태그가 아니다. - 순서는 대체로 인원 → 캐릭터 → 외모 → 옷 → 자세 → 배경. 학습 데이터가 대개 이 순서였다.
- 품질 태그를 앞에 붙인다. 모델마다 다르다.
| 모델 | 품질 태그 |
|---|---|
| Illustrious, NoobAI | masterpiece, best quality 등 |
| Pony | score_9, score_8_up, score_7_up 등 점수 태그 |
품질 태그가 왜 듣는가. 학습할 때 그림마다 평점이나 품질 등급을 태그로 붙였기 때문이다. masterpiece를 넣으면 0-2의 조건부 분포로 말해 "높은 등급이 붙은 그림들의 분포"에서 뽑게 된다. 마법이 아니다. 조건이다.
- 캐릭터와 작가 이름도 태그다. 학습 데이터에 충분히 나온 캐릭터는 이름만으로 그려진다.
가중치 문법
특정 태그를 강하게 하거나 약하게 할 수 있다.
(silver hair:1.3), (smile:0.8)
괄호 안의 숫자가 그 토큰 벡터에 곱해지는 값이다. 1.3이면 30% 강하게다. 1.5를 넘기면 그림이 깨지기 쉽다. 1-6에서 본 "숫자가 범위를 벗어나는" 일이 여기서도 생긴다.
75토큰 덩어리
1-5에서 본 CLIP의 제한이다. 태그가 많으면 75토큰씩 잘려서 따로 인코딩된다. 중요한 태그는 앞에 둔다. BREAK를 쓰면 원하는 자리에서 덩어리를 끊을 수 있다. 인물 묘사와 배경 묘사를 다른 덩어리에 넣어 서로 덜 섞이게 할 때 쓴다.
문장 방식
Flux 이후의 모델은 언어 모델이 그림을 보고 쓴 긴 설명문으로 학습했다. 텍스트 인코더도 문장을 이해한다.
은빛 긴 머리에 붉은 눈을 가진 소녀가 해 질 녘 교실의 창가 자리에 앉아 있다.
교복 차림이고, 턱을 괴고 창밖을 본다. 창으로 들어온 주황빛이 얼굴 한쪽을 비춘다.
부드러운 수채화풍 일러스트.
쓰는 요령
- 보이는 것을 그대로 쓴다. 누가, 무엇을 입고, 어디서, 어떤 자세로, 빛은 어디서 오는가.
- 관계를 쓴다. "왼쪽에", "뒤에", "손에 들고". 태그 방식이 못 하던 것이다.
- 화풍과 매체를 쓴다. "수채화", "셀 애니메이션", "35mm 필름 사진".
- 글자를 넣으려면 따옴표로. 간판에 "OPEN"이라고 쓰여 있다, 하는 식이다.
- 영어로 쓰는 것이 안전하다. 여러 언어를 아는 인코더도 있지만 학습 설명은 대부분 영어였다. 모델 설명서에 지원 언어가 적혀 있다.
태그 방식의 요령이 안 통한다
- 품질 태그는 거의 효과가 없다. 학습 설명에 그런 말이 없었다.
- 가중치 문법
(단어:1.3)은 잘 안 듣거나 아예 지원하지 않는다. 강조하려면 그 내용을 더 자세히 서술한다. - 태그만 나열해도 그림은 나온다. 하지만 모델이 가진 문장 이해 능력을 버리는 셈이다.
네거티브 프롬프트
1-6에서 본 대로다. CFG 식의 "조건 없음" 자리에 넣는 프롬프트다.
- CFG가 1보다 클 때만 듣는다. 증류 모델에서는 효과가 없다.
- "그리지 마라"가 아니라 "그쪽에서 멀어져라"다.
- 태그 모델에서는
worst quality, low quality같은 낮은 등급 태그를 넣는다. 품질 태그의 반대쪽을 미는 것이다. - 길게 쓴다고 좋아지지 않는다. 실제로 나타난 문제만 넣는다.
프롬프트로 안 되는 것
프롬프트는 텍스트 인코더를 지나 벡터가 되고, 그 벡터가 어텐션으로 그림에 스며든다. 이 경로의 한계가 곧 프롬프트의 한계다.
| 원하는 것 | 프롬프트로 되나 | 대신 쓰는 것 |
|---|---|---|
| 정확한 자세, 구도 | 대략만 | ControlNet (3단계) |
| 특정 그림과 같은 화풍 | 대략만 | 레퍼런스, LoRA (3, 4단계) |
| 모델이 모르는 캐릭터 | 안 된다 | LoRA (4단계) |
| 인물 둘의 옷을 정확히 따로 | 태그 방식에서는 자주 섞인다 | 영역 프롬프트 (3단계), 문장 방식 모델 |
| 모델이 모르는 개념 | 안 된다 | LoRA, 파인튜닝 (4단계) |
프롬프트를 아무리 다듬어도 안 되는 일은 프롬프트의 문제가 아니다. 도구를 바꿔야 한다. 3단계와 4단계가 그 도구들이다.
언어 모델에게 프롬프트를 맡기기
문장 방식 모델은 프롬프트가 자세할수록 잘 그린다. 그래서 짧은 주문을 언어 모델에게 주고 긴 설명문으로 늘리게 하는 방법이 널리 쓰인다. 프롬프트 확장이라고 한다. 모델 제작사가 전용 확장 모델을 함께 내놓기도 한다.
여기에도 함정이 있다. 확장 모델이 내용을 순화하거나 거절할 수 있다. 5단계에서 다룬다.
해 볼 것
- 태그 모델에서 품질 태그를 넣었을 때와 뺐을 때를 같은 시드로 비교한다.
- 태그 모델에 문장 프롬프트를, 문장 모델에 태그 나열을 넣어 본다.
- 인물 둘에게 서로 다른 머리색과 옷을 지정해 본다. 태그 모델과 문장 모델에서 각각 얼마나 섞이나?
예상 결과
- 넣은 쪽이 선이 정돈되고 색이 깔끔하다. 조건부 분포가 "높은 등급 그림"으로 좁혀졌기 때문이다.
- 둘 다 그림은 나오지만 프롬프트를 덜 따른다. 학습 때 본 형식이 아니기 때문이다.
- 태그 모델은 머리색과 옷이 자주 뒤섞인다. 문장 모델은 훨씬 잘 구분한다. 텍스트 인코더가 "누구의 무엇"인지를 이해하기 때문이다.