今回は Stable Diffusion WebUI を使用して、プロンプトを作成する際に役立つ、トークンとは、AND 構文と BREAK 構文、強調構文の使い方をご紹介します。
これらの構文は少し難しいかもしれませんが、プロンプトで適切に使うことで、より正確な AI 生成イラストを作り出すことが可能です。
トークンとは
まずは、トークンとは何かについて説明します。
Stable Diffusion でプロンプトにおいて、トークンの考え方は大切です。また、AND 構文や BREAK 構文を理解するためにも、このトークンの意味を知っておくことが大切です。
トークンとは、一言で言えば、プロンプト内に存在する「意味を持つ文字」のことを指します。
プロンプトの中に「long black hair」は、「long」と「black」「hair」の3つのトークンからなり立っています。「,」もトークンになります。
このように、1つのプロンプト内には複数のトークンが含まれているわけです。これらのトークンの数は、WebUI のプロンプト入力欄の右端のカウンターで簡単に確認することができます。
さて、Stable Diffusion では、75個以上のトークンを含むプロンプトは、これまでは単に無視されてしまう、というルールがありました。しかし、今のバージョンの AUTOMATIC1111 版 Stable Diffusion WebUI では、この75トークン上限制限はなくなり、76個目以降のトークンも出力画像に反映されるようになりました。
AND構文とは
次に、AND構文について説明します。AND構文は、上記の75トークン制限内でプロンプトを作るために作られた構文です。
たとえば、猫と鶏のAIイラストを生成したい時、「cat, bird」と入力すると、「cat」「,」「bird」の3つのトークンになってしまいます。しかしAND構文を使って「cat AND bird」とすると、3つのトークンが「cat AND bird」の1つのトークンにまとめられます。このように、トークンの上限制限を避けるのがAND構文の役割です。ただし、75トークン制限がなくなった現在では、あまり使う機会はありません。
また、「cat, bird」と、「cat AND bird」は同じ意味に理解される訳ではないことに気をつけてください。「cat, bird」と、「cat AND bird」は違う画像が生成されます。
BREAK構文とは
さて、次にBREAK構文について説明します。上限75トークン制限が廃止されたとはいえ、75番目のトークンと76番目のトークンではプロンプトの影響力に差があることが分かっています。同じトークン、たとえば「red」と指定した場合、76番目のトークンで使うほうが、75番目のトークンで使うより効果が強くなります。
この特性を利用して、絶対に反映させたい要素を持つ場合、1トークン付近と76番目のトークンに配置することで成功率を上げることができます。ただ、トークンの数を調整するためだけにあまり使わないプロンプトを大量に使うのは大変です。
ここで BREAK 構文が役立ちます。BREAK 構文を使うと、その地点から次の75トークン区切りまでを自動的に意味のない文字列で埋めてくれます。
例えば、「masterpiece, best quality, a girl in school uniform, brown eyes, long black hair, white ribbon, gently smile, standing, arms behind back, classroom」というプロンプトで生成した画像が以下のとおりです。
この画像では、リボンの色が白く反映されていません。赤になっていますね。しかし、BREAK構文を使って「masterpiece, best quality, a girl in school uniform, brown eyes, long black hair, BREAK white ribbon, gently smile, standing, arms behind back, classroom」と入力することで、それぞれの部分を76番目のトークンに「white」をもってくると、指定した部位の色が反映されやすくなります。
強調構文とは
また、強調構文について説明します。
強調構文とは BREAK 構文の様に特定のトークンの効果を強める指定方法です。
強調したいキーワードと、その強調度を指定するパラメータを組み合わせて使用します。
トークンを丸括弧( )で囲むと、そのキーワードが1.1倍に強調されます。
「(red)」の場合は red の効果が1.1倍になります。
さらに、括弧は重ねることができます。2つ重ねると、1.1倍が2回適用されて、1.21倍の強調になります。「((red))」の場合は red の効果が1.21倍になります。
キーワードの後ろにコロン「(:n)」を付けることで、そのキーワードを n 倍強調することもできます。「(red:1.5)」の場合は red の効果が1.5倍になります。
マイナスや、少数など1倍未満の値を指定し、強調度を減らすことも可能です。
さらに、大括弧[]を用いると、キーワードが0.9倍になります。これは”(キーワード:0.9)”と同様の効果を持ちます。
BREAK 構文の時に使った赤いリボンの画像を、強調構文を使って以下のようなプロンプトに変更し画像を生成します。「masterpiece, best quality, a girl in school uniform, brown eyes, long black hair, (white ribbon:1.4), gently smile, standing, arms behind back, classroom」
「white ribbon」の効果を1.4倍をすることで、指定した部位の色が反映され白いリボンになっているのがわかります。
まとめ
Stable Diffusion WebUI でプロンプトを作成する際に活用できる AND 構文と BREAK 構文、強調構文の使い方についての説明でした。BREAK 構文によるトークン強調の反映は必ずしも完全ではありませんが、強調できる場合が多いので便利だと思います。是非、試してみてください。