· No.15
no specks 라고 썼더니 흰 점이 수십 개 나왔다 — 이미지 프롬프트에서 부정문이 그리는 것
프롬프트에 금지어를 넣을수록 금지한 것이 나왔다. 처음엔 대체를 안 붙여서라고 봤는데, 이미 붙어 있는 문장에서도 같은 일이 났다. 그래서 기준을 다시 세웠다 — 그릴 수 있는 명사는 부정하지 말고 그 자리에 다른 것을 세운다, 그릴 수 없는 것은 부정해도 된다. 문구를 지웠더니 81개가 1개가 됐고, 반대로 유지해야 하는 부정문도 실증으로 갈랐다.
레퍼런스 이미지를 물려 영상을 만드는데, 감염된 인물의 얼굴이 회차를 거듭할수록 사람으로 돌아왔다. 레퍼런스에는 분명히 감염 외형이 있는데 결과물에는 없다.
첫 번째 원인은 셀 수 있는 것이었다
모델 탓을 하기 전에 우리가 쓴 문장을 세어 봤다. 두 가지가 나왔다.
- 인물을 가리키는 평범한 대명사가 125회.
- 감염 관련 어휘는 전체의 1.8%.
문장의 대부분이 「평범한 사람」을 말하고 있었으니 결과가 그쪽으로 가는 게 이상하지 않다. 여기까지는 흔한 진단이다. 그런데 세면서 더 나쁜 것이 나왔다.
우리가 그것을 막으려고 쓴 방어 문장 안에 정상 상태를 뜻하는 단어들이 들어 있었다. healthy, unmarked, clean, smooth — 합쳐서 10회. 전부 「~하지 않다」의 형태였다. 모델은 그 문장을 부정으로 읽지 않고, 안에 있는 명사와 형용사를 읽는다. 금지문이 금지 대상의 광고가 되어 있었다.
전부 긍정형으로 다시 썼다. 그러자 반대 방향의 신고가 들어왔다 — 얼굴이 과하게 망가졌다. 여기서 규칙이 하나 더 나왔다. 레퍼런스가 이미 답을 가진 부위는 다시 묘사하지 않는다. 묘사를 더하는 것과 상태를 유지하는 것은 같은 방향이 아니다. 오히려 반대다.
「대체를 안 붙여서」라는 설명이 틀렸다
여기까지의 진단으로 이런 규칙을 세웠다. 「무엇을 하지 마라」 뒤에는 반드시 「대신 무엇을 하라」를 붙인다. 대체를 안 주면 모델이 빈칸을 원래 것으로 채운다는 설명이다. 그럴듯했다.
그런데 그 규칙을 지킨 문장에서 같은 사고가 났다.
| 프롬프트에 쓴 것 | 나온 것 |
|---|---|
healthy · clean · smooth ×10 | 감염 외형이 지워졌다 |
carries no specks on it | 흰 점이 수십 개 |
a smooth unbroken dark shape | 매끈한 정상 실루엣 |
가운데 줄이 결정적이었다. no specks 에는 smooth and unbroken 이라는 대체가 이미 붙어 있었다. 대체 유무로는 이 결과를 설명할 수 없다.
그 문구를 통째로 지우자 흰 점이 81개에서 1개로 떨어졌다. 대체를 더 잘 붙이는 게 아니라 부정을 안 하는 것이 답이었다.
갈라야 할 기준은 다른 데 있었다
세 줄을 다시 보면 갈리는 지점이 보인다.
specks, wound, body — 그릴 수 있는 명사다. 문장 안에 들어오는 순간 모델의 머릿속에 그림이 하나 생긴다. 앞에 no 가 붙어 있어도 그림은 이미 생겼다.
pan, zoom, dialogue — 그릴 수 없는 것이다. 카메라 움직임이나 대사는 한 장의 그림으로 존재하지 않는다. 이건 부정해도 아무 그림도 안 생긴다.
그래서 기준을 이렇게 바꿨다.
그릴 수 있는 명사는 부정하지 말고, 그 자리에 다른 것을 세운다. 그릴 수 없는 것은 그대로 부정해도 된다.
이건 「부정문을 쓰지 마라」와 다르다. 실제로 우리는 부정문 하나를 그대로 유지했다. 간판과 글자를 금지하는 문구가 그것인데, 그 문구가 들어간 판이 채택됐고 글자가 0이었다. 실증이 있는 문구를 규칙 때문에 지우면 그건 규칙이 실측을 이기는 꼴이다.
부수적으로 갈린 것 — 형태와 동작
이 조사에서 표정 지시에도 같은 문제가 있는 걸 발견했다. 얼굴 묘사를 늘릴수록 결과가 나빠졌는데, 늘어난 것 대부분이 형태에 대한 서술이었다.
여기서 판별 한 줄이 나왔다.
스틸 한 장으로 찍을 수 있으면 형태다 — 지운다. 두 프레임이 있어야 성립하면 동작이다 — 쓴다.
레퍼런스가 형태를 이미 정하고 있으므로 형태 서술은 중복이거나 충돌이고, 동작은 레퍼런스에 없으므로 우리가 줘야 한다. 앞의 「레퍼런스가 답을 가진 부위는 다시 묘사하지 않는다」를 다른 각도에서 말한 셈이다.
이 진단이 반복해서 늦은 이유
문장을 의심하기까지 매번 오래 걸렸다. 결과가 이상하면 먼저 모델을 의심하고, 샘플러와 스텝과 가중치를 만지고, 그다음에야 우리가 쓴 글을 읽는다.
그런데 지금까지 나온 원인은 거의 매번 우리 문장 안에 있었다. 그래서 순서를 바꿨다. 결과가 이상하면 모델 설정을 만지기 전에 프롬프트를 grep 한다. 찾는 것은 두 가지다 — 금지문 안에 들어 있는 그릴 수 있는 명사, 그리고 어휘 비율. 둘 다 몇 초짜리다.