音声チャットボットを作ってみる
チャットボットアプリの仕組み
コンピュータと対話するアプリを「チャットボット」と言います。チャットボットにはテキストで対話するものもありますが、今回は、音声でアプリと対話ができる「音声チャットボット」の開発をしていきます。まずは、一般的なチャットボットの仕組みについて整理しておきます。
タスク指向型と非タスク指向型
世の中には様々なチャットボットがありますが、対話の目的によって作り方は大きく異なります。
「天気予報を確認する」「ホテルの予約をとる」といった特定のタスクを実行するための対話は、タスク指向型と言われます。タスク指向型では、日付や地名(固有名詞)、数字などを正確に読み取る必要があります。また、不足する情報を確認するような「シナリオ」も必要になります。
タスクに必要な情報が集まった時点で、ユーザに結果を返します。
「明日は晴れるかなあ」
「どこの天気ですか」
「京都」
「明日の京都の天気は、、、」
このシンプルな対話では、まず、「晴れるかなあ」という言葉の意図(天気予報が知りたい)を推定しています。もちろん「雨かなあ」でも同じ意図になります。
そして、天気予報に必要な、時間(明日)と場所(京都)をユーザから聞き出すように、シナリオが作られています。
これに対して、非タスク指向型では、
「明日は晴れるかなあ」
「明日は晴れたらお出かけですか?」
といった、雑談の様な応答をします。
音声チャットボットとしては、AlexaやSiriが有名です。これらは、タスク指向型と非タスク指向型を上手く組み合わせて、自然な対話を実現しています。
開発方法
タスク指向型の場合には、市販のチャットボットツールを使うと効率的です。
チャットボットツールは、特定のキーワードや、あらかじめ学習させておいた言い回しで、シナリオを分岐させることができます。最も有名なのは、Googleが提供している「Dialogflow」でしょう。「OK、Google!」のGoogle Assistantから呼び出すことのできるアプリを開発するのにも使います。また、LINEやSlackといったツールとも簡単に連携することができます。
一方、非タスク指向型のチャットボットの作り方は、現時点で決まったものはありません。
例えば、感情(ポジティブ/ネガティブ)を分析したり、頻出ワードを覚えて、そのワードを使って文章を生成したり、「そうだね」とか「なるほど」といった共感ワードを使って、対話を続けさせたり、、より良い雑談を実現するためのアイデアはいっぱいあります。
今回は、深層学習のモデルを使って、「非タスク指向型」の雑談ボットを作っていきます。
音声チャットボットの開発手順
今回は、構成要素(ソフトウエアモジュール)に分けて、少しづつ開発していきます。
1.モバイルアプリの雛形を作る
まず初めに、音声認識と音声合成ができる「おうむ返しアプリ」を作ります。
開発には"Flutter"を使います。 FlutterはGoogleが開発したモバイルアプリの開発フレームワーク(枠組み)です。
2. 応答生成モデルを作る
次に、非タスク指向型の対話を実現するモデルを学習させます。
自然言語処理の分野では標準的なTransformerモデルを使います。今回の目的に照らして、 Google の T5(Text-to-Text Transfer Transformer) を使って、ファインチューニングしていきます。
最終的には、学習させたモデルをサーバ上に実装し、インターネットを介して利用可能にしていきます。
3. 統合してアプリとして完成させる
最後に、「おうむ返しアプリ」と「WebAPI」とを組み合わせて、音声チャットボットを完成させます。