Logo Ernie.SG

開発者日誌:The Sound of Stories

2024年2月13日
約3分で読めます
利用できるタグはありません

The Sound of Stories の最初の「ものぐさ完成版」をお届けします。物語の構造は守りつつ、ユーザー入力には柔軟に反応するインタラクティブな物語を、どうにか生成できるところまで持ってきました。

The Sound of Stories 作業中デモ

この一周を最後まで通すことが、最初に公開プレゼンをして以来ずっと引っかかっていた。最初の生成を走らせるのは簡単だったけれど、問題はそこではない。ユーザーの入力を覚えておくだけでなく、明確な始まりと終わりを持つ構造化された語りの制約の中に、それをどう筋の通った形で組み込むのか。この問題は、離散的で無限な分布として捉えることもできる。オタク脳にはちょっとわくわくする響きだが、実際にどう解けばいいかを考え始めるうえでは、まったく役に立たない。

最終的に助けになったのは、別の人間と話しながら問題をほぐして、自分の考えをはっきりさせることだった。特に、これは D&D 的な問題に近いよね、という話をしていたときに、Jia Qi がチェックポイントのことを思い出させてくれた。Baldur’s Gate のようなゲームでは、たしかに特定の目的を達成するための選択肢がずらっと用意されている。でも、それでも明確なチェックポイントには到達しなければならない。そこで物語の構造としばらく向き合い、それをチェックポイントに分解する方法を考え始め、下のような .json 形式に落とし込んだ。

