音声チャットボットを作ってみる

チャットボットアプリの仕組み

コンピュータと対話するアプリを「チャットボット」と言います。チャットボットにはテキストで対話するものもありますが、今回は、音声でアプリと対話ができる「音声チャットボット」の開発をしていきます。まずは、一般的なチャットボットの仕組みについて整理しておきます。

タスク指向型と非タスク指向型

世の中には様々なチャットボットがありますが、対話の目的によって作り方は大きく異なります。

「天気予報を確認する」「ホテルの予約をとる」といった特定のタスクを実行するための対話は、タスク指向型と言われます。タスク指向型では、日付や地名(固有名詞)、数字などを正確に読み取る必要があります。また、不足する情報を確認するような「シナリオ」も必要になります。

タスクに必要な情報が集まった時点で、ユーザに結果を返します。

明日晴れるかなあ

「どこの天気ですか」

京都

「明日の京都の天気は、、、」

このシンプルな対話では、まず、「晴れるかなあ」という言葉の意図(天気予報が知りたい)を推定しています。もちろん「雨かなあ」でも同じ意図になります。

そして、天気予報に必要な、時間(明日)と場所(京都)をユーザから聞き出すように、シナリオが作られています。

これに対して、非タスク指向型では、

「明日は晴れるかなあ」

「明日は晴れたらお出かけですか?」

といった、雑談の様な応答をします。

音声チャットボットとしては、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」とを組み合わせて、音声チャットボットを完成させます。