프롬프트에서 사용하는 단어를 토큰이라고 합니다. 각 토큰은 AI를 훈련하는 데 사용된 데이터셋에서의 발생 빈도에 따라 힘이 다릅니다. 기술적인 세부 사항은 잠시 후에 다루겠지만, 먼저 토큰을 실용적으로 생각하는 방법에 집중하겠습니다.
예를 들어 보겠습니다: 나는 “흰색 오버사이즈 코트를 입은 1명의 소녀와 >< 팔을 뻗은”이라고 프롬프트를 입력합니다. 각 단어가 하나의 토큰이라면, 우리는 11개의 토큰을 가지고 있습니다.
(이 프롬프트를 BetterWaifu에 입력하면, 토큰 카운터가 13을 표시하는 것을 볼 수 있습니다. 이는 AI가 내부적으로 <start>와 <end> 토큰을 추가하기 때문입니다. 이에 대한 자세한 내용은 다음 섹션에서 다루겠습니다.)
“with”, “for”, “at”, “in”과 같은 전치사와 “and”, “a”, “to”와 같은 조사는 토큰으로 간주됩니다. 따라서 이들도 힘을 가지며 이미지를 영향을 미칩니다.
조사나 전치사 없이 같은 프롬프트를 시도해 보겠습니다: “1girl, white oversized coat, ><, outstretched arms”. 쉼표도 토큰으로 계산되므로, 여전히 11개의 토큰, 시작과 끝 토큰을 포함하면 13개입니다. 결과는 꽤 다릅니다:
나는 이 결과가 더 마음에 듭니다. 코트에 더 많은 주의가 기울여진 것처럼 보입니다. 쉼표 토큰은 서로 다른 개념을 구분하는 데 사용됩니다.
이제 쉼표로 구분된 태그를 사용하는 것이 BetterWaifu에서 프롬프트를 입력하는 데 추천하는 방법이지만, 모든 전치사와 조사를 제거하는 것이 항상 결과를 더 좋게 만드는 것은 아닙니다. 때때로 상대적인 위치를 나타내기 위해 전치사를 사용하는 것이 중요합니다.
전치사가 모든 차이를 만드는 간단한 예를 들어보겠습니다:
1girl, 비행기, 흰색 오버사이즈 코트, ><, 팔을 뻗은1girl 비행기 안, 흰색 오버사이즈 코트, ><, 팔을 뻗은
토큰의 고유한 힘 외에도, 프롬프트에서의 위치도 중요합니다. 시작 부분의 토큰은 끝 부분의 토큰보다 더 큰 비중을 가집니다. 이는 이해하는 것이 중요합니다. 프롬프트의 끝에 있는 약한 토큰은 이미지에 아무런 영향을 미치지 않을 수 있습니다. 반대로, 시작 부분의 강한 토큰은 결과를 완전히 결정할 수 있습니다.
토큰의 힘을 조절하려면 (token:1.0) 구조를 사용할 수 있습니다. 여기서 숫자는 토큰의 힘을 나타냅니다. 0 - 영향 없음, 1 - 일반적인 비중. 나는 보통 1.5를 넘지 않습니다. 다양한 힘 값을 실험해보면 프롬프트에서 토큰에 대한 원하는 수준의 제어를 미세 조정하는 데 도움이 될 수 있습니다.
기술적 설명
토큰화는 AI 생성에서 텍스트 데이터를 처리하는 일반적인 방법입니다. 우리는 이를 사용하여 텍스트를 숫자로 변환하고 신경망으로 처리합니다.
Stable Diffusion은 텍스트 프롬프트를 토큰 시퀀스로 토큰화합니다. 예를 들어, 텍스트 프롬프트 “귀엽고 사랑스러운 토끼”를 a, 귀엽고, 그리고, 사랑스러운, 토끼의 토큰으로 나눕니다. 그런 다음 Stable Diffusion은 토큰의 시작과 끝에 <start>와 <end> 토큰을 추가합니다.
위의 예에 대한 결과 토큰 시퀀스는 <start>, a, 귀엽고, 그리고, 사랑스러운, 토끼, <end> (총 7개의 토큰)입니다.
계산을 쉽게 하기 위해 Stable Diffusion은 모든 텍스트 프롬프트의 토큰 시퀀스를 77의 길이로 유지하며, 패딩이나 잘라내기를 통해 조정합니다. 입력 프롬프트의 토큰 수가 77개 미만인 경우, 내부적으로 <end> 토큰이 시퀀스 끝에 추가되어 77개의 토큰이 될 때까지 추가됩니다.
77의 길이는 성능과 계산 효율성을 균형 있게 유지하기 위해 설정되었습니다. 77개 이상의 토큰을 사용할 경우, 소프트웨어마다 다른 동작을 보입니다:
첫 77개의 토큰이 유지되고 나머지는 잘려 나갑니다.
전체 프롬프트가 75개씩 청크로 나뉘고, 시작 및 끝 토큰이 추가되며 각 청크가 순서대로 처리됩니다. 이것이 BetterWaifu에서 사용하는 방법입니다.