こんにちは。しおです。

 

先日、「六角軸ドリル」というアカウントで『simulacra』という動画を投稿しました。この映像を制作・担当しましたので、映像担当者として編集後記を記載したいと思います。編集後記にしては少し投稿が早い気もしますが、忘れないうちに書いておこうという算段です。

 

まず、この動画は私個人の力だけでは成り立っていません。音声作者の方を含めた六角軸ドリル関係者のみなさんに心から感謝します。

 

投稿した動画

 

映像を担当したきっかけ

 

 

 

このプロジェクトの原点は、音声作者の方から、Quartz Composerというビジュアルプログラミング技術を利用した、Metro Exitsという作品があると紹介していただいたのがきっかけです。それを参考にして、今回の音声に実写素材を全く使わない作風で映像を作れないかということでした。

 

本ブログでは、まず動画制作にあたって用いた技術について、そのあと表現について述べていきます。技術についての解説を行う章では、動画制作にあたって本質的ではない話を述べますが、本動画の作成にあたっての背景や、後述するコンセプトを支える技術も書いているので、読んでいただけたら幸いです。
 
 

 

技術的な話

『simulacra』を支える技術

今回の動画では、「NLP」、いわゆる自然言語処理の知識や技術と、画像認識を行うコンピュータビジョンの技術を多く活用しました。

 

自然言語処理とは、その名の通りコンピュータ上で自然言語を扱う処理のことを指します。
 
私はもともと「プログラミング言語処理系」というプログラミング言語を作る技術分野の人間で、大学入学当時より長らく向き合ってきました。「プログラミング言語処理系」はプログラミング言語のために、「自然言語処理」はコンピューターが自然言語を扱うために発展した分野であり、目的はそれぞれ全く異なります。「古典的な」自然言語処理のタスクは、プログラミング言語処理系と似通った計算技術もあり、その所以で自然言語処理に関して興味を持つようになりました。ちなみに大学で取った自然言語処理の単位の成績は89点でした。小テストであと1問正解できていれば秀が取れたのに・・・。
 

形式言語やオートマトンを扱う分野では、文脈自由文法(Context-Free Grammar)とそれによって生成される文脈自由言語(Context-Free Language)というのを用いることが多いです。文脈と自由、、、、

 

 

コンピュータビジョンは、コンピュータ上で画像や動画を扱い、その画像や動画内に対して様々な補正や認識、加工を行う技術を指します。これも高校時代から興味を持っており、OpenCVやNumpyなどのライブラリを用いて、画像処理技術について取り組んできました。また、「古典的な」コンピュータビジョンにおいては、SIFT特徴量やHOG特徴量を通じて、「古典的な」自然言語処理と組み合わせて処理を行うことも多く、付随して勉強をする機会も得ることができました。
 
それぞれ「古典的な」と書きましたが、古典的な技術は、形式的な技術、ルールベースの技術に確率の話を持ち込んで、ある程度の柔軟性を持たせましたという面が大きく、なかなか実用的な処理を行うことはできませんでした。古典的な技術においては、人間が「こうすればいい感じに処理ができるだろう」と、求めらえた解決課題に応じてアルゴリズムを設計する必要があったのです。ちなみにコンピュータの世界では「古典的な」という単語はネガティブな意味はなく、ポジティブに使われる場面のほうが多いです。あしからず。
 
そのため現代ではニューラルネットワークを通した機械学習的な解決方法が本流となっています。ChatGPTやGeminiのような技術はニューラルネットワークを基礎技術としています。
 
ちなみに研究室は自然言語処理についての研究室に決まりました(第一志望で通りました)やったね!
 

言語コーパスとtrigram

本動画の作成にあたっては、言語コーパスを用いてn-gramを算出することから始まりました。言語コーパスとは、主に自然言語処理のタスクのため、大規模に文章を構造化、蓄積したものです。n-gramは、単語を単位として扱うとき、連続するN個の要素の並びとして捉える手法のことを言います。Nが2であれば、2-gramことbigram、Nが3であれば3-gramことtrigramとなります。

 

n-gramを用いて、確率的にランダムな文字を生成することができます。

 

言語コーパスとは

 

少し具体例を出します。たとえば言語コーパスに次のような単語の並びがあったとします。

東京 メトロ
東京 駅
東京 都
東京 メトロ
東京 メトロ

