ハイテク路線から浮世絵風に転換したワケ
──約1.5ヵ月という短期間で、どのように開発しましたか?
大手ベンダーに依頼すると、要件定義や契約、開発に多大な時間を要するため、選択肢からは排除しました。TsugiTsugiのPoCに協力してくださったユーザーの中に技術者の方がいたので、その方に相談して開発パートナーになっていただきました。サービスに対する理解があり、ユーザー目線もお持ちなため非常に心強かったです。
──開発にあたって苦労した点・工夫した点を教えてください。
着手する前は、私自身のAIに対する理解が浅かったため「AIを使ったハイテクな機能で次世代の旅行体験を創出し、メディアに取り上げてもらおう」と息巻いていました。しかしながら、当時のChatGPT3.0は思ったほど賢くなかったのです。事実に基づかない情報を生成する“ハルシネーション”の頻発が、最初の大きな壁でした。実在しないホテルを提案したり、誤った所在地を案内したりしてしまっては、ユーザーに迷惑がかかってしまいます。
ハルシネーションを解消するための方法として、事前学習したLLMに別のデータセットを追加学習させるファインチューニングがありますが、ChatGPT3.0にはその方法が使えませんでした。そのため、ユーザーがトーク内容を入力する前に、毎回こちらで150超(当時)の宿泊施設の情報をChatGPT3.0にインプットし、理解させた上でトークを始めるしかなかったのです。そうなると、今度はトークンの壁にぶつかりました。ChatGPT3.0がインプットできる日本語のトークン数は最大8,000文字程度だったため、150もあった提携施設の住所や名称を入力するだけで上限に達してしまうのです。
1.5ヵ月先の報道公開までに正答率100%を実現することが難しいと悟った時点で、元々目指していたハイテクな方向性を諦めました。完璧な提案ができなくてもユーザーから許してもらえるように知恵を絞った結果、思いついたのが浮世絵風のキービジュアルとキャラクターです。「次世代の旅行体験」を謳う機能で正答率が低い場合、ユーザーの期待と実態の間に大きなギャップを生んでしまいますが、古風なキャラクターが宿泊施設を面白おかしく提案すれば、それほど大きなギャップは生じないと考えました。
加えて、ハルシネーションを防ぐ方法としてベクトル化を採用しました。ベクトル化とは、テキストデータを数値の並びに変換する処理のことです。まず、すべての宿泊施設の情報を我々がベクトル化し、データベースとしてあらかじめ用意しておきます。キャラクターとの会話を通じて得たユーザーのニーズも即時ベクトル化します。これにより、ChatGPT3.0がデータベースからベクトルの近い宿泊施設を探し出すことができるのです。探し出した宿泊施設をベクトルから自然言語に戻し、ユーザーに提案する流れです。
ベクトル化はニーズとの完全一致を実現するものではありませんが、ハルシネーションは起こしません。また、ユーザーから細かな条件を指定された場合に「あてはまる宿泊施設は0件でした」と回答するのではなく、条件に近い施設を提案できる点もベクトル化のメリットでした。実際のコンシェルジュと話しても、ニーズに100%合致する提案はなかなか得られませんよね。その点をAIで再現できたのは大きかったです。
