2019/01/09

「デブスト」セッション『機械学習 × グラフデータベース × チャット で繋ぐヒューマンリレーションシップ!!』

こんにちは、サービス&プロダクトデザイン本部の一ノ瀬(@rettar5)です。
ドリーム・アーツはこれまで「デブサミ2018」「デブサミ2017」のレポートでもご紹介したとおり、技術イベント Developers Summit に参加してきました。そして今回、新たに設立されたU30向けの技術イベント Developers Boost (通称デブスト) にも登壇しました!

デブストでは対象が 30歳以下のITエンジニア と限定されており、スピーカーもオーディエンスも全員30歳以下という、デブサミとはまた違った雰囲気のイベントです。
そんな若いエンジニアの熱気のなか、 カベを壊せ!「機械学習」×「グラフデータベース」×「チャット」で繋ぐヒューマンリレーションシップ!! というテーマで講演しました。

デブストで登壇する一ノ瀬

「新しく○○という技術を使いたいけど、試したことないしよく知らない…」
「社内だったら使ったことある人いそうだけど、だれがやっているのかわからない……」
といったような経験はありませんか?
今回はこのような 仕事を効率化するためのチームなのに、そのチーム間で生まれてしまったコミュニケーションの壁をどうにかできないか という課題を、ドリーム・アーツのビジネスチャット「知話輪®」と「機械学習」「グラフデータベース」を組み合わせて解決できないか挑戦してみました。

このイベントの参加者はITの技術者が多いため、 やりたいことをどういった技術をどのように使って実現するか という内容を中心にスライドをまとめています。
スライドを見ていただいた方はお気づきかもしれませんが、20分の発表時間に対して内容が盛りだくさんです。
技術の解説となるとどうしても時間がかかってしまいますが、実は解説時間を増やすために直前で非表示にしたスライドがあります。

ということで、当日泣く泣く省いた内容をここでご紹介します。


【裏話-その1-】当日発表できなかったあのスライド「実は機械学習の精度が悪かった」

機械学習の精度についての仮説

今回、 Doc2Vec と呼ばれる機械学習を応用した User2Vec という仕組みを紹介しました。
User2Vec とは、ユーザーがチャットに投稿したメッセージを活用し、その人の知識・興味をベクトル化することによって、「あるキーワードを知っている人」をレコメンドするための仕組みです。
ユーザーレコメンデーションをしてくれる User2Vec ですが、実際に各ユーザーの投稿メッセージから学習済みモデルを作成しても、関係ない人ばかりレコメンデーションされるという問題がありました…。
というのも、 User2Vec では機械学習にニューラルネットワークを利用していますが、ニューラルネットワークを使った機械学習では、学習用のデータを大量に用意しなければ機械学習の精度が上がらないということが一般的に知られています。
学習用のデータがチャットの投稿メッセージであれば、最近入社した人やチャットをあまり使わない人はデータが少ないため知識・興味のベクトルが偏ってしまい、求めていた結果が得られない可能性があります。

そこで「 あるキーワードが投稿されたグループは、そのキーワードを投稿していなくても詳しい人がいる可能性がある 」という仮説を立て、機械学習の使い方を変えてみました。

機械学習改善前

改善前は キーワードを知っているユーザーを返す学習済みモデル からユーザーを取得していたのに対し…

機械学習改善後

改善後は キーワードを知っているグループを返す学習済みモデル からグループを取得し、そのグループに所属するユーザーのなかから キーワードを知っているユーザーを返す学習済みモデル を使ってユーザーを取得するようアプローチしてみました。
業務で使うビジネスチャットでは、お客さまや案件・プロジェクトごとにチャットグループが作成されます。
つまり、メッセージを投稿していなくても、グループに参加していれば そのグループに投稿されている内容を知っている 可能性があると言えます。
キーワードを知っているグループが取得できれば、あとはそのグループの参加ユーザーに限定した キーワードを知っているユーザーを返す学習済みモデル からユーザーを取得するだけです。
この仮説を元に学習済みモデルを作成し動作確認をしたところ、キーワードに対してイメージしていたユーザーが取得できるようになりました。
このノウハウはぜひデブストで紹介したかったのですが、説明する時間が足りず、スライドを入れても理解してもらえない可能性があり、泣く泣く非表示スライドとなりました…。

 

【裏話-その2-】当日発表できなかったあのスライド「実はあの構成ではチャットBOTが動かない」

こちらもまた衝撃的な裏話ですが、実はスライド内で14回も登場するあの構成図ではチャットBOTが動きません。

チャットBOTが動かない構成図
14回も登場したのにチャットBOTが動かない構成図

今回チャットBOTに話しかけて「キーワードを知っている人」を教えてもらいますが、 話しかけたとき というタイミングを知るために WebhookFlask というWebサーバーを使います。

WebhookとFlaskを使ったチャットBOT構成図

上の図では一見Webhookを送信できているように見えますが、 「知話輪」のサーバーはクラウド上 に、 Flaskのサーバーは自分のPC上(ローカル環境) に構築されているため、ネットワークの都合で実際には通信できません。

Webhookを送信できないパターン

そこで、WebhookをFlaskのサーバーに送るため、 ngrok というサービスを経由してNAT超えをおこないました。

ngrokを使った正しいチャットBOT構成図

この ngrok は「ローカル上に立てたサーバーを、サーバーの設定を変えることなくオンライン上に公開することができるサービス」で、以下のようなケースに使われることがあります。

  • スマートフォンから、自宅の家電と繋がったRaspberry Piのサーバにアクセスしたい
  • PC上の開発環境で実装しているWebページを、LAN外にあるスマートフォンからアクセスして動作確認したい

無料で使うことができ、既存の仕組みと組み合わせれば活用の幅も広がるため、ぜひ紹介したいサービスでしたが、こちらも時間の都合によりスキップされることとなりました…。


今回はU30のイベントとしてデブストに参加しましたが、2月14日にはドリーム・アーツCTOの石田が、デブストの本家であるDevelopers Summit 2019にスピーカーとして参加します。

Developers Summit 2019 では、10年以上開発を続けているWebアプリケーションを、これからも進化できるようにマイクロサービス化した事例をご紹介する予定です。
ご興味があればこちらもよろしくおねがいします!

 

また、デブサミ前の2月2日(土)には、エンジニア向けの勉強会も開催します。
同じくCTO石田のライブコーディングとハンズオン形式で進めていきます!ぜひご参加ください☆