SENSORS

コラム

2016.12.20

AIが入ったBotの作り方を学んでみました!

タグ

「AIが入ったBotの作り方を学ぼう」
- Oracle Cloud Developers 東京イベント参加 -

1.はじめに

AIが入ったBotの作り方を学んでみました!

様々な分野で注目されているAI技術ですが、まだ距離を感じている方も少なくないと思います。しかし近年、AIを活用した技術は思ったよりも我々の身近なところにまで来ております。今回はその1つの例としてAIを活用したBot(ボット)作成を実際に体験してみました。

2.概要

Botとはまるで人のように会話することができるプログラムのことで、ユーザーからのメッセージを取得し、様々な目的に合わせて機能させることができます。最近ではSlackやTwitter, Facebook Messengerなど幅広いコミュニケーションアプリケーションでBot開発を可能にするツール(APIやSDK)が公開されています。さらに、便利なクラウドサービスと連携することで、より人間に近いものにすることができるようになり、好奇心をくすぐるばかりです。

今回のイベントではサンプルBotを実際に作成してみることで、その挙動を確認しながら、完成までどのような流れになるのか体験してみました。また、各機能に使われる技術に関しても簡単にご紹介できればと思います。

3.実際に作ってみる!

AIが入ったBotの作り方を学んでみました!

サンプルBotは以下の流れで作ります。

- 環境準備
- Bot本体の開発
- Botをより賢くするために
- Botとのメッセージのやり取りを確認

環境準備

まずは以下の3つのツールをPCにセットアップします。

- Node.js:Bot本体の開発に使用するプログラム言語
- Git:開発のために作成するファイルのバージョン管理と、クラウドサーバーとの連携に使われます。
- Heroku:ヘロクと言う一種のクラウドサーバーです。Bot本体のファイルが稼働する環境となります。

各ツールをPCにインストール、またはアカウントの登録を行うことで開発する準備が整います。
また、今回のBotはLINEと連動することになりますので、LINEビジネスアカウントに登録することも必要になります。

それぞれのツールのセットアップにかかった時間は30分程度でした。サンプルとはいえBotの開発なのでもっと複雑な準備が必要だと思っていましたが、非常にシンプルなセットアップでした。

Bot本体の開発

Botを構成するプログラム、つまりBot本体はプログラム言語をテキストエディターに直接書きながら行いました。今回のイベントでは、あらかじめ用意されたサンプルソースコードを利用させていただきました。

このBot本体を実際に動かすためには以下の流れが必要になります。

  • 1. プログラム言語によるBot本体の開発
  • 2. クラウドサーバー上にBot本体をセット
  • 3. LINEアカウントと連動させる

ここまでの作業で、とりあえず自分のスマートフォンのLINEアプリにBotを追加し、メッセージを送って、Botに返信させることができるようになります。ただしこれだけだとBotは単純なプログラムに過ぎないのでプログラムによる指示に従ってメッセージを返すくらいしかできません。

Botをより賢くするために

単純なプログラムに過ぎない状態だったBotに対して、もっと賢い動きをさせるために、便利なクラウドサービスが多数ありますのでそれらと連携させてみます。

今回のサンプルBotにはユーザーが送ったメッセージから食品に該当する単語を抽出しカロリーを教えてくれ、さらにはオススメのメニューを教えて欲しいという意図を理解してくれる機能をつけてみたいと思います。

それを可能にしてくれるのが、以下3つのクラウドサービスです。

形態素解析

まずは、ユーザーが送ったメッセージの内容からBotに理解して欲しい単語を抽出させる必要があります。そこで使われる技術が「形態素解析」です。
いきなり難しい言葉が出てきました。まず形態素解析を簡単に説明すると、我々が普段使っている言葉である「自然言語」をコンピュータで処理するために、文法や辞書情報に基づいて、文章を最小単位である「形態素」に分解する作業と言えます。
上記の作業をやってくれるツールを「形態素解析エンジン」と言います。今回はその中で日本語に対応したオープンソースのMeCab(めかぶ)を使います。このツールを使うことで、Botはユーザーから送られたメッセージを分解し、食品に該当する単語が分かるようになります。

食品データベースとの連携

