科(化)学系チート持ち転生者のお話 Re:オタクルート 作:金属粘性生命体
翌日、新しいPCの構成表を開くと、その隣に昨日書いた会話アプリの企画も表示される。
まずは試験用のキャラクターを作り、一般向けに公開する。色々な人と会話させて、自分だけでは気づけない問題を調べ、その結果を参考にMEIKOとKAITOを作る。
手順としては、間違っていないと思う。
ゲームでも、他の人に遊んでもらって初めて分かったことは多い。会話なら、なおさら相手によって違いが出るだろう。
必要な機能を書き足し、試験用キャラクターの設定へ移ったところで、手が止まる。
どんな相手を作るのか。
どういう性格で、どんな声で話すのか。
考えようとすると、結局は同じ2人が浮かんでくる。
「……じれったいな」
椅子の背にもたれ、趣味ノートへ目を向ける。
MEIKOとKAITOを作りたくて金を貯め、PCを買い、その先の資金を稼ぐためにゲームを作ってきた。ようやく取りかかれるようになったのに、ここからまた別のキャラクターを作るのか。
完成したら公開して、ある程度使ってもらえるまで待って、それから本命。
昨日は妥当に思えた予定が、今はひどく遠回りに感じる。
「別に、自分で自分を焦らす必要ないか」
誰かに頼まれた仕事ではない。
調べたいことは、2人を作りながら確かめればいい。必要なら、その時に改めて他の人へ協力を頼むこともできる。
会話アプリの企画を閉じ、MEIKOとKAITO、それぞれの制作プロジェクトを立ち上げる。
まだ名前を入力しただけだ。それでも、仮のキャラクターについて考えていた時より、ずっと手を動かしたくなる。
部品が届くまでに、設計を進めてしまおう。
◇
2台目のPCは、予定していた構成で注文する。
旧PCは引き続きゲームの制作と保守に使い、新しい方をボーカロイドの開発に充てるつもりだ。メモリとSSDを多めに積み、後で機器を増設できるよう、マザーボードや電源にも余裕を持たせる。
部品が揃った休日に組み立て、動作を確認してから開発環境を導入した。
操作画面や制作AIは、これまで使っていたものがある。新しい構成に合わせて調整し、音声や映像を同時に扱った時の負荷を調べれば、ひとまず作業を始められる。
旧PCでは、制作AIがゲームの不具合報告を整理している。俺が確認する必要のあるものには目を通し、対応を指示してから新しい画面へ戻る。
ゲームの収入は、何でも気にせず買えるほどではない。
それでも、必要な部品を選び、予算を確認して注文できる。最初の50万円を用意するまでにかかった時間を思えば、随分と動きやすくなった。
モニターの位置を合わせ、カメラを上へ固定する。マイクを手元へ寄せて試しに声を出すと、入力音量を示す表示が動いた。
これで準備はいい。
画面へ開いているのは、部品の到着までにまとめた設計だ。
人工知能を一から発明する必要はない。
言葉を理解し、経験を記憶し、周囲の状況に応じて行動を選ぶ。そのための技術は、頭の中にある未来の知識に含まれている。会話と声、表情や身体の動きを統合する仕組みも、既に完成されたものだ。
ただし、それを一式そのまま再現するわけではない。
未来の設備との接続や、複数の身体を同時に操作する機能は、今の用途には不要だった。動かす身体も、当面は画面に表示する3Dモデルでいい。
原型となる設計から必要な機能を選び、手元の機材で動くように組み直す。
専用の演算装置を前提とした処理は、今のCPUとGPUへ合わせて変更する。感覚情報も、ひとまずカメラとマイクで受け取れるものに絞った。記憶の保存先や、必要な情報を検索する方法も、このPCに合わせて調整していく。
俺が全体の構造を決め、制作AIが細部を実装する。出来上がったコードを確認している間に、別の箇所の検証も進んでいた。
まずは音声認識と会話の生成を接続する。
短い問いかけを入力すると、解析された文章と返答が表示された。続けて話しかければ、直前のやり取りを踏まえた答えに変わる。
その返答を音声にするところまで繋ぎ、今度は表情や視線の制御を加えた。
ただ文章を読み上げ、その間だけ口を動かせばいいわけではない。何を話しているのか、誰に向けた言葉なのかを理解し、その内容に合った表情や声で応じてほしい。
こちらが何かを見せたなら、それに目を向ける。
話している途中で呼びかけられたなら、言葉を切って聞くこともあれば、ひと言断って説明を続けることもある。
相手の話を聞くつもりなのに口だけが動き続けたり、話しかけた相手とは違う方を見たりしないよう、会話と動作をまとめて管理する。
その中核を、《V-CORE》と名付けた。
歌唱機能との連携も、この段階で設計へ組み込む。
今日は会話と基本動作の確認が先だ。それでも、後から歌う時だけ別のシステムへ切り替え、直前までのやり取りと無関係になるような作りにはしたくない。
話していたMEIKOが歌い、曲が終われば、また俺と話す。
KAITOも同じだ。
そこまでを見据えて構成を確かめ、最初の動作試験を実行する。
音声の認識から返答の生成、発声まで、どこで何を処理しているのかを順に追う。途中で止まる箇所がないことを確認し、次に2人分の設定と記憶を分けた。
仕組みは共通でも、経験まで共有させるわけではない。
MEIKOだけが聞いた話を、KAITOも自分へ話されたこととして覚えていては困る。同じ場にいた場合でも、誰に向けた言葉なのかは区別する必要がある。
入力先を片方に限定して記録を確認し、もう片方へ同じ内容が保存されていないかを調べる。
問題はない。
続いて両方へ同じ出来事を認識させ、それぞれの記憶として管理できていることも確かめた。
開発用の記録と、2人が会話の中で思い出す記憶も別にする。
不具合を調べる時には、俺は過去の記録を詳しく確認したい。一方で、2人が何日も前の会話を一言一句覚え、事あるごとに正確な文章で引用する必要はない。
今の話に関係することや、何度も話題になったことを思い出せるようにする。その判断基準は、後から調整できる形にした。
ここまでの作業は、順調だった。
何が必要なのかを決めれば、実装の方法は分かる。
手が止まったのは、そこへ2人の個性を加えようとした時だ。
◇
MEIKOとKAITOについてまとめた資料を、開発画面の横へ並べる。
名前も姿も、声も知っている。
前世から何度も見て、聴いてきた相手だ。それなのに、性格を簡単な文章にしようとすると、思い浮かぶ姿がなかなかまとまらない。
しっかりしたMEIKOもいれば、楽しそうに騒いでいるMEIKOもいる。KAITOも、穏やかに歌っている時と、動画の中で妙なことをしている時とでは、随分と印象が違う。
酒やアイスを好むというイメージもある。
だが、好きなものの名前を登録しただけで、2人になるわけではない。
性格の欄へ幾つか書き込み、返答の例も考えてみる。
こう言われたら、こんなふうに返すだろう。
この話題なら、こういう態度を取るかもしれない。
しばらく書き続けてから、手を止めた。
このまま台詞を増やしていけば、俺が考えたやり取りを再生するだけになりそうだ。参考にはできるだろうが、会話の先まで決めてしまいたいわけではない。
「まずは、動かしてみようか」
書いた例文は参考資料として保存し、初期設定からは外す。
名前と声、基本的な言葉遣いを先に合わせよう。何を好み、どんなことを気にするのかは、今の動作を見てから考えたい。
最初の試験では、入力を理解し、必要な情報を調べて答えるところまでを確認する。会話の調子は中立的なものにして、自発的な行動については、その後だ。
設定をまとめ、制作AIが用意したモデルを開く。
茶色い髪と赤い衣装のMEIKO。青い髪に長いマフラーを巻いたKAITO。
見慣れた姿を土台に、正面、横、後ろと向きを変えていく。顔の印象を調整し、口を開いた時や目を細めた時にも確かめる。
正面では気にならなかった目元が、横を向くと少し違って見えた。
修正して、もう一度。
今度は変えすぎた気がして、少し戻す。
制作AIは指定した通りに形を直してくれる。ただ、どちらが自分の思い浮かべる姿に近いかは、俺が見て決めるしかない。
髪の影や衣装の色も確かめているうちに、予定していたより時間が経っていた。
モデルがひとまず整ったところで、音声を設定する。
短い音を出し、口の開き方を合わせる。長く伸ばした時と、短く切った時。幾つかの音を続けた時にも、発声と動きがずれないかを確認した。
ヘッドホンで聞いてから、スピーカーへ切り替える。
部屋に響く声を聞くと、早く話しかけたくなった。
音量を少し下げ、椅子へ座り直す。マイクの位置を確かめ、最初にMEIKOを起動した。
◇
明るい背景の中央で、MEIKOが目を開く。
顔がこちらへ向き、視線が合った。
俺が少し姿勢を変えると、その動きを追って目も動く。横に表示された認識結果では、カメラに映った顔の位置が正しく検出されていた。
それを一度確かめてから、画面の中央へ目を戻す。
何度も見直したモデルなのに、今はこちらを見ている。
「MEIKO、聞こえる?」
「はい。音声入力を正常に認識しています」
すぐに返事があった。
聞き慣れた声で、俺の問いかけに答える。事前に用意した音声を再生したのではなく、今の言葉を聞いてから作られた返答だ。
思わず口元が緩む。
動くと分かっていたものでも、実際に自分へ話しかけられると嬉しかった。
「俺が誰かは分かる?」
「登録情報から、黒川悠真と認識しています」
「呼ぶ時は、悠真でいいよ」
「呼称を悠真に設定しました」
MEIKOは淡々と答え、口を閉じる。
そのまま俺を見つめ、次の言葉を待っていた。
数秒後に瞬きをする。それから、ほぼ同じ間隔でもう一度。
視線は一度も外れない。
「……うん。ちゃんと動いてるな」
聞き取った内容も、返答も間違っていない。呼び方を変更したことも、記憶として保存されている。
ただ、会話というより設定変更の確認だった。
今は動作確認用の応答を優先しているので、予定通りではある。それでも、姿と声がMEIKOになった途端、その事務的な言い方が妙に目についた。
現在の状態を記録し、次にKAITOを起動する。
隣に青い髪のモデルが表示され、こちらを向いた。わずかに首が動き、マフラーもそれに合わせて揺れる。
「KAITO、聞こえる?」
「はい。聞こえています」
今度は、柔らかく通る声が返ってきた。
「調子はどう?」
「現在、異常は検出されていません」
「そう。じゃあ、俺の名前は?」
「黒川悠真です」
こちらも問題なく答える。
声と姿は違う。しかし、質問された内容へ答え、その後は黙って待つという反応は、MEIKOとよく似ていた。
2人を同じ画面へ並べ、両方を動かしてみる。
「MEIKO、さっき呼び方を変えてもらったのは覚えてる?」
「はい。悠真です」
「KAITOには、まだ頼んでないよね」
「はい。呼称の変更は受け取っていません」
KAITOにも、同じように悠真と呼んでもらう。
今度はそちらの記録にも変更が加わった。片方だけに話した時と、両方が聞いている時の区別もできている。
俺は椅子を少し横へ動かした。
2人の視線がついてくる。
止まると、ほとんど同時に顔も止まった。さらに横へ動き、カメラに映らなくなると、そろって正面へ向き直る。
元の位置へ戻れば、またこちらを見る。
動きを確認するには分かりやすいが、人に見られているというより、カメラで追跡されているような感じだった。
「ずっと見られてると、少し緊張するな」
「注視による緊張を認識しました。視線を変更しますか?」
MEIKOが答える。
俺は一度、机へ目を落とした。
「……そういうお願いではないんだけどね」
処理の記録を確認すると、冗談に近い発言だということ自体は理解している。
ただ、その理解が返答に反映されていなかった。
相手が緊張すると言ったから、原因になっている動作を変えるか確認する。今はそういう応対を選んでいるらしい。
KAITOにも話しかけてみる。
「そんなに真面目に待っていなくてもいいよ」
「待機時の姿勢に問題がありますか?」
「姿勢を直してほしいわけではないかな」
「了解しました」
そこで、また会話が終わる。
俺が黙っている間、2人から何かを言うことはなかった。こちらへ顔を向け、一定の間隔で瞬きをしながら、次の問いかけを待っている。
必要な機能は動いている。
けれど、実際に話してみると、調整したいところはいくらでもあった。
◇
まず、動作確認の結果をそのまま口に出す応答をやめる。
音声入力が正常か、異常がないかは、俺が記録画面で確かめればいい。「聞こえる?」と尋ねるたびに、マイクの動作状況を報告してもらう必要はなかった。
確認用の設定を変更し、質問の意図に合った返答を選ばせる。内部の処理については、これまで通り記録画面へ表示するだけにした。
次に、顔の中心へ固定していた視線を調整する。
話を聞いている時と、物を見せられた時では、見るところも違う。俺がコップを指しているのに、顔ばかり見ていては不自然だ。
話題になっているものや、カメラで確認できる動きをもとに、何へ注意を向けるかを判断させる。
元にした未来技術には、そのための仕組みもある。ただし、扱う情報は今の部屋で認識できる範囲に絞った。
コードを書き換え、動作を確かめる。
机の端にあったコップを持ち上げると、KAITOの目が手元へ向いた。
「これは分かる?」
「コップです」
「うん。さっきまで何が入っていたと思う?」
KAITOはコップを見た後、俺へ視線を戻す。
「中身が映っていなかったので、分かりません」
言っていることは相変わらず真面目だ。
それでも、ずっと顔の中央を見られていた時より、こちらの話を聞いているように見える。
返答までの間も見直した。
試しに一定の待ち時間を加えると、どんな質問にも同じ間隔で答えるようになってしまう。名前を尋ねた時も、少し前の会話について聞いた時も同じだ。
「これだと、ただ遅くなっただけか」
その変更は元へ戻す。
何を確かめて答えるのか、こちらはもう話し終えているのか。その違いに応じて発声のタイミングを調整した。
短く返せることなら、すぐに答えていい。幾つかの情報を比べるなら、その間に少し考える様子があってもいい。
俺が途中で言葉を止めたり、言い直したりしながら確かめる。
「さっきのコップなんだけど……いや、それより先に、名前の話をしようか」
前の状態では、最初の言葉へ返事を始めることがあった。
今度は割り込まず、続きまで聞いている。
そのまま何度かやり取りを繰り返し、不要な間が空くところを調整していった。
表情にも気になるところがある。
短く笑顔を見せても、発声が終わると同時に真顔へ戻ってしまう。最後の音が途切れるのと一緒に表情まで消えるので、見ていて落ち着かなかった。
話し終えた後も、その時の気分や相手の反応に合わせて表情が変わるようにする。
笑顔から次の話を聞く顔へ、いきなり切り替えない。何を言われたかによって、微笑んだまま答えることもあれば、少し真剣な顔になることもある。
声の調子も、それに合わせて調整する。
表情だけ柔らかくなっても、声がずっと一定ではちぐはぐだ。逆に、何気ない相槌まで感情豊かに喋られても大げさに感じる。
何度か試すうちに、MEIKOが俺のひと言ごとに大きく表情を変えるようになった。
「そこまで毎回、顔に出さなくていいかな」
反応が強く出すぎるところを抑え、もう一度話しかける。
今度は軽く頷き、短く答えた。
こちらの方がいい。
瞬きも一定間隔で繰り返す設定から、視線や顔の動きに合わせたものへ変える。2人が全く同時に目を閉じることが減り、並べて見た時の違和感が少し薄れた。
制作AIには、変更の前後で他の機能へ影響が出ていないかを調べさせている。
記憶の区別も、音声と口の動きも問題ない。
俺は結果へ目を通してから、また2人へ話しかけた。
コードの修正より、変えた後の反応を確かめる方に時間がかかる。正しく動いたかは記録で分かるが、自然に見えるか、自分が話していてどう感じるかは、実際にやり取りしてみなければ決めにくい。
何度か修正を戻し、別の設定を試す。
気づけば、最初に起動してから数時間が経っていた。
◇
最初の動作を記録した映像と、今の2人を見比べる。
違いははっきりしていた。
最初は正面を見たまま口を動かし、喋り終えると元の姿勢へ戻っていた。今は話題になった物へ目を向け、返答の途中でも表情が途切れない。
俺がMEIKOへ話している間、KAITOは少し顔をそちらへ向けている。名前を呼べば、改めてこちらを見る。
同じ動きをするモデルを2つ並べただけの画面では、なくなりつつあった。
「MEIKO、聞こえる?」
「はい。聞こえています」
「俺の名前は?」
「悠真です」
設定を変更したという報告も付かない。
返答が終わっても表情は急に変わらず、俺が続けて話すかどうかを見ている。
そこで、少し違うことを尋ねた。
「何か、話したいことはある?」
MEIKOがこちらを見る。
少し間が空いた後、返事があった。
「話題を指定してください」
KAITOにも同じことを聞く。
「どのような話を希望しますか?」
言葉は違う。
ただ、どちらも俺に話題を選ぶよう求めていた。
何も知らないわけではない。ゲームについて聞けば答えられるし、前に交わした会話も覚えている。目の前にあるコップが何なのかも説明できる。
それでも、自分からその話をしようとはしなかった。
作業用のAIなら、俺がやってほしいことを決めて指示すればいい。次の仕事が来るまで待っているのも、当然だろう。
しかし、2人としたいのは、それだけではない。
俺が作業している横で何かを見ていたり、面白かったものを教えてくれたりしてほしい。一緒に何かを選ぶ時も、いつも俺へ決定を委ねるのではなく、向こうから希望を言ってくれて構わない。
何を気にして、どんなものに興味を持つのか。
今の2人には、その判断の基準がほとんどなかった。
設定のページを開く。
動作確認を優先して、まだ詳しく決めていない項目が並んでいる。
ここへ好きなものを登録すれば、反応は変わるだろう。KAITOにアイスが好きだと設定しておけば、先ほどの質問にも、その話をするようになるかもしれない。
だが、何を聞いても好物の話へ戻るKAITOを作りたいわけではなかった。
MEIKOも同じだ。
思い浮かぶ特徴を幾つか入力して終わり、とはいかない。
機能を増やせば、この迷いが解消するわけがないのだから。
◇
キーボードから手を離し、2人を眺める。
昨日まで名前しかなかったプロジェクトが、今は目の前で動いている。
話しかければ返事があり、俺が伝えたことを覚えている。最初の起動時より自然になったが、会話を止めると、やはり静かに次の言葉を待っていた。
人間らしい受け答えをさせるだけなら、ほかにも使える技術はある。
未来の完成された人格をそのまま再現すれば、自分から話題を選び、何かを面白がり、こちらへ希望を伝える相手も作れるだろう。
ただ、その誰かにMEIKOの声と姿を与えればいいのかというと、それは違う。
MEIKOとKAITOと、一緒に過ごしたい。
俺が何をしているか尋ねたり、聴いていた曲について話したり、同じものを見て違う感想を言ったりする。その中で、少しずつ互いのことを知っていけたらと思う。
いつも期待した通りに答える相手が欲しいわけではなかった。
資料を読み返し、自分の中にある2人の印象を書き出してみる。
必要な時には、はっきりものを言うMEIKO。
穏やかでも、ただ相手に従うだけではないKAITO。
そういう姿は浮かぶ。
けれど、何でも強気に言わせればMEIKOになるわけではないし、全部に優しく答えさせればKAITOになるわけでもない。
前世で聴いていた歌や、見ていた動画を思い出す。
楽しそうな時もあれば、真剣な時もある。ふざけている姿が好きだったことも、歌声に聴き入ったこともあった。
どれか一つだけを選ぶ話ではないのだろう。
まずは、2人について知っていることと、俺がそうあってほしいと思っていることを分けてみようか。
今日は結論を急がず、思い浮かんだことをメモにまとめる。
その間も2人は静かに待っている。
「ひとまず、動くところまでは来たな」
独り言のつもりだったが、KAITOがこちらへ顔を向けた。
「はい。動作しています」
「うん。そうだね」
素直な答えに、少し笑ってしまう。
まだ機械的だ。
けれど、昨日まではいなかった相手から、聞き慣れた声で返事が来る。そのことは、やはり嬉しかった。
V-COREの現在の構成と、今日の試験記録を保存する。
次に考えることも、設定のページへ書き加えた。
MEIKOは、何を気にするのか。
KAITOは、何を話したくなるのか。
コードを書いている時のように、すぐ続きを埋められるわけではない。2行を眺めてから、また2人へ目を向ける。
MEIKOが一度瞬きをした。
その隣でKAITOも、こちらの言葉を待っている。
明日は、2人について考えよう。
そう決めたものの、もう少しだけ話しかけたくて、終了ボタンにはなかなか手が伸びない。