みんなの工作教室「カットアップソフトを作ろう!」第一回



 世界の国から辺境の浜辺へ、毎日打ち上げられる新鮮な回線素材、ぴちぴち躍るテキストに、ぼくやわたしのカットアップ魂はうずきっぱなし!切りたい、貼りたい、でもめんどくさい! そのくせプログラムは書いてみたい! そんなぜいたくな悩みを(ある程度)解決し、さらなる鋏と糊の世界へあなたを誘うカットアップソフトの工作教室。プログラム言語は一切なし、プログラミングに興味はないがカットアップには興味があるという方もお気軽にご参加下さい。

 お相手はEVこと細馬宏通です。


カットアップとは「ばらし」と「貼り付け」である


カットアップは、おおまかに言って「鋏を入れること(ばらし)」と「糊で貼ること(貼り付け)」の二つのステップから成り立つ。つまり、

1.元ネタとなる文章をなんらかのてがかりをもとに断片化する。(ばらし)
2.バラされた断片どうしをなんらかの規則で、つなぎ合わせて文章を再構成する。(貼り付け)

どんなてがかりをもとにバラすか、どのような規則で再構成するかによって、カットアップの結果は大きく変わる。


カットアップソフトの作成


「ばらし」と「貼り付け」をプログラムすれば、カットアップソフトができる。たとえば

1. 空白記号をてがかりに英語の文章を単語にいったんばらす。(ばらし)
2. バラされた単語の中からランダムに単語を選んで並べる。(貼り付け)

というプログラムを書けば、単語をでたらめに並べ替える、簡単なカットアッププログラムができる。
日本語については英語にはない問題が生じるが、これは次のページを参照すること。



生起確率を考慮したカットアップソフト


 各断片が元ネタとなる文章中にどれくらいの確率で出現したかを考慮すると、元ネタで頻繁に使われる断片をカットアップにより頻繁に反映させることができる。
 プログラムする場合は、断片化した段階で、同じ断片が何回現れるかをカウントすればよい。断片どうしのマッチングさえ行えば簡単に実現できるだろう。


生起確率と前後の「文脈」を考慮したカットアップソフト


 断片の前後がどうなっているかを考慮すると、より複雑なカットアップができる。
 たとえば、「その断片の前にどんな断片がどれくらいの出現確率で現れたか」を計算すれば、単にでたらめに断片の並んだカットアップ文ではなく、原文の断片の並びを取り込んだカットアップ文ができる。
 たとえば以下のような元ネタがあったとしよう。


わたしわたしあなたキライわたしスキわたしとてもスキあなたスキとてもスキあなたわたしスキとてもわたしスキあなたキライわたしキライとてもスキキライあなたスキ

この元ネタを「わたし」「あなた」「スキ」「キライ」「とても」の5つに断片化したとする。すると元ネタからはいくつかの傾向が見てとれる。つまり、元ネタにおいて「あなた」から「わたし」への推移は1回、「わたし」から「あなた」への推移も一回、という風にカウントするのである。断片から断片への推移の種類は次のような表になる。


断片の推移

 
直前の断片
あなた
わたし
スキ
キライ
とても



次にくる断片
あなた
0
1
3
1
0
わたし
1
1
1
2
1
スキ
2
3
0
0
3
キライ
2
1
1
0
0
とても
0
1
2
0
0


断片から断片への推移は全部で26回だから、単純に各数値を26で割ると、次のような推移確率の行列ができる。


断片から断片への推移確率行列

 
直前の断片
あなた
わたし
スキ
キライ
とても