食品名が分かっていても、それだけでは何の面白みもないので、食品に対するカロリーなどの情報を教えてくれる機能をつけてみたいと思います。
そこで使うのが食品データベースです。こちらは文部科学省から公開されている日本食品標準成分表のExcelやPDFファイルなどを、プログラムから利用できる形で整形して、クラウドデータベースに入れたものです。
今回はイベント主催側で用意してくれたものが既にありましたので、そちらを使わせていただきました。
これでBotはユーザーからのメッセージを受け取って、その中から食品名があった場合は、その食品に該当するカロリーなどを教えてくれるようになりました。

自然言語処理

もう少し機能を追加して、ユーザーが送った文章の意味を理解し、それに対して返事してくれるようにしてみましょう。
しかし、Botにこの機能をつけるためには1つ問題点があります。我々が日常的に使っている言葉の中には一つの目的を持っていても様々なバリエーションがある場合があります。
例えば「お薦めの食事を教えて欲しい」という意思表示を行う場合、以下のような表記が考えられます。

- お薦めを教えてください。
- お薦めは何?
- このお店イチオシは?

人はこのようなバリエーションを把握することが得意ですが、コンピュータにとってはとても苦手な仕事です。
ですが、ユーザーのメッセージを取得しその意図を把握する、今回のようなBot開発では上記のようなケースをたくさん扱うことになります。また、従来の条件式や正規表現といった手法を基本とするプログラムは決まった答えしか返せないので極めて融通がききません。
そこで登場するのがDeep Learning(ディープラーニング)と呼ばれる機械学習手法を採用した自然言語解析です。この機能を加えることで、要望に応じて適切な判断ができるBotを作ることができます。

今回は上記のような表現のバリエーション、つまり「表記ゆれ」を吸収するために、「api.ai」というサービスを使います。
無償のアカウント登録をするだけで、Web管理画面から1つの意図に対して有り得る表記ゆれに対する例文を複数登録することができます。
この例文のパターンを出来るだけ多く登録し、学習させることでBotをより賢くさせることができます。


Botとのやりとりを確認

AIが入ったBotの作り方を学んでみました!

ここまでがBot開発の流れとなります。最後に完成したBotとLINEアプリで実際にやりとりをしてみた結果です。

私が送ったメッセージの中から「ハンバーグ」という単語を抽出してカロリーを教えてくれました。また、オススメのメニューを教えてくれと送ったメッセージのパターンを把握し、カレーライスと答えてくれました。

実は今回つけたオススメ機能は「オススメの食事を教えて」という、ユーザーの意図に対してあり得る様々な表現を理解させるのが目的だったため、今のところ教えてくれるメニューはカレーライスだけです(笑)。

この部分をもう少し工夫して、前に食べた食品と関連付けして栄養バランスに応じたメニューを教えてくれたり、人気のメニューを教えてくれたりする機能がつけられたらもっと面白いかもしれませんね!

4.最後に

サンプルで作成したBotではありますが、食品のカロリーを調べるのにとても便利なものが出来上がりました!実際に動いているのを見ると返信もすぐ来ますし、ネットで検索する動作とは違う形で情報が得られてとても新鮮でした。
他にも便利なクラウドサービスと紐づけることで、もっと面白いBotにしていきたいと思います。

実際にBotに使われているAIはとても複雑な処理をするものですが、既に公開されているオープンソースだけでも言葉を認識する機能を持つBotを開発するには十分な印象でした。
ご自分のPCがあれば誰方でも作れる環境が整いますので、AIコンテンツのサンプルとして一度作ってみてはどうでしょうか。または、このような技術でどのようなWebサービスが出来上がるか想像してみてはいかがでしょうか。

    イメージ  

参考文献

 

タグ

サービスに関するご相談・お問い合わせ

実績や各種サービスに関するご相談やお見積もりなど、お気軽にお問い合わせください。

この記事の著者

システムエンジニア 韓国出身

システムエンジニア 韓国出身

韓国出身のシステムエンジニアです。
Web業界の最前線で多職種の方々が在籍している環境で、日々アンテナを張り新しい知識や技術を勉強しています。
今後は、今まで経験したことのないAIなどの分野にも挑戦してみたいと思います。

一覧に戻る