すると「東京」の次に来た語を数えて、という回数計算を行います。これがbigramです。

東京 → メトロ  3回
東京 → 駅      1回
東京 → 都      1回

 

そしてこのbigramを用いて、確率的に文章を生成することを考えます。

たとえば「東京」まで生成されたとき、

メトロ  60%
駅      20%
都      20%

のようにそれぞれを選択する確率を計算し、それをもとに次に生成する単語を決定します。

 

ただしbigramでは少し弱いところがあり

東京 メトロ
大阪 メトロ
メトロ 駅
メトロ 社員
メトロ 線

のとき、「東京」「メトロ」まで生成していた時、「メトロ」という単語があるということしか使わず、「東京」という単語は生成に使わなくなります。そのため、文脈がかなり弱くなってしまうのです。

 

対してtrigramでは

東京 メトロ 銀座線
東京 メトロ 社員
東京 メトロ 駅
大阪 メトロ 御堂筋線
大阪 メトロ 中央線

というコーパスがあったとき

東京 メトロ → 銀座線  1
東京 メトロ → 社員    1
東京 メトロ → 駅      1

としてそれぞれ集計します。生成するときは

東京 メトロ →駅
      メトロ  駅 → 構内
              駅    構内 → では

と、若干考慮する情報量を増やすことができるのです。

 

ここからは実際に計算を行っていきます。

 

今回用いたwikipedia日本語コーパス
 
Wikipediaの日本語コーパスの容量
Wikipediaの日本語記事、記事の文章だけだと全部合わせても3.85GBしかないらしい
 
Pythonで頑張って学習
 
生成したn-gramモデルから文章を確率的に生成してみます。
当初はnを2としたbigram(2-gram)を作成しました。
ですがあまりいい感じに生成できなかったので、trigram(3-gram)に切り替えることにしました。
 
trigram学習中のディスクアクセス中のグラフ。確率計算を特定ブロックごとに行い、そのブロックごとに計算が終わったらローカルに書き込んでるのでスパイクが起きています。
 
空間計算量も時間計算量もやばい!
 
今回は、生成時に、weight^(1.0 / temperature)という数式を入れて若干確率分布を変化させました。頻度の高い候補をほんの少し引き当てやすくするようにしています。
 
いい感じに生成できるようになりました。
 
これを与えた文章を先頭から1文字ずつ計算することで、徐々に放送文面が出現する表現を作ることができます。
今回のこの動画では、この確率的な文章生成が大きな役割を果たします。

Transformerによる自然言語処理

とはいえ、前項のtrigramからの文字列生成はあまりにも意味が通じません。後述すると思いますが、テーマとして「情報の進化」というのがありますから、ある程度日本語として意味が通じそうな生成も行いたいと考えました。そこでTransformerという自然言語処理の技術を用いて、少し日本語として通じそうな言語生成の技術も活用することにしました。Transformerは、実際にChatGPTなどにも用いられている、ニューラルネットワーク、深層学習を用いた言語生成技術です。

 

Transformerを用いた生成は、trigramによる生成と比べて少し文脈がありそうな文章を生成することができます。

 

Transformerについて深く解説すると、普通に大学の2単位ぐらいになってしまいそうなので、ほんの少しだけ解説します。

 

たとえば「私は電車に」という入力があったとします。

このとき「私は」「電車 」「に」のように単語単位で分解でき、それぞれの単語はTransformerを通ることで、数百個の数値からなるベクトルに変換されます。

たとえば簡略化してHidden State(各トークンの文脈を反映した内部表現)が4次元だとすると、

            隠れ次元
           1      2      3      4
私は 0.8   -0.2    0.4    0.1
電車 0.2    0.7   -0.5    0.3
に  -0.1    0.6    0.3   -0.7

のような行列になります。そして行列の一番最後の行をもとに、次に現れるであろう単語の確率を計算するのです。

 

 

Transformerの入門記事

 

 

softmax関数(Transformerでよく用いられる活性化関数の一種)

 

そしてこの処理は単語を生成する処理を再帰的に行うため、縦方向に徐々に増えていきます。(厳密な説明ではないのですが、繰り返しをしているということです。再帰的処理とループ処理はお互いに展開できつつもその使用例は若干違ったりするためです)

 

動画中盤のモザイク状の表現は、これを可視化したものです。

