こんにちは。三菱総研DCS 金融事業部の松岡です。
当社の持つIT企業ならではのリソースを活用して、社会貢献活動を企画検討する社内プロジェクト『Digital Aid Project』で、神奈川県横浜市の公立中学校の個別支援学級にて学習支援を目的としたコミュニケーションロボットを設置し学習支援するプロジェクトに参画しています。
今回は生徒とのコミュニケーション(一問一答)の部分を準備した時の話です。
Google Dialogflowについて
生徒との会話部分の実装に、Google Dialogflowを利用しました。 こちらはGoogle社が提供している、高度な自然言語処理等を内包したクラウド上の開発スイートになります。 全く知識がない状態でさわってみたのですが、意図せずノーコードで準備できてしまい敷居の低さに驚きました。 生徒に環境を展開し、プログラミング授業の教材として会話の追加なども簡単にできそうです。 また、一度デプロイしてしまえば(Integrations機能で)様々な文字、音声ツール等との連携も簡単にできるため、 いままで何の気なしに触れていたチャットボットの理解が得られるだけでなく、スマホなどのアシスタント機能への連携など、夢が広がります。 昔趣味で人工無脳(古い?)を作成していた時に比べると、良い意味で隔世の感がありました。
工夫した点
対話部分は先生からベースの問答をいただいていたので困ることはなかったのですが、準備が終わりいざテストをしてみると、いくつか想定外の挙動がありました。(一部は授業中に判明。。) ・名前の処理 当初問答に名前を答える部分は無かったのですが、チーム内で「オウム返しでロボットから名前を呼ばれた方が生徒が喜ぶのでは」との提案があり登録してみました。 高度な形態素解析をあてにしていたせいもあるのですが、 1、珍しい苗字だと、近い苗字に誤認してしまう(例:宇和田⇒和田など) 2、内部処理で苗字を漢字で認識するが、呼び返し時には漢字を改めて読むため、読み間違えが発生する (例:"なかや"と名前を発言⇒中谷と漢字で認識⇒呼び返しでは"なかたにさん"となる) といった問題が発生しました。 これらについては学習機能(Training機能)などで改善はされるものの、苗字、名前を正しく認識する難易度はやや高そうです。 今回は使用しませんでしたが、完全な呼び返しを期待するのであれば、別環境のDBに名前を事前登録して呼び出すなど、Dialogflow以外の環境も用意する方法があります。この場合でもローコードで実装できそうです。 ・似たような問答の混同、省略への対応 似たような質問があった場合、別の問答に分岐してしまうことがありました。 問答は1つずつ(Intents機能で)登録してあるのですが、問と完全一致しない場合でも回答してくれるケースがほとんどです。 例:"好きな食べ物はありますか?"でも"好きな食べ物ある?"でも同一回答で処理 ただし一問一答ではなく、さらに会話が続くように登録(follow-up intentを設定)した場合、キーワードを誤認識し、 違う答えに分岐してしまうことがありました。 例:好きな食べ物はありますか⇒好きな食べ物はチョコレートです。あなたは何が好きですか?⇒〇〇が好きです⇒〇〇は美味しいですよね!となるはずが、〇〇が食べ物と認識できずに別の分岐に飛んでしまう また、省略語に対してはロボットならではの挙動もありました。 例:学年を聞かれて"1年生"だと良いが、"1年"や"1"と言われた場合は判断不能となって聞き返す こちらも学習機能(Training機能)で改善されますが、キーワードのジャンルを登録(デフォルトで登録のあるEntityに紐づけ、あるいは自身で設定するメニューのEntitiesで登録)することで精度を上げることができます。 デフォルトentityのうち"any"というパラメータが万能のためつい使ってしまうのですが、誤認識の元になる可能性があるよ、という経験談でした。 今回はスムーズな授業のため、最終的にはfollow-up intentは外して一問一答の形にしましたが、生徒とのコミュニケーションを考えると、今後は会話が続くようにしたいと感じました。
まとめ
今後も機会があれば、会話のバージョンアップ&複雑化をしてみたいと考えています。 また顔認識、声紋認識など対話者の認識率を向上させ、例えば授業中に先生や他の人が発言していても、正しく会話が成立するよう実装するなど、改善点がどんどん浮かんできます。 性能向上し、最終的にはロボットが教室に自然にいて、生徒同士のようにいつでも会話できる未来に近づけたらうれしいな、と考えています。 最後に、うまくコミュニケーションが取れた時の子供たちの達成感に満ちた笑顔は、何よりの喜びでした。