これはただの妄想とアイディアです。考えがまとまりきらないうちから書いてます。
私は会話系の AI の専門家ではないので、「そんなの常識だよ」だったらすみません。
現状の音声対話 AI の辛さ
最近、ロボホンを使ってみたり、 某社の雑談ロボットのデモを見たりで、音声を使ったロボットとの対話や雑談を体験して、以下の部分が辛いなぁと感じました。
- 発話のタイミングの重要さ
- 現在の技術では音声認識が間に合わず間が持たない
- 対話はタイミングとノリがとても重要
- 相手が話しているところに割り込むととても印象が悪い
- 声のトーンや速度の問題
- 話者と話す速度が合っていないと会話はとてもストレスを感じる
つまり、音声の会話においては、会話の内容も大事ですがそれ以上にタイミングやノリのようなものが合っていないととてもつらいということです。
音声会話に必要なことの階層的構造
会話には階層構造があるのではないか
会話の空気感(タイミング、速度、トーン)を守ることは心地よい会話をするために「本能的なレベルで」必須であると感じました。人間じゃない動物だって、鳴き声の空気感を使ってその感情や危険を仲間に伝えているのです。
一方で、会話の「内容」というのは一段高級な機能であるように思われます。鳴き声に非常に複雑な意味をもたせ「会話」を行っているのは人間のみです。(たぶん。)
そして、前者は相手の会話に対して厳密なタイミングで行う必要がありますが、後者は実はタイミングはそんなに重要では無いように思えます。人間でも、間髪入れず内容のあるこたえを返せるのは頭のいい人だけです。頭の悪い人も「うーん、そうだね。それなら・・」といったように間をおいて解答できます。
この「うーん、そうだね。」によって前者のような会話の空気感を満たしつつ、後者の解答を作るまでの時間稼ぎをしています。
ここまで考えて思い出したのが、ロボットの行動に置けるサブサンプションアーキテクチャでした。
サブサンプションアーキテクチャ
サブサンプションアーキテクチャとは元々ロボットの行動のアーキテクチャで、複雑な振る舞いを多数の単純な振る舞いを行うモジュールに分割し、それらに階層構造を与えるものです。
上の図から解るように、下層のモジュールは、それを行わないと死んでしまう、怪我をするような事象にたいして素早く対応します。一方で、上層はそのロボットが達成したい目的に対しての戦略をゆっくりと考えます。
下層のモジュールは素早く動きますが、上層の命令が優先されるため、一旦下層モジュールによって反射的に何かを避けたものの、あとから上層の命令で敢えてそこを突き進むといった行動が可能になります。
歴史
サブサンプションアーキテクチャの利点は、反応が早いことです。
サブサンプションアーキテクチャ以前のロボットは、センサから情報を読み取り、そこからロボットを取り巻く環境を計算して、最適な戦略を建て、行動を決定し、モーターを動かしていました。この方法だと、たしかに正確に動くもののものすごく動きや反応が遅いロボットができてしまったのです。
サブサンプションアーキテクチャの登場によって、危険の回避等素早く動くべきものが素早く行えるようになり、常に動き回るような動的なロボットが出てくるようになりました。
サブサンプションアーキテクチャの会話への適用
サブサンプションアーキテクチャは会話に対しても当てはめることができそうです。
会話 AI にとって、最も避けるべきは会話をしている空気感の破綻です。これを避けつつ、内容のある会話を模索していきます。
- 上層(Explore)
- 会話の長いコンテキストや、自身・相手の感情モデルを管理し、会話の方向性を決めます
- 相手の感情モデルから自身の感情モデルの状態を決定します
- 自身の感情モデルに従って声のトーンや発話の速さを決めます
- 恐らく上層が直接発話をするというかは中層や下層に働きかける感じになります
- 会話の長いコンテキストや、自身・相手の感情モデルを管理し、会話の方向性を決めます
- 中層(Wander)
- 相手の発話に対して、何かしらの意味のある応答を生成し返します
- 下層(Avoid)
- 相槌を打つ事により、返答のリズムをつくります
- 相手の発話状態を監視して、相手の発話にかぶらない様にします
- 現状の技術では音声認識に時間がかかる印象なので、このレイヤーは音声認識を経る前の段階で動く必要がありそうです
これにより、理想的には以下が得られるはずです
- リズム感のある会話
- 自分と相手の感情やテンションの同期
- 方向性のある会話
まあ、各レイヤーで十分なクオリティを作るのが大変難しそうですけどね!