言葉の力
プロンプトで使用する言葉はトークンと呼ばれます。各トークンにはそれぞれの力があり、それはAIのトレーニングに使用されるデータセット内での出現頻度に依存します。技術的な詳細については後で説明しますが、まずはトークンを実際に考える方法に焦点を当てましょう。
例を見てみましょう:私は「白いオーバーサイズのコートを着た1人の女の子、><、腕を伸ばしている」とプロンプトを入力します。各単語がトークンであれば、11のトークンがあります。
(このプロンプトをBetterWaifuに入力すると、トークンカウンターが13を表示することに気づくでしょう。これは、AIが内部で<start>と<end>トークンを追加するためです。これについては次のセクションで詳しく説明します。)
「with」、「for」、「at」、「in」のような前置詞や、「and」、「a」、「to」のような助詞もトークンとしてカウントされます。したがって、これらも力を持ち、画像に影響を与えます。
助詞や前置詞を使わない同じプロンプトを試してみましょう:「1girl、白いオーバーサイズのコート、><、腕を伸ばしている」。カンマもトークンとしてカウントされるので、トークンは依然として11、開始と終了のトークンを含めると13です。結果はかなり異なります:
私はこの結果が好きです。なぜなら、コートにもっと注意が払われているように見えるからです。カンマトークンは異なる概念を区切るために使用されます。
現在、カンマ区切りのタグを使用することが私の推奨アプローチですが、すべての前置詞や助詞を取り除くことが常に結果を良くするわけではありません。時には、相対的な位置を示すために前置詞を使用することが重要です。
前置詞が全ての違いを生む簡単な例を見てみましょう:
1人の女の子、飛行機、白いオーバーサイズのコート、><、腕を伸ばしている
飛行機の中の1人の女の子、白いオーバーサイズのコート、><、腕を伸ばしている
トークンの固有の強さに加えて、プロンプト内での位置も重視されます。先頭のトークンは末尾のトークンよりも重みがあります。これは理解することが重要で、プロンプトの末尾にある弱いトークンは画像に影響を与えない可能性があります。逆に、先頭の強いトークンは結果を完全に決定することができます。
トークンの強さを制御するためには、(token:1.0)という構文を使用できます。ここで、数字はトークンの強さを表します。0 - 影響なし、1 - 通常の重み。私は通常1.5を超えることはありません。異なる強さの値を試すことで、プロンプト内のトークンに対する制御の望ましいレベルを微調整することができます。
技術的説明
トークン化はAI生成におけるテキストデータを扱う一般的な方法です。これを使用してテキストを数値に変換し、ニューラルネットワークで処理します。
Stable Diffusionはテキストプロンプトをトークンのシーケンスにトークン化します。例えば、「かわいくて愛らしいウサギ」というテキストプロンプトをa、cute、and、adorable、bunnyというトークンに分割します。その後、Stable Diffusionはトークンの先頭と末尾に<start>と<end>トークンを追加します。
上記の例に対する結果のトークンシーケンスは<start>、a、cute、and、adorable、bunny、<end>(7トークン)となります。
計算を容易にするために、Stable Diffusionは任意のテキストプロンプトのトークンシーケンスを77の長さに保ち、パディングまたは切り捨てを行います。入力プロンプトが77トークン未満の場合、内部で<end>トークンがシーケンスの末尾に追加され、77トークンに達するまで続きます。
77の長さは、パフォーマンスと計算効率のバランスを取るために設定されました。77トークンを超えると、異なるソフトウェアは異なる動作をします:
- 最初の77トークンが保持され、残りは切り捨てられます。
- プロンプト全体が75のチャンクに分割され、開始と終了のトークンが追加され、各チャンクが順番に処理されます。これがBetterWaifuが使用する方法です。