Scribble at 2023-06-26 09:51:27 Last modified: 2023-06-26 09:57:00

添付画像

CLIP tokenizer Copied from https://github.com/openai/CLIP. Originally MIT License, Copyright (c) 2021 OpenAI.

上の挿絵は "CLIP tokenizer Copied from https://github.com/openai/CLIP. Originally MIT License, Copyright (c) 2021 OpenAI." というファイルのタイトルを、そのまま Stable Diffusion へプロンプトとして入力して得た画像を JPEG に変換したものだ。ちなみに画像の生成は PNG ファイルとして設定しているけれど、PNG のままでウェブに公開すると、画像にプロンプトやモデルなどの情報が埋め込まれているため、或る意味では情報漏洩となる可能性がある・・・そして、こういうことにも注意しないといけないという、社内研修の動画を作っているところである。たとえば、使っている trained model の名称も画像にメタ情報として埋め込まれるから、まぁ何というか、NSFW な画像を出力するためにトレーニングされたモデルとかを使っていたらばれたりするわけであるな。

それはそうと、既にご承知のとおり深層学習を応用した分散モデルのシステムである Stable Diffusion では、いまをときめく高収入ブルーカラーであるプロンプト・エンジニアなどが駆使しているプロンプトを扱うためのテキスト解析技術として、OpenAI がリリースしている "CLIP" (Contrastive Language-Image Pre-Training) というニューラル・ネットワークが採用されている(https://github.com/openai/CLIP)。簡単に言ってしまえば、テキストから画像への変換を行うにあたって Stable Diffusion がやっていることは、トレーニングに利用した画像に付随する一群のタグから定義されたテンソルと、プロンプトから解析されたキーワードから定義されたテンソルとの比較なり重み付けの調整である。そういう調整を何重にも加えながら、画像を少しずつノイズ状態から加工して結果の画像ができあがる。

ここで僕らが知りたいのは、おそらく大きく言えば二つだろう。一つ目は「どういうキーワードが使えるのか」であり、二つ目は「どのキーワードを使えばどうなるのか」である。そして、この一つ目は CLIP のソースを眺めることですぐに分かる。なぜなら、上にリンクした tokenizer.py という Python のコードで書かれているとおり、"bpe_simple_vocab_16e6.txt.gz" というテキスト・ファイルにキーワードが列挙されているからだ。なお、Stable Diffusion は英語のプロンプトしか処理できない。これは、そもそもトレーニングで利用されたのが英語だという事情もあるが、この CLIP で使われる語彙が英語だからである。なので、英語だけだとは言え、この "bpe_simple_vocab_16e6.txt.gz" というファイルを解凍すれば、どういう単語が CLIP で扱われているのかは簡単に分かる。なお、trained model に割り当てられているタグに使われている単語は CLIP とは独立に埋め込まれているため、必ずしも CLIP の単語が trained model のデータに使われているとは限らないし、その逆に trained model のデータに埋め込まれているタグが CLIP にもあるとは限らない。なので、それらを正確に一致させようとするなら、CLIP の語彙だけを使って自力で trained model を(それこそ画像にタグを割り当てるところから始めて)作るほかにないだろう。

さて、この語彙ファイルを眺めてみると分かるように、実は英語としてデタラメなフレーズがたくさん登録されていることが分かる。機械的に処理しているから仕方ないことだし、それが実際に特定の画像に割り当てられているのは事実なのだから、むやみに除外するわけにもいかないのだろう。また、登録されているのは個々の単語だけではなく、フレーズとしてあまりにも特殊なもの(たとえば犯罪小説の催しである "Bloody Scotland" とか)だとか、「( _」のように絵文字ですらない無意味な記号列もたくさん含まれている。そのわりに約25万行しかないのだから、およそ英語の語彙としては10万個もない、つまり少し言葉をよく知ってる大学院生くらいしかないであろう。

というわけなので、おそらくプロンプトの調整や画像の生成で食っている人々というのは、もちろん CLIP のような仕組みは理解しているとして、ここから無駄なフレーズをそぎ落とした上で、さきほど紹介した二つ目の問いである「どのキーワードを使うと、どういう画像が出てくるのか」というのを、延々と実験しているのだろうと思う。そして、シソーラスなども使って同じグループとして分類したキーワードの中で、どの単語がどのくらいの効果があるかを、一つずつ検証していっているのであろう。ただ、生成された画像にどのていど反映されているかを評価する基準そのものが一定のルールで処理できるようになれば、キーワードを入力していったと同時に重み付けを表示するような UI が実装されることとなり、そしてマシン・パワーが上がってきたら、キーワードを入力するたびにプレビューがリアルタイムで表示されるようになるのだろう。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook