
Neutral prompt:掘り下げ総集編:Nesting prompts編
今回でNeutral promptの掘り下げは終了となります。今回の内容はこれまでのキーワードを駆使してプロンプトを作成する様なものなので総集編的な位置づけになります。
※別記事で、CFG rescalingについて記載は予定しています。
参考までに前回までの3回で説明したメインのキーワードの挙動のイメージとしては以下のような感じです(若干異なるところはあります)。
①AND_PERP もともとのプロンプトにないイメージを追加する
②AND_SALT もともとのプロンプトにあるイメージを強調・付加する
③AND_TOPK もともとのプロンプトにあるイメージに新たなイメージを追加もしくは変換する。
さて、表題のNesting promptsについてです。これは、以下のサイトの説明文のところにしか説明が記載されていませんので参考にする論文はありません。最後らへんの<Advanced features>というところに記載があります。
<説明部分のGPT訳>
この拡張機能は、ANDを含むすべてのプロンプトキーワードのネスティングをサポートしており、最終出力に対する柔軟性とコントロールを大幅に向上させます。
とのことです。
サイトにプロンプトの例とその働きについて記載されていました。
magical tree forests, eternal city
AND_PERP [
electrical pole voyage
AND_SALT by small nocturne companion:1
]:1
AND_SALT [
electrical tornado
AND_SALT electric arcs, bzzz, sparks:1
]:1
複雑な構文になってきましたね。
ちょっとこれだとプロンプトの意味も含めて分かりにくいので、同じ構造の別なプロンプトで考えて見たいと思います。
このプロンプトをコピペしても再現性が得られませんでしたので、使用しているモデルによる差も結構あるようです。
以下に今回使用するプロンプトを記載しています。
作成時の検討でウェイトは調整しています。今回のは1より小さいと変化が少なかったので大きめということで。
<使用プロンプト>
1girl, teen, outdoors, cityscape
AND_PERP [ (thunder:1.3) AND_SALT (sparks:1.3):1 ]:1
AND_SALT [ (rain:1.3) AND_SALT (cloud:1.3), (storm:1.3):1]:1
このNesting promptsは、上の例にあるようにキーワードが [ ] で囲うということに対応しているということのようです。
[ ] の中で、画像が先に出来上がってから、次の処理に移行するみたいな仕組みと記載があります。
例えば、上のプロンプトの一部を私なりの①②③の解釈を元に評価してみます。
AND_PERP [ (thunder:1.3) AND_SALT (sparks:1.3):1 ]:1
これだと先に [ ]に囲まれた以下のところからイメージが作られる感じと思われます。
(thunder:1.3) AND_SALT (sparks:1.3):1
で、雷に閃光的な効果が強調・付加される感じのイメージが出来ると思います。
それをAND_PERPで元のイメージに追加するということで、普通にthunderを追加するよりは効果が高い可能性が期待されます。
次のプロンプト
AND_SALT [ (rain:1.3) AND_SALT (cloud:1.3), (storm:13):1]:1
これだと雨に加えて、雲、嵐の雰囲気が加わったものが付加・強調されることが期待されます。
それぞれのパターンについて作成した画像を提示します。
シード値固定 1195978169
1girl, teen, outdoors, cityscapeのみ

AND_PERP (thunder:1.3):1

AND_PERP [ (thunder:1.3) AND_SALT (sparks:1.3):1 ]:1

AND_PERP [ (thunder:1.3) AND_SALT (sparks:1.3):1 ]:1
AND_SALT (rain:1.3):1

AND_PERP [ (thunder:1.3) AND_SALT (sparks:1.3):1 ]:1
AND_SALT [ (rain:1.3) AND_SALT (cloud:1.3), (storm:1.3):1]:1

ということで、おおむね想定した様な効果が出ているような感じかと思います。
<おまけ>
サイトの説明文の中に、この階層構造については、とくに制限はないと記載がありました。
以下のように [ ] を増やしての構文も出来るとのことだと思います。
AND_PERP [ (thunder:1.3) AND_PERP [ (sparks:1.3)AND_SALT (thunder:1.2):1] :1 ]:1

AND_PERP [ (thunder:1.3) AND_PERP [ (thunder:1.3) AND_PERP [ (thunder:1.3) AND_PERP (thunder:1.3):1]:1]:1 ]:1
同じやつを重ね合わせても効果はないようです。

AND_TOPK (kimono style:1.3):0.6 を追加

<最終プロンプト>
1girl, teen, outdoors, cityscape
AND_PERP [ (thunder:1.3) AND_PERP [ (sparks:1.3)AND_SALT (thunder:1.2):1] :1 ]:1
AND_TOPK (kimono style:1.3):0.6
やってみて感じた事としては、通常のプロンプト作成とは大きく異なる手順で画像を作成したので新鮮でした(順番に足したりして修正する感じ)。
プロンプトはカッコいい?気もする。
個人的にGPTさんにプロンプト作成を頼んだりしていたので、その場合はどうすると良いか悩ましいところ。
興味深いところとしては、neutral promptを使用すると、トークン数が増えず、通常のプロンプトと異なる挙動をとります。
例えば、上のプロンプトだとトークン数が8です。最初のプロンプト分のみです。
どういう意味かは不明ですが詳しい方は何かわかるのでしょうか。。。