unedited miniverse

音韻やリズムとAI

パートナーが詩を書いているので、ここ1-2年で詩を読んだり、詩人と友達になったりする機会が増えた。が、しかし、当たり前のことなんだけど、正直なにもわからない。わからないというか、進捗している感じがない。進捗がないとつまらない。進捗させ、詩を楽しめるようになりたい。

……というわけで自分なりに勉強することにした。が、詩そのものについて学ぶ意欲はない。あったらとっくにやってる。そこでひとまず、AIと詩の関係について考えようと思う。AIについては無限に調べたいからナ。

詩のいかにも詩っぽい部分をAIはどのように処理しているか

自分はLLMの原理について、少しは勉強しているつもりである(少なくとも、そう思い込むことに成功してはいる)。AIは文章をトークンという単位に分ける、そして次に来そうなトークンを予測する、つまり人間とはまったく違うやり方で言葉を処理している……的な。w

でもこの仕組みだと、音節や韻律、強勢、ヘンな語順や行をまたいだ構文など、いかにも詩っぽい部分をうまく扱えないのではないか。言ってみれば、一般的なLLMが用いているトークンの単位そのものが詩と相性悪いでは? 今回はそのあたりを勉強したい。

AIに先のような問いを投げかけたら、Ilya KozievとLeonid Sinevによる「Computational Approaches to Automatic Poetry Generation and Evaluation: A Survey(詩の自動生成と評価に対する計算論的アプローチ:サーベイ)」という文献を教えてくれた。サーベイということで、要はまとめ論文である。AIに頼りつつ、気になった箇所をメモしていく。

トークンと音韻は一致しない

まず現在のLLMで一般的に用いられているBPE(Byte Pair Encoding)は、よく一緒に出てくる言葉をまとめてトークン化するというものであり、当然のことながら、音節や音素といった音韻上の単位とは一致していない。そもそもLLMは主に書き言葉で事前学習されているから、各語の音素、音節の区切り、強勢の位置、詩行の韻律といった情報が明示的に与えられているわけでもない。

もちろん、AIは単語の綴りや学習データに含まれる詩などから、文字と発音の関係を間接的に学ぶことはできる。けれどもモデルが文章を処理する単位そのものが音節や音素に対応しているわけではない以上、意味の通る文章をつくるタスクに比べて、音節数や強勢、脚韻を正確に管理するタスクは不安定になりやすい。たとえば、AIに「1行を8音節にして」と頼んだとしよう。1行であれば、AIは実際に8音節の文章をつくることができるだろう。しかし、分量や制約が多くなっていくとその正確さは損なわれていくらしい。

論文のなかでは、Llama 2の7Bモデルと70Bモデルに対して、追加学習や段階的な推論をさせず、一度の指示だけで定型詩を書かせるという研究が紹介されていた。そこでは連の数、行数、各行の音節数などを指定し、生成結果を詩の自動評価ツールで調べたが、行数や音節数、とくに一般的ではない韻律上の制約を安定して守らせることは難しかったという。どちらのモデルでも困難だったので、単純にサイズを大きくすれば解決するということでもないらしい。

LLMの音韻能力を調べた「PhonologyBench」という研究も引かれていた。この研究ではGPT-4、GPT-3.5 Turbo、Claude 3 Sonnet、Llama 2 13B Chat、Mistral 7B、Mixtral 8x7Bの6つのモデルを使って、英語の綴りから発音を推定する課題、音節数を数える課題、韻を踏む単語を生成する課題を試している。音節を数える課題では人間の成績より45ポイントほど悪かったそうだ。

(それでもFable 5先生ならやってくれる……というような話なのか、やってくれたとしても上記の問題は根本的に解決していないんだと思うけど、問題が起きないならいいじゃんって思っちゃう。要するに、あんまりよくわかっていない)

異なるトークン化の方法

こうした問題を克服するために、詩の自動生成では、通常とは異なる単位でテキストを扱うという方法が試されているらしい。トークンを文字単位にすれば、各行の頭文字をつなげて違う言葉をつくる折句(アクロスティック)や造語を扱いやすくなる(中国語のように文字単位が大事な言語の場合はいろいろと捗るそう)。あるいは音節単位にしてしまえば、定型詩の音数を直接管理しやすくなる。音素単位なら、綴りではなく実際の発音にもとづいて韻を扱えるようになる……などなど。

しかし、どの方法にも問題があるようだ。文字単位だと同じ文章を表すトークンの数が増えて、計算量やメモリ消費が大きくなってしまう。音節の場合、区切り方は言語によって違うので、言語ごとに専用のAIが必要になる。音素だけで文章を表すと、同じ発音をもつ別の単語を区別しにくく、通常の表記に戻すことが難しい。人間であれば、音節の問題はなんとなく音読して解決できる。けれども、当然のことながらAIはそうではない。音節分割、強勢辞書、品詞判定、脚韻検出といった複数の処理へ分解しなければならないというわけだ……。


……というわけで(?)、ほかにもいろいろなトピックを扱っている論文なんだけど、疲れたので終わりです。次はもうちょい実作っぽいところを調べたいと思っています。