そして、動画内で上記の表現に重なっていた文字は、このアルゴリズムに基づいて、実際に生成されたテキストなのです。

 

要するに、簡易的な生成AIを自作して、その処理過程を可視化しているということです。

 

人物抽出

 

画像内から特定の物体を抽出する技術として、YOLO(You Only Look Once)があります。次の画像ように、人物領域をセグメンテーションし、塗りつぶすことができます。

 

 

 

 

あわせて、BLIP(Bootstrapping Language-Image Pre-training)という技術を活用しました。入力する画像について説明する文章(キャプション)を生成する技術のことです。Sora2など、テキストプロンプトから画像や動画を生成する技術が有名ですが、その反対ともいえる存在です。

 

BLIPとは

 

今回はこの2つの技術を組み合わせて、人物画像の画像データセットからそれぞれキャプションを生成し、また人物画像に対してそのキャプションで埋め尽くす画像を出力するプログラムを開発しました。

生成されたキャプションの例

 

人物領域をキャプションテキストで埋め尽くした様子。よく見ると「A person・・・」となっています。

 

Three.jsによる人物画像のランダム配置

 

 

 

Three.jsとは

 

途中の「ドアが閉まります」についても同じ技術を用いています。(こちらは輪郭線に対するテキスト配置)

六角軸ドリルを支える技術

――― メディアコンテンツ共有基盤の開発

 

六角軸ドリルは、ほかの編集後記で述べられているとおり、複数人の作者による共有アカウントです。つまり複数人合同で映像制作に取り組むわけですが、それゆえ頻繁に素材の共有を行う必要があります。それまで、ファイル転送サービスを用いていましたが、その手間や管理に難がありました。Google Driveなどのサブスクリプション型のストレージサービスの契約も検討しましたが、その契約にかかる月ごとの金銭の管理などがあり、選択肢から外れることとなりました。

 

これにあたり、六角軸ドリルではオンプレミス(要は自宅に)でファイルサーバーを開発、構築することにしました。技術スタックとしてRuby / Rails API / React / TypeScript / PostgreSQL / Nginx / Certbot / Ubuntu / Cloudflare DNS / Resend / GitHub Actions CI を採用しています。

 

マルチテナント型のシステムを採用してるので、合作など、プロジェクトごとにテナントを立ち上げることも可能です。いつか下車界隈のデファクトスタンダードになる。たぶん

 

進捗共有

 

本システムの構築により、simulacraの制作においても、進捗の共有などに活用することができました(たぶん)。また、すでに3回ほど勉強会等で本システムを構成する技術について登壇を行うこともできています。

 

関係する登壇テーマ

・RubyでのLintツールについて

・NginxでのX-Accel-Redirectを用いた静的ファイル配信手法

・Nginx内の映像ストリーミング配信の実装

simulacraでの表現

ここからは、simulacraでの表現や制作過程について述べていきます。

全体テーマとサブテーマ

 
全体テーマは「情報化社会において、膨大な情報に埋もれるしんどさ」としました。ちなみにこのしんどさのことを、情報過多シンドロームというらしいです。このテーマを実践?するため、作品の完成直前にあたり、実際に自分のSNS(Twitter/Xアカウント)を削除したうえで映像制作に取り組むという大胆な行動も行いまいした。ちなみに消したほうが快適だったので消したままにしています。SNSって実はしんどいものなのかもしれない・・・。
 
その期間に、動画制作と並行しながら夏目漱石の「こころ」を3日足らずで読破することもできました。高校時代に現代文でこころをやったのですが、当時は一部分のみが教科書に掲載されていたので、全文読んでみたいという気分になったのです。
 

サブテーマは2つあります。

 

まず、「初めて上京したときの気持ち」を表現することです。私が初めて東京に行ったのは2022年7月でしたが、その時に感じた東京での「人とモノ、情報の一極集中」に圧倒されました。

 

ですから、このコメントはかなり的確なものなのです。

 

夏目漱石のこころには

「別に悪い人間というほどのものもいないようです。大抵田舎者いなかものですから」
「田舎者はなぜ悪くないんですか」
 私はこの追窮ついきゅうに苦しんだ。しかし先生は私に返事を考えさせる余裕さえ与えなかった。

に続くやりとりがあります。この動画もこの考えに少し影響されているのかもしれません。

 