次にくる断片
あなた
0
0.04
0.12
0.04
0
わたし
0.04
0.04
0.04
0.08
0.04
スキ
0.08
0.12
0
0
0.12
キライ
0.08
0.04
0.04
0
0
とても
0
0.04
0.08
0
0



 こうした推移確率が果たして元ネタを書いた人のクセをしっかり反映しているかどうかはわからない(だってサンプルが少なすぎる)。さらに個人的な見解を加えておけば、仮にサンプルを増やしたとしても、それだけでブンガクが分かるとはわたしは考えていない。が、これは人のクセを検証する作業ではなく、カットアップをする素材つくりの作業であって、その限りでは役に立つ。

 ここで計算した確率をもとにカットアップすればたとえば「あなたわたしスキあなたキライわたしスキとてもスキ・・・」という風に、元ネタの風情を多少反映したカットアップ文ができるだろう。つまり「わたしスキ」や「スキあなた」のような組み合わせは比較的起こりやすいし、「あなたとても」や「とてもキライ」は推移確率がゼロなので起こりえない。つまり、推移確率によって、カットアップ結果にはいくつかの傾向が持ち込まれることになる。ランダムでフラットなカットアップに飽きた人は試してみるといいだろう。

 こうした手法を用いたものとしては、変態バンド「Doctor Nerve」のページDoctor Nerve's Markov Pageが1996年ごろから知られている。また山形浩生『たかがバロウズ本。』で紹介されているJamie Zavinskyのdadadodoも、こうした手法のよい例である。ちなみに、あるできごとの起こる確率が、直前のできごとのみに左右されている連鎖過程を「マルコフ連鎖」と呼ぶ。Doctor Nerve's Markov PageのMarkovはここからとられている。

 この方法は、元ネタに使われている断片の種類が比較的少なく、またある程度同じ断片が繰り返し用いられている場合に威力を発揮する。英語のように単語が分かち書きされており、なおかつ冠詞や代名詞などが繰り返し用いられる言語に有効だろう。日本語では別に延べるように「分かち書きの不在」問題をクリアする必要がある

 ここでは、元ネタから推移行列を計算したが、元ネタを用いずに、断片と推移行列をいきなり設定すれば、文章生成ソフトや人工無脳を作ることができる。これは日本語でも比較的容易にできる。後の応用例を参照のこと。


さらに長い「文脈」を考慮するには


 ここでは直前の断片(つまりひとつ前の断片)だけを考えたが、二つ前、三つ前・・・n個前の断片の生起確率まで考えに入れれば、より長い目で見た文脈をカットアップに反映させることができる。手計算ではたいへんだが、プログラムは比較的簡単だ。
 ただし、ここではカットアップが目的なので、元ネタがマルコフ連鎖かどうかは考えなくてよろしい。
 ところで、じつはもっと簡単に長い「文脈」を維持する方法がある。それは「あまり細かく切らない」ということである。分かち書きの言語ならば、たとえば複数の空白をスキップしていくつかおきに切ればよい。


なにも本当にばらばらにしなくても・・・


 紙と鋏を使うカットアップとは異なり、カットアップソフトでは、元ネタをじっさいにいくつものファイルにばらばらにする必要はない。元ネタとなるファイルの何バイトから何バイトめでばらすか、そのバイト数をリストアップしてデータファイルにすればよい。貼り付けの際は、該当部分を元ネタから読み込めばよろしい。これは素材がテキスト以外でも同じことで、元ネタが画像なら、何ピクセルめから何ピクセルめを断片とするかを決めればよいし、ムービーなら何コマめから何コマめまでを断片とするかを決めればよい。
 もちろん、あえていくつもの断片ファイルを作って気分を出すのはかまわない。ただしあとの始末がたいへんである。



