この記事は創作+機械学習 Advent Calendar 2022 の 25 日目の記事です。ところで今は 2022 年 12 月 31 日です。おやぁ。
遅刻しておきながら、実際に計算機を回したりしているわけではない、ある意味少し的はずれな記事内容になってしまい申し訳ありません。一方で、比較的ユニークな話題をこのアドベントカレンダーに持ち込むことができるように努力したので、楽しんでいただければ幸いです。
なお、昨年度は 『架空世界の表意文字用の手書き文字認識を実装したい (part 1)』という記事で創作+機械学習 Advent Calendar 2021 に参加したのですが*1、今年の記事の内容はこの去年の記事と関連があるので、そちらも合わせてお読みいただけるとさらに楽しめるかもしれません。
以下常体で書きます。
- 想定読者層
- 言語は一様乱数列ではない
- 拡散モデル
- え、文章生成 AI はもうあるよね?
- どういうこと?
- 我々はどのようにして言語を作っているのか?
- 我々はなぜ言語を作っているのか?
- 拡散モデルが言語創作をしたら
- 絵と言語創作は何が違うか
想定読者層
以下のうちのどれかに当てはまる人。
- 人間が話す言語に興味がある人
- 機械学習、特に拡散モデルによる絵の生成に興味がある人
- 細かい設定を詰めた創作が好きな人
言語は一様乱数列ではない
言語は一様乱数列ではないということはマジの太古の昔から知られてきた。1843年に発表されたエドガー・アラン・ポーの小説「黄金虫」には、主人公が暗号を解読するのに、英文に登場するアルファベットは t や e がやたら多く z や x はかなり少ないという性質を用いる描写があり、この事実が人口に膾炙するきっかけの一つになった。また、言語を構成する要素の使用頻度の分布自体にも、20世紀前半の言語学者ジョージ・キングズリー・ジップが「ある言語で n 番目によく使われる単語は、一番使われる単語の n 分の 1 程度しか登場しない」という法則を発見した。
とはいえ、抽象的な話だけしていても面白くないので、読者にとって身近であると推察される日本語を例にして説明しよう*2。
日本語(の標準語)*3の文の音韻的構造を記述できる非常に雑 (crude) なモデルを紹介すると、
const 子音候補 = ["", "k", "s", "t", "ts", "n", "h", "m", "r", "w", "g", "z", "d", "b", "p", "f"];
const 母音候補 = ["a", "i", "u", "e", "o", "ya", "yu", "yo"];
const 特殊モーラ候補 = ["", "ん", "っ", "ー"];
とでも定義したとき、
- 「子音+母音+特殊モーラ」が繰り返され、「アクセント句」が作られる
- アクセント句の中の 1 個または 0 個に「アクセント核」が付与され、「アクセント核」より後からジェットコースターのように一気に音程が下がる
としてやると、日本語の音声*4をそれなりに表せるモデルになる。
具体例を挙げると、「ちょっと相談がありますので」という文は
(画像は OJAD - オンライン日本語アクセント辞書 を用いて生成)
というような構造になっているので、これを
と分析してやることで、先程のフォーマットに当てはめることができる。以下、これを略記して「ちょ]っと そーだんが ありま]すので」のように表すことにする。
さて、このフォーマットにだけ従って、残りを一様乱数で埋めるとどうなるだろうか。日本語になるだろうか。やってみよう。
- ぴょべ] でゅーせ]ー たんてぃっしょっよ]ん びゅぴ]っひょんうぃゃんばっ のっうぃゅんじゃふゅんふゃ]ー
- きでぃゃ]ーひょ ふぃっぎゃ]っぎゃーうぉっし うぃゃーひょ] げんふぁず]ん みょ
- ちゃーな]ー さーほ でぃゃん めーつぃゃじゃ]ってっぴーせー うぃゃちょーめ]ーぬっ
知 っ て た。
RGB にランダムな値をセットしたものが絵と呼びうる代物では到底無いのと全く同じように、フォーマットにだけ従って音素をランダムに並べたものは到底人間の話しうる言語ではありえない。
「RGB にランダムな値をセットしたやつ全体の集合」の中の非常に小さい部分集合のみが絵と呼びうるのと同様に、「フォーマットにだけ従って音素をランダムに並べたもの全体の集合」の中の非常に小さい部分集合のみが、人間の話しうる言語として plausible でありうる。
さて、ここまでお膳立てをすると、私がなんの話をしようとしているのか察することができる方も多いであろう。最近世間をとてつもなく賑わせて久しい、拡散モデルによる絵の生成である。
拡散モデル
「言語に詳しいが、機械学習とかにあんま興味を持ってこなかった」という人もこの記事の想定読者に位置づけているので、雑に拡散モデルというものの紹介をしようと思ったが、書くのが面倒になってきたので、人様の記事を丸々引っ張ってきて紹介とする。
同様のことが言語に関してもできてくれないかな〜、というのが、この記事で私が一番言いたいことである。
え、文章生成 AI はもうあるよね?
もちろん。私が求めているのはそれではなく*5、
「語彙・文法現象・例文・その言語ならではの特性を生かした文学」とかを内部一貫性を保った形で持った、「いかにも人間が話しそうな」言語が創作されること
である。
これに関して、ともに言語創作をしてきた Μίττον(みっとん)に感想を求めてみたところ、以下のような返事が得られた。
文章生成 AI って言語構造にただのりしているからなぁ。我々は言語という制度の体系を作りたいのであって、文章生成 AI が書いてくる日本語や英語の文章という『既存制度にうまく適応した例』でしかないものは、おもろいが、おもろいだけという気持ちになる。多分この世には『お絵かきAI、美術史上の動向に乗っかることはできるだろうけど、今のところ動向を作れそうにはないよね』とか言っとるやついるだろ。
どういうこと?
さっき貼った「一様乱数列な日本語」を録音してくださった id:yuchiki1000yen が非常に上手く記事にまとめてくださっているので、まずそれを引用すると、
ということで、私は、この記事で登場するバート語という言語を(他人から引き継いで)創作している。
他にも、その言語が話されている(という設定の)文化圏で広く遊ばれている(という設定の)ボードゲームのオンライン対戦を実装したりなどしているが、それは今回の記事にはそんなに関係ないので、過去記事を参照されたい。
さて、先程「内部一貫性」という単語に言及した。創作をする上でそれなりにこだわっているポイントなので、もう少し詳しく具体的に述べていきたいと思う。
たとえば、知り合いのこういうことをツイートしているような人に、
一応社会性というやつを持ち合わせているので会話でタリバンという単語が出てきたときに「あっこれはアラビア語の √ṭ-l-b の行為者名詞 “追求する者,学生” を意味する ṭālib を借用してパシュトー語の複数語尾をつけたやつ」とか言ったりしない
— 🍨卵生 Мороже💣 (@Morojenium) 2021年8月17日
「今年中に記事を書きたいので今から2時間半以内に語源を遡ってこうこうみたいな話をしたためてください」という無茶ぶりを頼んでみたところ、
こんにちは,Мороже です。僕はポケモンというゲームを少し触れています。ところでポケモンというゲームは日本で購入してもセーブデータを作成する前に言語を選択することができ,勉強になるかなぁという思いでORAS以降のポケモンを全てドイツ語でプレイしています。
さて,シャンデラという名前の通りシャンデリアを意識したようなデザインのポケモンがいるのですが,これのドイツ語名は Skelabra です。シャンデラはゴースト・ほのおタイプのポケモンであることを踏まえると,Skelabra はドイツ語 Skelett「スケルトン」とラテン語 candēlābra(pl.) < 単数形 candēlābrum「枝付き燭台」をミックスしたものだと思われます。みなさんご存知の天井から吊り下げる「シャンデリア」はこのラテン語 candēlābrum /カンデーラーブルム/ からのフランス語 chandelier /シャンデリエ/,からの英語 chandelier /シャンデリア/ に由来するカタカナ語ですね。つまりシャンデラと Skelabra はその見た目に反して同語源の単語をそれぞれネーミングに含んでいることが分かるわけです。
カンデーラーブルムがシャンデリエになった経緯の背景として,ラテン語の /ka/ の音が古フランス語(9 世紀ごろ)で /t͡ʃa/ (チャ)になり,数世紀かけて /ʃa/ になったことが知られています。音変化というのはある程度規則的に起こるものであり,もっと別の例を挙げることもできます。
・「シャルル」というフランスの人名がありまが,これは Charles と書き,ラテン語 Carolus /カロルス/ に由来します。Charles は同じスペルのままで英語でチャールズと読めますが,これは英語くんがフランス語側で ch の発音が /t͡ʃ/ だった時代にこの語を借用してきたことの名残ですね。
・「オーシャンゼリゼ」の歌で知られるシャンゼリゼは les Champs-Élysées と書きます。Élysées の部分は古典ギリシャ語 Ἠλύσιον エーリュシオン「ギリシャ神話の死後の楽園」で,champ は「野原」です。元となったラテン語は campus /カンプス/ で,これはコクヨの Campus ノートや,大学構内を表す英単語 campus およびそれ由来のカタカナ語「キャンパス」でお馴染みですね。野営地を表す英語 camp もラテン語 campus に由来します。
シャンデラに少し話を戻すと,ラテン語 candēlābrum 「枝付き燭台」は candēla 「蝋燭」から来ていて,英語 candle「蝋燭」はここに由来しています。光度のSI基本単位であるカンデラ(記号 cd)もこれですね。
ついでなのでヨーロッパから離れて東南アジアの言語の話もしましょう。タイ語では,月曜日のことを วันจันทร์ /ワンチャン/ と呼び,วัน /ワン/ が日,จันทร์ /チャン/ が月のことです。ところでタイ文字をやったことがある人は分かるかもしれませんが,จันทร์ という綴りにはなんと /t͡ʃandr/ と書いてあり,最後の dr という部分にはガーラン (การันต์) という黙字記号(←語源を表しつつも発音を表すための優良システムです。英語とかも採用してくれないかな〜)が付いています。というわけでタイ語 การันต์ /チャン/ はサンスクリット語 चन्द्र /チャンドラ/ 「月」に由来するわけなんですが,これは原義を辿ると「光るもの」であり,ここでさっきのラテン語の蝋燭 candēla(< candeō「光る」の名詞形)との繋がりが見えてきますね。先ほどフランス語の話で述べた /k/ > /t͡ʃ/ の変化がサンスクリット語でも起きていることも確認できます。サンスクリット語とラテン語が共通の祖先「印欧祖語」を持ち,さらにタイが仏教圏であるためにサンスクリット由来の借用語を大量に持つおかげで,タイ語の「月曜日」とポケモンのシャンデラが回り回って繋がるの,とても面白くないですか?
(以上: https://nitrone7.hatenablog.com/entry/2022/12/15/210832 に書いた文からいろいろ加筆)
ところでこの文章は「今年中に記事を書きたいので今から2時間半以内に語源を遡ってこうこうみたいな話をしたためてください」と hsjoihs さんにいきなり言われて急ぎで生成したものです。無茶振りか???
という記事を書いてきてくれた。すごい。マジでありがとう。
こういう風に、「語源を追いかけていくことで、数多くの言語が回りまわって繋がっていく」という話を何時間でも続けられるような我々が、こういう部分にまでこだわって言語を創作すると、わりと同様の解像度で我々の創作した設定について語れるようになるのである。
こういうオタク語りが無限にでき、しかもそれが実在の言語についてできるオタク語りと同様の質であってほしい*6、というのが、私が述べた「内部一貫性」の意味である。
我々はどのようにして言語を作っているのか?
「言語を作っている」という話をすると、「言語なんていったいどうやったら作れるんですか?」と訊かれたりする。絵を描いている人や曲を作っている人に対してはあんまりこういう質問が来ているのを聞いたことがない*7が、私にはしょっちゅうこういう質問が来る。
ただまあ、人間がどうやって絵や曲を生み出すかを考えれば、答えはおのずから明らかであって、
要するに、雑に要約すれば「たくさん入力を入れ、なんか手を動かすと、それなりにいい感じの出力が得られたりする」といういつもの話になるのである。
ということで、我々が言語を作るようなプロセスは、具体的には以下のとおり。
1. 手動で語学書とか言語学論文とかを読み漁って「言語ってこういう挙動をするのか〜」というデータセットを脳に蓄える。
過去記事を引用すると、
こういう作業をし、いろんな言語を見て、「言語ってこういうことをするんだな」というデータセットが脳内に構築されると、それをもとに新たな言語が作れるようになったりするのである。
ただ、機械学習の界隈においても「画像生成 AI が白人男性の顔ばかりを生成してくる」という話が問題になったのと全く同様に、日本において知名度のある言語の多くが西欧的言語であるというサンプリングバイアスにも気をつけねばならない。
つまり、「西欧の付近では共有されているがそれ以外の地域では全然発生しない、言語全体を通して見たときには稀な現象」*8 を強く拾いすぎてしまうと私の目的に合わないので、そういうのに気をつけるために、私に直接的な経済的利益をあんまりもたらさないような言語を幅広く学び、質の良いデータセットを作るというモチベーションが発生する。
2. 脳に蓄えた天然学習済みモデルからゆっくりと滴り落ちてくるものを全部かき集めて陳列する
大量のインプットを入れると、なんかいい感じに少しずつアウトプットが得られるので、それをかき集めて陳列していくことで、創作が進んでいく。私の場合は、ここに陳列してある。
試しにブラウザの印刷ダイアログで印刷してみようとしたら、122 枚あった。びっくり。そんなに書いたのか。
3. 人がそれを読んでなんか理解が生え、創作した言語が使用されていく。
世の中には、語学書をたくさん読んできたがゆえに、文法と語彙とそれらに関する考察が陳列されていると、そこから言語を学んで文章やら詩やらをサクサク書けるタイプの人類が存在する。なんなら私もそういうタイプの人類である。
ゆえに、そういう人の前にこういう情報を見せると、なんなら 6 ~ 7 時間ぐらいの学習時間で理解が生え、創作自然言語で書かれた既存文章を読解できるようになったりするのである。
これまた Μίττον(みっとん)に訊いてみたところ、
この感想は、私がラテン語だのサンスクリットだの割と語形変化の複雑な言語をまあまあ不親切な教科書で習得するのを強いられるのが割と好きで、かつ数学科とかいう、ある意味で一生語学をしているような専門だから出てくるものなのかもしれませんけど、人の陳列棚を眺めていると、そこから背後にある言語を割と復元できますよね。
と言われた。
私としても、私の創作した言語でみっとんが普通にいい感じの詩とかを書いてきたことにびっくりし、リパライン語でこのような詩を書いたりした*9。
4. 言語を運用して集積していると、創作者本人も気づいていなかった言語現象がどんどん観察されていき、記述が増えていく
我々が普段話す日本語の細かい文法についてすらすらと精細に記述できるわけではないのと同様に、
母語話者に自言語に対する抽象的説明を求めるのは一般に酷で、例えば「『しなかった』と『していない』の違いってなに?」って訊かれて↓のような条件分岐を述べられる日本語母語話者はまあ皆無といって差し支えない https://t.co/2mjeMlbvvy pic.twitter.com/CHzcrAB7zi
— hsjoihs (はすじょい) @ 12月18日から東京 (@hsjoihs) 2020年5月28日
一旦言語を作り始めて運用してしまったが最後、別に文法書に書いて明示的に設定したわけでもないのに「なんかこれはこうやって言うのが自然な気がする!」「たしかに文法書を読むとそういう言い方もできそうに読めてしまうけど、それは超絶不自然。そんな文構造は無理!」といった直観が勝手にニョキニョキ生えてくる。
こうなってくると、「言語を作っている」というよりも、母語話者に『この文って言える?言えない?こういうこと言いたいときってどうやって表現するのが一番自然?』という調査を行ってそれを記述していく、言語学者の中でもフィールドワーカーと呼ばれる職種を体験しているような気持ちになる。
(本職のフィールドワーカーとはどのようなことをする人か、に興味がある方は、古本 真『第1回 フィールドワーカーの苦悩:フィールド言語学とは何か』などをご参照あれ)
我々はなぜ言語を作っているのか?
これもまあ、絵を描いたり作曲をしたりする人たちがそれらの行為をするのと同様の理由であり、私の場合は以下の通りである。
とはいえ、今まで長々と語ってきた内容から容易に推察されるように、言語を作るのは普通にめちゃめちゃめんどくさい。ゆえに、ゆったりまったり作っているといつまで経ってもあんまり進まない。もちろん着実に育っていってはいるのだが。
ところで、最近のお絵かき AI の台頭により、私の言語・言語創作アカウントの方の TL でも「AI が言語創作をするようになってきたら」みたいな意見を見かけた。
人工言語が一大産業の世界で私がプロの人工言語作者だとして人工言語を生成するAIが登場したら、私はどう思うんだろう。
— Ziphil “Ziphineko” Shaleiras 🐈 (@Ziphil) 2022年8月30日
AIが人工言語、架空世界の次元までやってきて、一瞬で文法も語法も語彙も整った人工言語を出力できるようになったり、科学的な整合性の取れた(取らずにフィクション満々の世界を出すこともできる)架空世界を出力できるようになったら、私は恐怖と落胆を感じるでしょう。
— Kainex (@lenqeetaszaves) 2022年10月11日
それは、私がレーゲン語や人工世界の創作に費やした時間や努力そのほか諸々に対する否定だからです(感情的に言えば)。
— Kainex (@lenqeetaszaves) 2022年10月11日
私はAIイラストに対して肯定的な見方をしていますが、これは、飽くまでも、イラストは私の努力するところではなく、距離と保って見ることができるから、というだけにすぎません。
まあこういう意見に私が全く納得しないかというとそういうわけではないが、一方で 6 年間もうだうだやっていると「途中まで言語作ったから、あとはその間を納得行く感じに埋めておいていってくれないかな」という気持ちがだんだん強まってくるのである。
拡散モデルが言語創作をしたら
拡散モデルで言語創作が行われるなら、それはどのような作られ方となるのであろうか?
今までの絵が、「人がストロークを一つ一つ書いていき、それを重ね合わせることで作られていた」のに対して、拡散モデルによる絵というのは「絵とは呼べないノイズから、ノイズでない部分だけを残す」という作り方によってできている。なので、これの創作自然言語版ということは、「長大な一様乱数列をまず用意し、そのうち『言語と呼べない部分』を削り、言語な部分を残す」という作り方になることだろう。
さて、手元の「現代ヘブライ語辞典」は 30 行 2 段組、1 行 18 字の日本語で 488.5 ページあり、「約 17,000 語を収録した」と書いてあるので、30 * 2 * 18 * 488.5 = 527580 文字の和文があるということになる。和文で使う文字なんて JIS 第一水準ぐらいあればだいたいなんとかなるだろうし、1 文字辺り 12 bit ぐらい割いてやればよかろう。ということは…
え、そんなもんか。800 キロバイトの一様乱数列とか普通に既存手法の拡散モデルが扱ってるようなサイズなのでは。それを上手いこと「辞書」へと変えていけば約 17,000 語を収録した辞書になる、と考えると、私が長々と語ってきたこの妄想も実現そんなに遠くなさそうかもしれん。
ところで私が造語をするときの方法の一つに、「非一様乱数列を引いてみて、『この語形はこの言語に合わない!』と直観的に判断したものを除き、『まあこの語形ならいいんじゃない?』となったものを採用する」という過程がある。
この感覚はないなぁ。ある程度育ってくると「この体系にとってこの語形は受容されづらいだろう」「これは語形が短くなりすぎるし、複合語内に痕跡的に残るだけなんだろう」とか自然と思い浮かぶけど、響きの良さを目的にしているというより「合わない語形を言語くんが勝手に排除し始める」感覚なのよね https://t.co/w4aax94PuV
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2022年10月26日
これをやることで plausible なものが作れているという実体験から、「乱数列のうち、気に入らない部分を捨てて言語とする」を全てにおいて適用してドカッと言語を作るのも、わりといけるんじゃないか、と妄想している。
これに対しての Μίττον(みっとん)の感想は以下の通り。
なんなら語形に対する直観もなぜかある程度伝播するからな。たとえば、前に私が akuti という単語の同根語をバート語に作ろうとしたとき、一瞬 akat という語形を提案したいと思ったが、「バート語はこれほどに短い単語を嫌う」という直観が働き、ághat という語形を提案することができた。こういう直観が学習できるの、非直観的。
なんか『かなり初級の学習者でも、【この単語はこの言語にはないだろ】というのは直観的に判断できるらしい』という論文を昔見た覚えがあるが、出典失念。
絵と言語創作は何が違うか
絵や小説といったものは大量にインターネットに放流されており、また絵ならピクセルの並び、小説ならコードポイントの並びという、その最もプリミティブな形に関しては非常に機械に扱いやすい形としてインターネット上に放流されているし、それを生産する人も消費する人もおびただしい。一方で、私の脳内のデータセットの元になっているものというのは、
- paywall の向こう側にあったり一般公開されていたりする大量の書籍や論文
- 人に語学を教えることが目的であって、別に言語の包括的な記述を試みているわけではない雑多な情報源
- 同様のデータセットを構築することに興味がある同好の士(言語創作者に限らず、言語類型論という分野の研究者も比較的近いところにモチベがある)がまとめてくださった様々な情報
- 実際に私が自分で既存の言語の統計を取って分析して curve-fit したもの
- 似た趣味のやつらと何十時間何百時間何千時間と Discord 通話して得られた様々な断片的情報
といったごった煮であり、このごった煮にはまとまりもなければ、「私もやってみたい!」という人々の興味もあんまり引けないような代物である。
また、絵は、生成しておけば人間側が勝手にいい感じに解釈してくれる(うれしい)。一方で、言語は、その言語での文だけ生成しても面白くなくて、そこに既知言語での解釈がついてこそ、そしてその解釈が文法構造を成していて内部的一貫性があってこそ、その言語は言いたいことを何でも言える無限(文字通り無限)の可能性を秘めた存在となるのである。
なお、余談だが、「その言語での文だけ生成しても面白くな」いを如実に表す例として、私は「特に意味のない韻律詩書くか〜」とある日思い立ち、韻律詩を無から数千行吐き出している。
「特に意味のない韻律詩書くか~」と思い立ったのが一年前。それからというものの、電子機器持ち込めない状況が発生するたびにコピー用紙にひたすら謎の音素列を書き連ねた結果、気づけば無意味な dactylic tetrameter がなんと1518行も書かれていた(全文は https://t.co/kggTB1mIny に置いてある) pic.twitter.com/gJ1UEm7a3C
— hsjoihs (はすじょい) @ 年度末まで低浮上 (@sosoBOTpi) 2021年9月28日
また、既知言語であっても、意味が無だとこれまたあんまりおもしろくないということを示す例として、昨年「一億総教祖時代を強力にサポートするための、お手軽聖典作成技術」( https://zenn.dev/hsjoihs/articles/2dd0287e32a982 ) と称して、「言語と呼べないような乱数列を機械翻訳にぶち込むことで、言語としての体裁だけは整っている代物を吐き出す」という実験を記事にした。
終章 男 vs. 警備員
流石に人の痕跡があるもので、休憩から同じ長い時間のプログラマーと家系の影に言及しながら食べるために、両方のローンを取る貸主の後に大きな手放すものですが、いくつかは、久保で合計を与える。作った。自衛官って、自分から数人のパーティーみたいなものだよね。最初は真ん中の方にあります。2つは、ヨーロッパの細かいシャットの人々の2つの裁判官は、理解を放棄し、彼らは販売時にチューニングされています。建てられたラインから、コミュニティに群がる小さな雷鳴が疑惑の日が続く中でチャンスを叱り、それを混ぜ合わせた。
ということで、私は拡散モデルが流行る前から「一様乱数列を加工して、それを『人間の話しうる言語として plausible である代物』という小さなサブセットに落とし込めたらうれしいのになぁ」と妄想し続けていたので、その妄想が(絵という、私が全然慣れ親しんでいない分野ではあるが)大いに流行り世間の話題を動かしているのはおもろいなぁと、勝手に思っているのである。
*1:xbar_usui 賞をいただけました。ありがとうございます。
*2:機械翻訳でこの記事を読んでいる非日本語話者がいたらすまない。
*3:本当は「標準語」というより「共通語」と言いたいのだが、この記事の想定読者には「標準語」と言わないと通じない可能性があるので、分かりやすさを優先する。
*4:実は「音韻」
*5:私も創作をする上で現状の文章生成 AI には既にだいぶお世話になっていますけど
*6:要するに、全ての単語が全ての単語と語源的つながりがある、というのもまた現実的ではないよね、というだけの話
*7:「どういうツールを使って曲を作ってるんですか?」といった質問は頻繁に発生しているのだろうが、「曲を作るなんて……いったいどうやって!?」という点を疑問に思って問う人は見たことがない
*8:ここらへんの話はStandard Average European で調べるともっと詳しく出てくる