次に「言語生成技術の発展」というテーマです。昨今、生成AIの著しい発展によって、社会は大きく変容しました。私はChatGPTが公開される直前の、2022年ごろにその基盤技術たるGPT3モデルの存在を知りましたが、その時は社会がここまで変容することは全く想像することができませんでした。確率的なモデル生成→少し文脈のある言語生成という切り替えを持って、この生成AI技術の発展を表現したかったのです。しかし、動画内で使用するキャプションには、昨今のChatGPTやGeminiのような、実用的な生成AIによって出力されたものは一切使用していません。もはや人間が生成したものと区別がつかないためです。これに関してチューリング・テストという実験があるので気になる人は調べてみてください。

冒頭

 

東京メトロの2駅間の経路が表示されます。個人個人が別々の行動を取っているということを表現しています。

 

それぞれに表示される数値は、1日あたり、2つの駅間を移動する人が何人いるかを東京メトロの駅の組み合わせすべてで概算しています。

 

下位の計算結果

 

上位の計算結果

 

西ヶ原~原木中山を移動する人は少なく、新宿~渋谷を移動する人は多いというシミュレーション結果が出ました。ある程度直感通りの結果かもしれません。(かなり雑なシミュレーションなので、あてにはしないでくださいね)

 

 

東京メトロの駅に対してボロノイ分割した地域の時間別滞在人口を、メッシュ別人口と、その駅の利用者数をもとにシミュレーションした結果を可視化しています(ただしこれも厳密な計算ではないです)。明るさは、その地域との最低人口状態と比べて、今どれだけ人口が多いかということを表しています。これにより、早朝時間帯と夜間時間帯は最低人口と同じになるので、真っ黒になり、日中は流動で最低人口と差が出るので白に近づくという仕掛けです。

 

地域ごとにそれぞれの特徴(都市の特徴からあらわれる夜間人口の差など)があることを表しています。もともとは数理モデルのライフゲームを着想を得た表現です。

ビル群

ここで今回の最大の要素である、確率的に生成した文章から生まれるビル群が出てきます。

 

東京にあるたくさんの高層ビルと、あふれる大量の情報を、確率的に生成したテキストで表現します。絶妙に日本語そうで日本語ではない文章に圧倒されます。制作時にはこれを「文字ビル」と呼んでいました。

 

文字ビルと文字電車の制作風景

 

その中を電車で移動します。その電車も都市を構成するものであることを表しています。

 

ここで下からビルを見上げる構図から、上から俯瞰する構図に切り替えています。

 

 

都市の情報量があふれ出してしまいます。

英文側の元データは、夕暮れ時の新宿の画像をもとに生成させたのですが、画面右下に「night from the・・・」という文が見えるように、おおむねそのキャプションは正しく、適切に生成できていることがわかります。

 

 

都市の情報から逃れるため、情報のトンネル(≒地下)を通ります。しかしそのトンネルも情報で構成されています。情報を守る手法は情報しかないのです。

 

情報のトンネルって、VPNのこと・・・!?

 

地上と地下

 

地上と、地下と、それを見通す「俯瞰」「追跡」

 

広告の最適化などのために行われる「トラッキング」や、時間を無限に消費してしまう「ショート動画」とショート動画がその人にあった動画を無限に推薦し続け、人を好みの情報で埋め尽くすアルゴリズムからなかなか逃れられないことを表しています。

 

本当にショート動画っていう存在よくないと思う。

 

サビ~後半

情報があふれ出し、それをなんとか整理をしたい気持ちとの格闘する様子を表しています。少し精度の良いTransformerアルゴリズムで生成した文章を挿入しています。良い文章は苦悩を抱えるときに生まれるという意味合いを持たせました。

 

難しい。雑念は増えるばかり。

 

そのような環境の中でも、人々は個性を持っていることを、東京メトロカラーで表現しています。

 

「たられば」というパラレルワールドが脳内をよぎります。

 

 

 

以上が、動画内でのそれぞれの表現のコンセプトです。

 

情報化社会によって生まれた情報過多を、それを支えたさまざまな情報技術で表現するという、なんとも奇妙な作品として制作しました。

おわりに

この動画制作への取り組みを通じ、新たな表現の模索と、自然言語処理・コンピュータビジョンに関する知識の習得に取り組むことができました。個人的にはかなり満足がいく動画を制作できたと思います。