LINE、Heroku、Salesforceを利用したChatbotのアーキテクチャ
最初に、SalesforceやHerokuを活用しモバイルアプリやWebサービスの開発を行っている株式会社タンバリンの白石尚也氏が登壇。同社で開発した、携帯料金を教えてくれるLINE Botを題材に、デモを交えながらChatbotの技術について概説した。
![株式会社タンバリン ソリューションアーキテクト 白石尚也氏](http://cz-cdn.shoeisha.jp/static/images/article/10478/10478_001.jpg)
多くの企業がLINE Botを活用したコンシューマ向けサービスを展開しており、ヤマト運輸やドミノ・ピザジャパンがビジネスで目覚ましい成果を上げていることから、LINEというプラットフォームの高い浸透度がわかる。同社がLINEを採用したのも、より多くのユーザに使ってもらいたいからだ。
同社のLINE Botは、友達登録をしたユーザが質問をテキスト入力すると、Herokuで文章解析を行い、Salesforce上の顧客情報やナレッジ情報を活用して応答を返す。応答内容はSalesforceに蓄積し、Chatbotをさらに育成することが可能だ。Chatbotでは対応しきれない場合は、SalesforceのLive Agent機能を使い、オペレータによる有人チャットに切り替えることができる。
![Salesforceの顧客情報と連携し、携帯料金や通信料を通知するLINE Bot](http://cz-cdn.shoeisha.jp/static/images/article/10478/10478_p1a_s.jpg)
LINE Chatbotは、LINE、Heroku、Salesforceを利用している。LINEではMessaging API、LINE Loginを使い、HerokuのWeb DynoがLINE側からのHTTPリクエストを捌く。一般的なLINE Botと違い、Salesforce上のナレッジ、Bot応答、Bot応答不可、Bot辞書などのデータベースを活用して応答を返す点が特徴的と言える。HerokuではHeroku Connectを使ってこれらのデータベースと相互に接続している。
![LINE Chatbotのアーキテクチャ](http://cz-cdn.shoeisha.jp/static/images/article/10478/10478_p1_s.gif)
Chatbotに活用できるSalesforce、Herokuの技術
続いて、株式会社タンバリン 安部草麻生氏が、Chatbotでどのような技術を使い、実装しているかを解説した。
![株式会社タンバリン Webエンジニア 安部草麻生氏](http://cz-cdn.shoeisha.jp/static/images/article/10478/10478_002.jpg)
自然言語解析を行い、ログDB型の対話を実現
Chatbotの対話の仕組みには一般に、質問に対して辞書内の応答をオウム返しにする辞書型、Bot自体が応答を生成するBot型などがある。今回採用したのは、想定パターンをあらかじめ用意し、質問とのマッチ率が高い応答を返すログDB型だ。Bot応答データベースはSalesforce上に用意されているが、GUI画面での保守が可能であり、利便性が高いという側面がある。
対話を実現するには自然言語解析が必要だ。ChatbotではHerokuのWeb Dynoで形態素解析エンジンMecabを使い、文章を単語に分解し、辞書をベースに単語の品詞を判別する。その結果から名詞を取り出し、Salesforce上のBot応答データベースの質問から抽出した名詞をマッチングし、最も類似度の高い質問に対する応答を返す。その際に応答をどんどん蓄積していくことで、対話の精度の向上を図っている。
当然ながらChatbotでは応答できない質問が送られてくる場合もあるが、そのたびに有人対応に切り替えるのは現実的ではない。そこで、応答できない質問についてもSalesforce上に蓄積することで、Chatbotによる応答率を高めている。
HerokuのWorker DynoとSalesforceのLive Agentで有人チャット
有人チャットを行うLive Agentへの接続には、Web DynoではなくWorker Dynoを使用している。Live AgentはREST APIに対応しており、ロングポーリングを使用するが、Web Dynoは最大30秒でタイムアウトする。何よりもWeb Dynoに時間のかかる処理を行わせると、キューがたまってHTTPリクエストを捌けなくなり、HTTPレスポンスが遅れ、ユーザを待たせることになってしまう。そこで、Web DynoにはHTTPリクエストを捌くことに専念させ、Live Agentとの仲介役にWorker Dynoを採用した。時間のかかる処理はキューイングしておき、バックグランドで処理する、バックグランドワーカーという仕組みである。Worker Dynoは、Web Dynoと同様にスケールが容易で、1日に1回リスタートするという特徴がある。
Einstein Visionを使った画像認識
安部氏は、Chatbotを進化させるために画像認識が必要と述べた。HerokuはアドオンとしてEinstein Visionという画像認識機能を提供している。Einstein Visionは、独自にモデルを作成してトレーニングを実施でき、APIベースで容易に組み込むことが可能だ。たとえば、自社ロゴの識別や、画像による製品の判別などの用途が考えられる。
![自然言語解析処理](http://cz-cdn.shoeisha.jp/static/images/article/10478/10478_p2_s.gif)
アプリケーションの開発・デプロイを容易にするHeroku
株式会社セールスフォース・ドットコムの阿部崇氏は、Herokuの特長を紹介した。
![株式会社セールスフォース・ドットコム プラットフォームスペシャリスト 阿部 崇氏](http://cz-cdn.shoeisha.jp/static/images/article/10478/10478_003.jpg)
Herokuは、Salesforce社が提供するPaaS(Platform as a Service)である。アプリケーションを開発し、稼働するには、サーバを購入し、OS、ミドルウェア等をインストールして環境を構築しなければならない。Herokuでは、Salesforce社がミドルウェアの領域まで統括・管理してサービスを提供しているため、開発者はアプリ開発に集中し、迅速かつ簡単にデプロイできる。ツールやアドオンは、オープンソースとコミュニティのベストプラクティスをもとに用意されており、チューニングを考える必要がなく、開発にかかる時間とコストを抑えられる。
Herokuは、3つの要素から構成される。Dynoは、作成したプログラムを動かすためのLinuxコンテナである。並行稼働するDynoの数を増やすことで容易にスケールすることが可能だ。Dataは文字どおりデータの管理・保管を行う。PostgreSQL Redis、Kafkaなどが用意されており、アドオンとして利用できる。Elementsはサードパーティのアドオンであり、ボタンのクリックで簡単にプロビジョニングができる。
![Herokuの構成要素](http://cz-cdn.shoeisha.jp/static/images/article/10478/10478_p3_s.gif)
Chatbotを進化させるAIプラットフォーム「Einstein Language」
最後に、株式会社セールスフォース・ドットコムの田中宏樹氏が、Einstein Language[*]の概要を紹介した。
![株式会社セールスフォース・ドットコム デモエンジニア 田中宏樹氏](http://cz-cdn.shoeisha.jp/static/images/article/10478/10478_004.jpg)
Einstein Languageは、Salesforceが提供するAIプラットフォーム「Einstein Platform Services」のソリューションの1つで、AIを使ったテキスト分析を行うEinstein IntentとEinstein Sentimentを提供する。
Einstein Intentは意図分析である。文章を事前に設定しておいたカテゴリに分類し、文章をどのような意図で発したかを読み解く。たとえば、「近くにおいしいお店は?」という文章からは「現在地周辺のレストランを検索」という意図を分析できる。AIを利用するため、トレーニング用のモデルが必要だが、提供されているもの以外に、文章とカテゴリのペアを記述したファイルをもとにカスタムモデルで作成し、利用できる。
Einstein Sentimentは感情分析である。文章をポジティブ、ネガティブ、ニュートラルに分類し、文章がどのような感情のもとに発せられたかを読み解く。たとえば、「今日のイベントは楽しかった。また、行きたい」という文章には「64%ポジティブ」。「昨日買った服が破れてしまった。あそこではもう買わない」には「59%ネガティブ」のように分析する。ラベル(ポジティブ、ネガティブ、ニュートラルの識別分類)は固定されるが、カスタムモデルを作り利用することも可能。
Einstein Languageは、さまざまなシーンでの活用が考えられる。たとえば、Einstein Intentを利用すれば、顧客による問い合わせに対して的確な応答を返すChatbotを開発できる。また、Chatbotでユーザが入力した文章がEinstein Sentimentによりネガティブと判定された場合に、有人チャットに切り替えるといった使い方も可能である。
当日のセッション資料および動画は公開されているので、より詳細な内容はそちらを参照したい。
[*] イベント実施(2017年9月27日)時点で、Einstein Languageは公開ベータテスト中です。正式リリース時には仕様が異なる可能性があることをあらかじめご了承ください。
![(左から)阿部崇氏、白石尚也氏、安部草麻生氏、田中宏樹氏](http://cz-cdn.shoeisha.jp/static/images/article/10478/10478_005.jpg)
(左から)阿部崇氏、白石尚也氏、安部草麻生氏、田中宏樹氏