AI法廷の模擬裁判 技術的な演出について 中性的な合成音声、PV、ビジュアライザ、あくまでも非本質の話
初めに
5/13に開催された五月祭企画、AI法廷の模擬裁判にてPV動画、ビジュアライザ、AI裁判官の発する合成音声、配信オペの一部を担当しました。
chatGPT4に裁判をやらせる東大五月祭企画「AI法廷の模擬裁判」のPV制作を担当しました! 本番もいくつか僕の仕事が出るので、都合よろしければ、ぜひ見に来てください!! https://t.co/D2oCeKwiaT pic.twitter.com/YEAl4QDM2b
— 避雷 (@lucknknock) 2023年4月28日
こちらビジュアライザと音声合成システムの開発、当日の配信オペの一部を担当しました アーカイブ観れますので、よろしければぜひ
— 避雷 (@lucknknock) 2023年5月13日
安田講堂デカビジュアライザ https://t.co/lAArnNSFgz pic.twitter.com/KdYg7HYb6g
NHKなどに取り上げられるなど、非常に盛況だったらしいです。よかったですね。
僕が作ったビジュアライザもニュースに載ってます。
この企画の本質はキャッチコピー「機械に人は、裁けるか」にもあるようにAI(ChatGPT-4)をプロンプトエンジニアリングによって裁判官に仕立て上げて、AIが論理的な判決を下すことができるのかを演劇の形式で実験する、という点にあります。そのため今回僕が担当したビジュアライザやPV、合成音声はこの企画における非本質部分となります。
本質の方が非本質な部分よりも議論されることは極めて当たり前の現象である一方で、このような非本質な取り組みに関しての議論に全く価値がないかというとそんなことはなく、いつか誰かのうちに生まれた「伝えたい本質」をより多くの人に届けるための(非本質な)手段について記録に残しておくことにはきわめて大きな意味があると考えています。
しかし残念ながら、他者の非本質な取り組みに対して熱心な姿勢で議論や記録を行おうとする人間は極めて少数であるため、その非本質的な要素を記録する役割は非本質的な取り組みの動作者その人に委ねられることになります。
というのは建前で、結構テクいやつやったんだけど客層が普段と違うせいで全然ウケなかったことを全部自分で解説することにします。
中性的な合成音声を作る
裁判官をAIで作られた「機構」であるとみなした際に、性別、発話者の個性などの概念は不要であると考えた我々は、中性的・無個性な合成音声*1によって裁判官を表現することを試みました。
技術選定の過程でいくつかの合成音声ソフトウェアと、hugging faceなどにて公開されている学習済みモデルを用いたtext-to-speechを試したのち、いくつかの問題がありそうということがわかりました。
問題1.適切な合成音声ソフトウェアの不在
AHSの開発するVOICEROIDに代表される既製の音声合成ソフトウェア(総称チェボボボココガやトウェアトなどと呼ばれる)はプロの声優によって収録されキャラクタの情報(名称、設定、キャラデザインなど)とセットで販売される都合上、強い個性を持っているものが多く、仮に中性的な音声と称されているパッケージであっても、強い個性を持っているという問題がありました。
要するに聞く人が聞けば結月ゆかりは結月ゆかりだし琴葉葵は琴葉葵だし春日部つむぎは春日部つむぎだとわかってしまうという話です。
また、Googleなどの(特にキャラ性を売りにしていない合成音声ソフトウェア)でも、中性的な音声というのは見つけることが出来ませんでした。
問題2.text-to-speechにおけるアクセント問題
素朴なtext-to-speechでは、テキストから最もそれらしい音素列や韻律などを生成することで音声波形データを生成します。一方で人名のアクセントや法曹用語については、一般的なデータ(日本語の発話全体)から計算される確率分布を無条件で信用することはできません。例えば「共犯」という単語は通常「きょう↓はん↑」と読むと思うのですが、法曹は「きょう↑はん↓」と読みます。ものすごく雑に主張すると、人類のうちほとんどは「きょう↓はん↑」と呼んでいるため、確率の高い読みを採用する機械学習モデルでは何らかの手段で事前分布の指定することなしに「きょう↑はん↓」という出力がなされることはないと考えられます。そのため、何らかの手法を用いてアクセントを指定できるシステムが必要となります。
生成音声を中性的な声質に変換する
以上のことから、一括でテキストからアクセントなどを指定しつつ中性的な音声を生成するという全ての条件を満たした仕組みを作るのは難しいと考え、中性的な音声を生成する手法として、通常の音声合成を行ったのち、声質変換を通して中性的な音声に変換するというアプローチをとることにします。
まず、アクセントを指定可能なtext-to-speechの訓練済みモデルとして、kan-bayashi(https://github.com/kan-bayashi)氏のespnet/kan-bayashi_jsut_vits_accent_with_pause · Hugging Faceを採用しました。 実装としては以下の記事を大いに参考にさせてもらいつつ、辞書式でアクセントを一括修正出来る仕組みを作っています。
text-to-speechを利用して生成された音声データは、この時点では「有」性的*2なものです。中性的な音声合成を実現するには、何らかの手法でこの声を中性的なものに変換する必要があります。
発話内容を維持したまま、話者の持つ声の「個性」(以下、声質・話者性)を異なる話者のものに変換する技術のことを声質変換と呼びます。
基本的には発話内容を示す特徴量と声質を示す特徴量をうまく分離したのち、声質を示す特徴量のみを挿げ替えることによって声質変換を実現するというのが昨今の多くの手法に共通するコンセプトになっており、最近だとvits*3をベースとしたmany-to-many声質変換や、Retrieval-based Voice Conversion(以下RVC)によるany-to-many声質変換が話題になっている気がします。
以下に、上記の合成音声を中性的な音声に変換するために行った実験について記します。
実験1.StarGANv2-VCを用いたany-to-many voice conversion
StarGANv2-VC*4はMany-to-Many Voice Conversionの手法として知られているアーキテクチャの一つです。
StarGANv2-VCは系譜としてはCycleGAN*5→StarGAN*6→StarGAN-VC*7→StarGANv2-VCと進化してきたモデルになっています*8。StarGANは一対一変換であったCycleGANを多対多に用いる場合、変換対ごとにモデルの学習が必要となる問題に対して提案された手法です。 変換先idを変換器に渡すことで一つのモデルで複数の話者間の変換する手法であるStarGANはもとは画風変換のために提案された手法なのですが、同様の手法が声質変換にも応用可能であるとして提案されたのがStarGAN-VCとなります。
これに対し、さらに話者idという離散的なラベルを話者の特徴それ自体を表すベクトル表現(Style Vector)に置き換えることで、より多様な声質変換を実現可能にしたのがStarGANv2-VCです。
ごちゃごちゃ述べましたが、StarGANv2-VCというアーキテクチャの特徴として今回重要となるのは、以下の二つになります。
- 声質変換の学習と同時に音声とStyleVector(話者性をベクトル空間に埋め込んだもの)の変換(Style Encode)を学習させる
- StyleVectorはベクトルであるため、和積の演算を行うことが出来る
したがって次のことが言えそうです。
- 十分な広がりを持った話者群を学習させると、未知の話者の音声に対してもある程度良い音声-StyleVector変換が可能である
- 十分な広がりを持った話者群を学習させると、StyleVectorをベクトル空間上で合成することによって話者性の合成を行うことが出来る
つまり、十分な話者数をStarGANv2-VCに学習させ、ある程度の質の良いStyle Encoderを生成し、相当数の話者から抽出したStyleVectorの平均をとれば中性的な音声が得られるはずです
上記の仮説に基づいて、jvsコーパス*9の40話者を対象に、StarGANv2-VCを1200Epochほど学習させたものが以下になります。
音質はいまいちですが、中性的な音声を作るという目的自体は達成しているように聞こえます。
実験2.RVCにおけるモデルパラメータの合成
こちらは本番の1週間前くらいに、本企画のシンポジウムに参加してくださった安野貴博(https://twitter.com/takahiroanno)氏がブログで音声変換の記事*10をアップされてて、「StarGANv2-VCなどの古いアーキテクチャ*11使ってたら刺されんじゃねぇかな」と思って大慌てで検証した実験になります。 Retrieval-Based Voice Conversion*12はつい最近出てきたvitsベースの声質変換アーキテクチャになります*13。こちらについては僕もまだ全てを理解できていないのですが*14、事前学習させたモデルに対して任意の話者を対象に追加学習を行うことで、比較的高速で任意の話者からその話者への声質変換を学習する、という手法になっています。
Retrieval-Based Voice Conersionのアプリケーション的な特徴としてはモデルパラメータの合成を行う仕組みがある、という点があります。コードを読むと二つのモデルに対し単純に重みを線形補間しているだけに見えるのですが*15、これがかなり良いふるまいをします。*16これを使って男女の音声を混ぜれば、中性的な音声の生成が可能であると考えられます。 以下は後述する方法で選ばれた4人の話者を合成して作られた中性的な音声となります。
StarGANv2-VCで変換した音声に比べて音質が極めて向上しているのに加えて、目的であった中性的な音声の生成にも成功しているように聞こえます。
最終的に採用した手法
RVCの性能が非常に高かった点と、RVCの検証時点ですでに40話者分の学習を行ったStarGANv2-VCのモデルが存在していたことから、最終的には次のようなプロセスで合成音声を生成しました。
kan-bayashi_jsut_vits_accent_with_pauseを用いて音声合成(text-to-speech)
StarGANv2-VCを用いて40話者の間の声質変換を学習、40話者の中からランダムに男女話者2人計4人を選択し、それに用いてサンプル音声の声質変換を行う。それを100パターン用意する。
3.100ペアのうち良いものを選び、それらの話者についてRVCで再度学習を実施し、RVC版中性音声変換モデルを合成する。
4.合成したRVC版中性音声変換モデルで生成した手順1で生成した音声を変換する。
ということで実験も含めてそれなりにテクニカルなことをしたのですが、ちゃんと伝わっているのかは非常に怪しいです。悲しい。
PVの話
主にBlender,Houdini,AfterEffectsを用いて制作を行いました。イケイケの音楽はMaqμin(https://twitter.com/imodanshaku252)さん作曲です。AfterEffectsのプラグインに非常に救われた回でした。ありがとうpixel sorter2。個人的には危機契約PV*17ごっこが出来て楽しかったです。
お気に入りのシーンはコレです。
神経突起の成長をモデル化したもの*18をHoudiniでシミュレートしています。
また、以前からちょっとした交流のあったVtuberである山田コノハ(https://twitter.com/Yamada_Konoha88)さんに、冒頭の音声をお願いしました。コノハさんは歌ってみたの選曲や実況するゲームのチョイスが最高のセンスで前々から一緒になんかやりたいなと思っていました。この機会を活かせたのはよかったです。
ビジュアライザの話
ビジュアライザはUnityのHDRPで生成しました。 テクスチャのそれぞれをsubstance designer*19で生成した後VFXグラフにブチ込んでいます。 オーディオリアクティブな一部要素を覗いてVFXGraph内で完結させることが出来ています。VFXGraphは割と自由度が高くてうれしいですね。
合成した音声の再生UIなどもビジュアライザ内部に仕込んであり、配信時はそれに合わせてポチポチやっていました。 先週のVJの時も同じなのですが、昨年の秋ごろからfuqunaga(https://twitter.com/fuqunaga)さんのRosettaUI*20使っています。RosettaUIはコードベースのUI生成システムとして非常に使いやすく、重宝させてもらっています。
配信前日/当日
まず前提として、安田講堂の配信技術者に対する「人権意識」は極めて低く、前日リハ25分、当日設営15分(???)という異常にタイトなスケジュールで配信カメラ数台、配信機材、プロジェクタに投影するビジュアライザ等のセットアップを強いられました。
狂うぜ、せめて一度はランスルーさせろ。準備段階から配信に一緒にかかわったとろくま氏(https://twitter.com/torokumakun)と氏の所属するサークルのメンバー*21の辣腕によってかろうじて何とかなったのですが、過去一異常な現場だろ、というのは双方の合意するところだと思います。
本当に配信に成功したのは奇跡以外の何物でもないのですが、このヤバさを同業以外に伝える手段が無いのがかなしい… というかマジで限られた時間でカメラ運んで配線済ませて配信開始した彼らの異常な優秀さを布教したいです。雑に裏方で済ませて良い活躍度じゃないだろ。
あと当日にOBSのモノラル設定しないと片耳からしか音声流れない仕様教えてくれた実行委員の人ありがとう。あんたはマジで英雄です。本番でヒリついててごめんね。
企画それ自体に対する批評
先日AI裁判官に用いられたプロンプトに関する記事が公開されました。
せっかくですので当日の内容と公開された記事を踏まえて、工学的な観点から本企画の振り返りをやろうかと思います。
本企画は非常に衆目を集めることとなったのですが、その一方で工学的な観点できちんと実験として成立していたのかというのは少し怪しく、あくまでもエンタメ的な色が強かったのかなと思っています。
記事に含まれる主張に関してもいくつか気になる点はあって、例えば「LLMは決定的なので判決は事前に用意できる」という主張について、裁判というプロセスに人間の応答が含まれる以上どうしても非決定的な側面はあるんじゃないのとか、背景にある確率分布についてその実現値で代表し切ってしまうことの難しさ(裁判って別に有罪X%、無罪Y%を基にガチャをする、みたいな仕組みじゃなくない?)とか。そもそもプロンプト練る時点で今回の模擬裁判の判例を使ってたけど、それってTrainデータとTestデータが同じみたいな状態で汎化性能については全く議論できていなくて、過学習を起こしている可能性はあるよね*22、みたいな。
そんな感じで、個人的には本企画の工学的な視座での瑕疵・怪しい点は少なくないんじゃないかと思っています。一方で、法学部の学部生に対して情報工学系のトピックに対してそんな正確性を求めて激ツメするのが正しいのかというとそんなことはなくて、むしろ学生の仕事としては安田講堂で大々的にブチ上げただけで相当どころかメチャメチャに上等なはずで、その後のvalidationみたいなのは専門家を動員しやすいメディアの方々とかにぜひやって頂きたいなみたいなことを考えています。
その点だとプロンプト公開ってこちらからできる学術に対する最大限の誠実さだと思ってて(なんか全体的に辛辣な言い回しになっちゃって本当に申し訳ないんだけどこの点含めて諸々本当に偉いと思っています)、本企画のエンタメ的な側面に対し過度に浮かされることなく、ある程度落ち着いたらぜひこのプロンプトに対して冷静にアカデミックなチェックをやってほしいなと考えています。
…こうやって色々書いた時点でTwitterの反応とかを見てみると報道に対するセンセーショナルな印象がかなり先行してて、諸々の正確な肌感みたいなのってきっと伝わんねぇんだろうなという感じがして技術屋的には大分げんなりしてしまいました。我々はハイプサイクルとかいう勝手に期待されて落胆される謎の活動に加担して生きています。助けてくれ*23。
おわりに
自分から手伝いを志願したとはいえ絶対一人でやる作業量じゃなかった…
最後に幾つか文脈から外れた個人的な感想を述べさせてもらうと、面白い現象を創発するのに十分なカオスさを持ったChatGPT-4を「正しい判決」という枠に押し込めてしまったのはちょっともったいなかったかもなとか、弊大については全体的にもうちょっと「泥臭くものを作る」という行為について理解をもってもらえると嬉しいなとか、そんなところでしょうか。とにかく各位お疲れ様でした。
*1:記事公開後に気づいたのですがこの中性的・無個性という言い方はあんまりよくないかもしれなくて、まぁとにかく「声である」以外の特性を可能な限り平滑化したものであると認識してください
*2:追記:これも何か特別な意味がある表記ではなく、あくまでなんの事前情報もなく聞くとどちらかの性別に聞こえる、といった意味合いです
*3:Jaehyeon Kim, Jungil Kong, & Juhee Son. (2021). Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech.
*4:Yinghao Aaron Li, Ali Asghar Zare, and Nima Mesgarani. StarGANv2-VC: A diverse, unsupervised, non-parallel framework for natural-sounding voice conversion. In Proc. INTERSPEECH, pp. 1349–1353, Brno, Czechia, Sep. 2021.
*5:Jun-Yan Zhu, Taesung Park, Phillip Isola, and Alexei A Efros. Unpaired image-toimage translation using cycle-consistent adversarial networks. In Proc. ICCV, pp. 2223–2232, Venice, Italy, Oct. 2017.
*6:Yunjey Choi, Minje Choi, Munyoung Kim, Jung-Woo Ha, Sunghun Kim, and Jaegul Choo. StarGAN: Unified generative adversarial networks for multi-domain imageto- image translation. In Proc. CVPR, pp. 8789–8797, Salt Lake City, USA, Jun. 2018.
*7:Hirokazu Kameoka, Takuhiro Kaneko, Kou Tanaka, and Nobukatsu Hojo. StarGANVC: non-parallel many-to-many voice conversion using star generative adversarial networks. In Proc. SLT, pp. 266–273, Athens, Greece, Dec. 2018.
*8:より正確にはCycleGAN-VCやStarGANv2など、菱形継承よろしく並列で様々な先行研究がベースになっているのですが、今回はわかりやすさのためにこのような説明をしています
*9:Shinnosuke Takamichi, Ryosuke Sonobe, Kentaro Mitsui, Yuki Saito, Tomoki Koriyama, Naoko Tanji, and Hiroshi Saruwatari. JSUT and JVS: Free Japanese voice 59 corpora for accelerating speech synthesis research. Acoustical Science and Technology, Vol. 41, No. 5, pp. 761–768, Sep. 2020.
*10:https://note.com/takahiroanno/n/naf00564d384b
*11:StarGANv2-VCだって2021年なので言うほど古くないはずなんですが…業界の進歩が異常に早いので…
*12:https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/tree/main
*13:倫理的な問題がちょっと話題になったりしていましたが、ここでは特に触れないことにします
*14:vitsまでは理解できたのですが、many-to-manyからany-to-manyにどうやって対応しているのかがわからない、誰か解説してください…
*15:https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/train/process_ckpt.py#L203-L258
*16:通常の深層学習って特徴量の取り方に一定の自由度があるので適当にLerpしてもブチ壊れると思うのですが、これはなぜかうまくいっています。事前学習のウェイトが大きいからかなと解釈しています。
*17:YostarとHyperGryphによるソシャゲ、Arknightsが定期的に出すむやみにオシャレな割に時間当たりの情報量がスッッッッッッッッカスカの謎PV 紹介の対象が玄人向けの高難易度コンテンツなので、新規に何かを説明する気が一切ない
*18:https://compneuro-julia.github.io/neuron-model/neurite-growth-model.html 神経突起のエロいビジュアライズがある
*19:シェーダーの感覚でテクスチャを作れるので、ジオメトリックな表現をやる際僕はsubstance designerを使うことが多いです
*20:https://github.com/fuqunaga/RosettaUI
*21:ちゃんとメンションしたいんだけどアカウント名がわからず、見てたら連絡ください
*22:AI「裁判官」という役職を名乗っている以上ある程度の汎化性能を期待されていることについては疑いの余地はないかと思っています。
*23:ところで、テクニカルアーティストの業務内容に本当にこういった『期待値の偽造』に類する行為が含まれていないと断言できるかというと…