{
  "title": "The Boy Who Wanted a Drum – by Kamini Ramachandran",
  "story_details": {
    "protagonist_gender": "male",
    "protagonist_name": "the boy",
    "story_setting": "a small hut"
  },
  "checkpoints": [
    {
      "id": "intro",
      "text": "Once upon a time, there lived a poor woman and her little son. They lived in a small hut together. The little boy wanted a drum. A drum he could tap, beat, and play. Ta Di Gin A Thom! I want a drum! The boy kept asking his mother for a drum, all day and all night long. And so it was, that the next morning, the woman went to the market to sell the cloth that she had woven.",
      "choice": "drum"
    },
    {
      "id": "encounter_0",
      "text": "And when she had sold all the cloth, she realised that the coins were not enough to buy her son a drum. As she walked on her way back home, she saw a stick. She picked up the stick and took it home. Ta Di Gin A Thom! I want a drum! Son, take this stick and pretend that it is a drum. The boy took the stick, and he tapped it on the ground (sound effects) He tapped it on the water pot (sound effects) He tapped it on the door (sound effect) He was delighted by the sound it made!",
      "choice": "continue"
    },
    {
      "id": "encounter_1",
      "text": "Ta Di Gin A Thom! I have a stick! On the way he met an old woman looking very sad. She sat beside a small wood stove trying to fan the flames. Grandmother, grandmother, why do you look so sad? I have no wood to make the fire to cook the chapatti. The boy remembered his stick! He gave it to the old woman who used the stick to start the fire to cook some chapati. Thank you boy! Here, take some chapatis with you, I have no need for so many.",
      "gift": "chapati"
    },
    ...

もうひとつ大いに役立ったのは、自分のメモに従うことだった。ややこしくしすぎるな。まずはいちばん単純な解で手を動かしてみる。難しさはあとからいくらでも重ねられる……。だからエージェントで暴走する代わりに(directorscriptwriterassistant という役割を持つ階層型エージェントチームを作ったらどうなる!?)、2本の LLM チェーン、単純な会話メモリ、そして簡単な if チェックだけで、かなり頭の悪い「ものぐさ完成版」の物語をどうにか出せた。

if next_segment_id < len(story_data["checkpoints"]):
# then you continue the story and use memory to-date as well as the next segment as context

この段階で開発をややこしくしすぎるな、という自分自身の助言に従えたので、自分で自分の背中をぽんぽんしている。

それ以外にも、作っていく途中で学んだ面白いことがいくつかある。

  • 依存関係の管理pyenvvirtualenvpoetry が、ディレクトリ単位の開発環境を立ち上げるためにどう噛み合うのか、ようやく腑に落ちた気がする。つまり、pyenv は Python のバージョン管理、virtualenv は隔離された環境の作成、poetry はパッケージ依存関係と最終的な配布の管理に使う。

  • プロンプト「エンジニアリング」:時間の80%は、使うべき最適なプロンプトを探すだけで溶けている。LLM ベースの開発はどれも、ほかの作業に入る前の最初の段階から、使うべき最良のプロンプトをひたすら反復することで、ものすごく恩恵を受けると思う。正直かなり退屈だし、この部分の開発は将来的に言語学専攻の人たちと協業して外注できる、かなり有望な専門職ルートなのでは、と本気で思っている。

  • 決定論的システムと確率的システム:こうしたシステムには調整できるおなじみのハイパーパラメータがあるとはいえ、「絶対に確実な結果だけを見せたい」と言う人の話を聞くと、いつも少し胃がむずむずする。実際のところ、この瞬間に私たちが存在しているという現実を除けば、人生に絶対100%の確実性などない。それ以外については、たいていそうなるだろうという期待は持てるし、実際だいたいそうなるのだけれど、確率が1であるものは人生にはほとんどない、という事実は残る。今回の反復作業の多くは、単に temperature パラメータをめぐるものだった。そしてどこかの時点で、同じ入力であっても物語は100%確実には再現できないのだと、両手を上げて受け入れるしかなかった。このことから、人間の組織におけるマネージャーや QA/QC の役割、人間の入力と出力のばらつきをどう管理しようとしているのか、ということを考えた。信頼できる A.I. システムを作るうえで、そこから移植できる学びが何かあるのかもしれない。

  • A.I. における多様性の必要性:最初のうちは、Kamini の生成音声の短い断片が標準中国語で出てきたことに、かなり気持ちよく驚かされた。英語で録った彼女の携帯電話越しの音声、だいたい1分ぶんをもとにした即席の音声クローンから推定したものだ。それでも、生成される系列が長くなると品質がひどく落ちることはすぐに明らかになった。つまり、標準中国語の音声出力では声調の間違いが増え、妙な速度で話し、語の切れ目もきちんと処理できない、などなど。テキスト生成でも同じだった。GPT-4 は、ほとんどの場合、英語から標準中国語へ物語を素朴に直訳しているだけだということがはっきり見えた。言うまでもなく、この経験のおかげで、なぜより多様で、より特化した LLM モデルが必要なのかを本当に理解し、実感できた。また、主要なモデルがみなこの前提に合わせて調整されているせいで、英語コンテンツの量産があまりにも簡単になっていることを考えると、インターネット上で言語としての英語がこれからさらにどんな支配力を持つようになるのかも考え始めた。そのせいで将来、自分の母語がさらに弱っていくのだとしたら、少し悲しい。言語を失うというのは、世界を見るための別の方法、別の窓を失うようなものではないか、と思うからだ。でもその一方で、中国語 LLM の学習に使える入力データの質について考え始めると、ふふ。要するに、学習に使えるデータセットを増やすためにどんな投資をしているのかを語らずに、デジタル包摂や A.I. における多様性を語ることはできない。たしかにバイアスは問題だ。では、より文化的に多様で代表性のある学習用データセットをデジタル化するために、何がなされているのか。すると今度は、学習入力データへの公正な支払いだとか、オプトアウトだとかいう話が出てくる。そのどれも、A.I. の学習の仕組みとプロセスをもう少し理解するだけで、かなり早い段階で、いくつかの考えがどれほど非現実的、あるいは見当違いになりうるかを見抜く助けになるはずなのだけれど。まあ、これはたぶんまた別の機会の話だ。

The Sound of Stories に話を戻すと、単純に終わりなく続く物語という無限ゲームと、今回のように明確な始まりと終わりを置いたものとのあいだには、何か面白いことが言える気がしている。芸術的な声明とか意図とか、なんとかかんとか。ここには人生そのものとの対比として引ける教訓なり並行関係なりがあるのだろう。ただ、それはいったん後回しにする。次は、この体験に直接組み込みたいと思っているニューラル音声合成のために、VAE モデルの学習へ注意を移すつもりだ。お楽しみに! ;)


初出は PubPub の erniesg.pubpub.org/pub/g6zjtf2s です。