応用例(1):テキスト生成への応用


 元ネタを改変するいちばん簡単な方法は、一部の語を変換するという方法だろう。これは、文脈をほとんど残しつつ行うカットアップと言えなくもない。関勝成「大阪弁変換フィルタ」をはじめとする一連のものがこれに当てはまる。大阪弁変換フィルタは、ネットワークの黎明期である1980年代に「世に流通するすべてのテキストファイルは元ネタになりうる」ということを明らかにした点でも功績がある。これについてはすでに書いたことがあるのでこちらを参照

 人工無脳のような自動チャットプログラムの中には、ユーザーの入力した文字列をとりこんでセリフ化するものがある。これは、ユーザー入力を元ネタにした一種のカットアップととらえることができる。ユーザーがどんな言葉に対してそのセリフを言ったかという文脈を考慮すれば、当意即妙なやりとりをするチャットプログラムを作ることができるはずだ。こうした試みは1980年代からASCIIネットなどをはじめあちこちで行われ、フリーウェアのソフトがパソコン雑誌の付録で配布されたこともあった。この時期の一連の動きをまとめた本としては、「人工無脳」(BNN出版 1987)がある。

 ちなみに筆者が作ったハイパーカード版の人工無脳「無脳なぼくら」もリンクしておこう。ここには、辞書のみで文章を生成する「ステレオタイプ型」、ユーザーの文字列を取り込んでランダムに出力する「ランダム学習型」、ユーザーの文字列がどんなことばに対して発せられたかを取り込む「シークエンス学習型」の3タイプが収録されているので、効果を比較するのによいだろう。

 俳句生成ソフトや短歌生成ソフトは、従来の俳句の575に断片化し、自由に貼り合わせる。これらも一種のカットアップソフトとして考えることができるだろう。こうした俳句・短歌生成プログラムは「俳句」「短歌」「自動」「CGI」などで検索すればいくつか見つけることができる。ここではそのパイオニア的な例として、風野春樹氏の「風流」を挙げておこう。MS-DOS時代のものだが、季語や文法チェックなどが行われていながら、絶妙にとんでもない組み合わせが得られ、楽しめる。

 特定の作家の俳句をデータベースにし、575の生起確率や推移行列を計算すれば、芭蕉風、蕪村風(あまり本気にしないように)など独特のスタイルを匂わせる俳句生成ソフトが作れるだろう。また、枕詞をつくりたいときには、特定の断片の組み合わせにごく偏った推移確率を設定しておけばよいだろう。

 一般に、短詩形の文章は、分かち書きや改行などをもとにすれば「ばらし」が簡単で、しかも比較的つながりのよいカットアップ結果が得られる。もちろん、つながりのよいことがカットアップとしてよいことかどうかは、別の問題である。


応用例(2):テキスト以外への応用


 断片化と貼り付けの方法さえ決めれば、カットアップの対象はテキストである必要はない。たとえば、画像ファイルをファイル名やピクセル情報などを元にカットアップしてもいいだろうし、音楽の断片を波形やMIDI情報などを元にカットアップすることもできる。
 音楽はむしろサンプリングやカットアップではテキストをはるかに追い抜いている感があるが、カットアップの自動生成とその後選択に関してはまだいくらかやることが残っているはずだ。
 あるいはWWWページをタイトル名や内容を元にカットアップすることも可能だろう。

 動画が手軽に扱えるようになった現在では、オンラインムービーのカットアップも可能だろう。QuickTimeなど多くの動画形式では、プログラムさえ組めばタイムコードを取り出して、特定の時間からスタートさせ特定の時間で停止させることができるし、これを連鎖させることもできる。ひとつのムービーの中を移動したり複数のムービーの中を移動することでカットアップムービーが手軽にできるだろう。ちなみにこの方法は、古くはPeter GabrielがCD-ROM"Xplora 1"で(カットアップではないが)シーンの移動に用いていた。
 最近はMAXなどの音楽生成環境で動画の操作も扱うことができるようになってきた。

 行動学では、マルコフ連鎖を用いた「行動連鎖解析」はけっこう使われている。これは観察される行動の構造を解析する手法だが、もし手元になんらかの行動連鎖のデータがある場合には、それをカットアップして、既製のロボットやプログラム上のキャラクタの行動を生成する方法も考えられるだろう。

 カットアップという行為に影響を受けた解析ソフトも現れつつある。たとえば最近、ジェスチャー解析用に開発された荒川歩氏のExcel用アドイン「mivurix」は、エクセル上で動画の特定の部分を切り出して表をクリックして再生するというスグレモノだが、掲載ページではバロウズの影響を受けたことが記されている。



●次回は、ここではくわしく取り上げなかった、日本語をばらすときの問題を取り上げます。

(March 3 2003)
to the Beach | Cutup index | 第二回へ>>