1
/
5

感情分析 bot は殺伐とした社内チャットを救済するか?

プロローグ

 遙か彼方の空に暗雲が立ちこめている。時折、稲妻が光るのが見える。その下にはかつて栄華をきわめた複合施設の廃墟があるはずだ。高層オフィスビル、タワーマンション、エンタメ商業施設からなるひとつの街。現在はそのまわりを禍々しい黒霧が覆い尽くしていて目視することはできない。

 資本的特異点(シンギュラリティ)から 3 年。暴走した資本主義に支配された世界。この世界では「生産性」が低いほど生存することが困難になる。人々は、生きるために生産性を高め、生産性を高めるために生きた。
 チートが横行し、なかには ChatGPT に手を染める者もいた。

 あらゆるチートを駆使して生産性を爆上げした私は愚かにも資本主義に戦いを挑み、そして敗れた。

「私の生産性は53万です」

 桁が違った。ひとりの人間になんとかできるレベルの生産性ではなかった。
 こうして私は Slack を使って仲間たちと連携を図るようになる。

 Slack は確かに生産性を高めてくれる、しかしテキストコミュニケーションに疲弊する時期も出てくる。
 生産性だけを追い求めること自体が間違っているのだろうか…
 マクドナルドで自問自答を繰り返す日々。

 隣の席の女子高生の会話を聞くでもなく聞いていていたある日、まさに天啓を得た。
 大切なのは生産性に「エモ」をミックスすることではないか。
 テキストチャットコミュニケーションに「エモ」を実装することで、生産性のタイプを変容することができるはずだ。

 そこで私は「感情分析 bot」の開発に取りかかった。
 以下はその簡単な記録である。

感情分析 bot 開発

1. 感情分析

【辞書方式】

  • 文章に含まれる単語を辞書で引いて判定
  • 辞書に含まれない単語があると弱い
  • OSS のライブラリなら無償利用できるし、あれなら自力で実装できる


日本語評価極性辞書を利用したPython用Sentiment Analysisライブラリ oseti を公開しました - Qiita
東北大学の乾・鈴木研究室のページで公開されている日本語評価極性辞書を使ったSentiment Analysis (いわゆるネガポジ判定) ライブラリ oseti を公開しました。これは日本語評価極性辞書を用いて文の評価極性 (ポジティブ/ネガティブ) のスコアを計算するものです。 何番煎じかって感じはありますけど、自分のPCの中にだけずっとあるのはもったいないので公開しました。 ※バージョンv0.2 (2019/10/7公開) からの変更点を追加しました。 このライブラリはMeCabを利用しているためMe
https://qiita.com/yukinoi/items/46aa016d83bb0e64f598


【ML】

  • トレーニング済みのモデルを使って判定
  • 自力でデータセット用意するのが難しいので、お金払って使わせてもらう

 今回は、 Google の Natural Language AI を利用しました。
 結果が浮動小数点数で返ってくるので、それをアイコンに変換する仕様にしてみました。


Cloud Natural Language | Google Cloud
Send feedback Content classification has a major update available. See here for more information. Derive insights from unstructured text using Google machine learning. New customers get $300 in free credits to spend on Natural Language. All customers get
https://cloud.google.com/natural-language


2. Slack bot

 以前、 Hubot を使って作ったことがあるのですが、今回は Bolt を試してみました。


Slack | Bolt for JavaScript
このガイドでは、Bolt を使用して Slack アプリを起動し実行する方法について説明します。その過程で、新しい Slack アプリを作成し、ローカル環境を設定し、Slack ワークスペースからのメッセージをリッスンして応答するアプリを開発します。 💡 このガイドでは ソケットモード を利用します。ソケットモードは、Slack アプリ開発をとりあえず始めてみるときやあなたのチームだけのためのアプリをつくるときにおすすめのやり方です。もしすでに HTTP をアプリのコミュニケーションプロトコルとしてすると
https://slack.dev/bolt-js/ja-jp/tutorial/getting-started
Slack | Bolt for Python
このガイドでは、Bolt for Python を使った Slack アプリの設定と起動する方法について説明します。ここで説明する手順は、新しい Slack アプリを作成し、ローカルの開発環境をセットアップし、Slack ワークスペースからのメッセージをリッスンして応答するアプリを開発するという流れになります。 この手順を全て終わらせたら、あなたはきっと ⚡️ Slack アプリのはじめ方 のサンプルアプリを動作させたり、それに変更を加えたり、自分のアプリを作ったりすることができるようになるでしょう。 💡
https://slack.dev/bolt-python/ja-jp/tutorial/getting-started


【Socket Mode】

 Socket Mode というのが使えるようになってますね。LAN 内から Slack に WebSocket で通信できるので、サーバー不要。どこにでも配置できます。


Intro to Socket Mode
If you don't wish to expose a public, static HTTP endpoint to communicate with Slack, Socket Mode can help. Socket Mode allows your app to use the Events API and interactive components of the platform- without exposing a public HTTP Request URL.
https://api.slack.com/apis/connections/socket


【HTTP】

 昔ながらの Webhook 方式です。Slack から叩かれる URL エンドポイントを公開しておく必要があります。
 ちなみに、開発時には、ngrok を使うと便利ですよ。


ngrok - Online in One Line
ngrok's edge is your competitive edge. Scale your services with global network acceleration and k8s-style load balancing. Instantly add zero trust SSO, WAF, mTLS, failover + more to any app with no code.
https://ngrok.com


3. 実行環境

【Cloud Run】

  • Google のコンテナサービス
  • 好きな言語でサーバーレス環境を作れる
  • AWS ではなくてこっちを使ったのは、 Google Cloud 内での API 呼び出し時に認証をスキップできるから


Cloud Run: Container to production in seconds | Google Cloud
Send feedback Registration is open for the free IT Heroes Summit on April 19. Learn from IT leaders from Target, Uber, Deloitte, ADT, and more. Register now. Build and deploy scalable containerized apps written in any language (including Go, Python, Java,
https://cloud.google.com/run


【Socket Mode】

  • Cloud Run は HTTP のリクエストを受けてコンテナが立ち上がるので、 WebSocket のコネクションを維持できない
  • コンテナ内で web サーバーを立ち上げて、 Cloud Scheduler で 15 分おきにリクエストを投げると問題を回避できる
  • ほな、サーバーレスと違うなー


Cloud Scheduler | Google Cloud
Registration is open for the free IT Heroes Summit on April 19. Boost your AI innovation, cost savings, and security superpowers. Register now. Cloud Scheduler is a fully managed enterprise-grade cron job scheduler. It allows you to schedule virtually any
https://cloud.google.com/scheduler


【HTTP】

  • ということで、 web サーバーを立ち上げて Slack からのリクエストを待ち受ける
  • Bolt を使うと、そのあたりを簡単に切り替えられる
  • ただし、リクエストを受けてコンテナが立ち上がるまで 3.x 秒ほどかかる(無課金勢)
  • Slack は 3 秒以内にレスポンスが返ってこないと再度リクエストを投げてくる
  • なので、二回目に飛んでくるリクエストを捨てる処理が必要

 今回、 Python でコードを書いたので、おとなしく Cloud Functions を使えばよかった…


Cloud Functions | Google Cloud
Send feedback Registration is open for the free IT Heroes Summit on April 19. Learn from IT leaders from Target, Uber, Deloitte, ADT, and more. Register now. Run your code in the cloud with no servers or containers to manage with our scalable, pay-as-you-
https://cloud.google.com/functions


4. デプロイ

 コンテナなので本番環境と開発環境の差分を気にしなくて良いのは便利ですね。
(HTTP ヘッダに関しては Cloud Run が付加情報を追加してる)

【Cloud Build】

 GitHub のリポジトリに push したら Cloud Build がビルドしてくれます。
設定ファイルを使ってコマンドでデプロイもできるけど、 GUI で簡単に設定できました。
(GitHub の OAuth 通すのでプライベートリポジトリでも OK)


Cloud Build Serverless CI/CD Platform | Google Cloud
Send feedback Build, test, and deploy on our serverless CI/CD platform. New customers get $300 in free credits to spend on Cloud Build. All customers get 120 build-minutes free per day, not charged against your credits.
https://cloud.google.com/build


bot の完成

 あれこれはじめて触りましたが、知識ゼロから 1 日もかからずに作れるのでホビープログラミングにちょうどいいですね
(個人的に UI の実装が苦手なのもあり…)

 箱庭チャネルに Emotion Bot を召喚します。

感情分析 bot
感情:ポジ←🤣😆😁😃🙂😐😟😨😢😭😱→ネガ
アイコン数:マグニチュード(文章が長いと多い傾向)

 あれこれ投稿して試してみると、文章の内容ではなくて書き方による影響が大きいようです。とくに語尾の重みが大きい印象です。どんな学習データを使ってるのでしょうか?



 かわいい。この子、かわいい。
 常に様々なゴミや使った食器を放置している子どもたち。私が疲れているときにもまったく労うことなく、1 言えば 128 返してくる。気持ちをくみ取るという概念が存在していません。
 一方で私の発言から感情をくみ取って顔文字を返してくれる bot をかわいいと感じるのは自然なことであるような気がします。

「ELIZA 効果」(イライザ効果)という言葉を Wikipedia で引けば「意識的にはわかっていても、無意識的にコンピュータの動作が人間と似ていると仮定する傾向」と説明されています。
 ELIZA は人工無能であるが、 Emotion Bot は人工知能を利用している。より人間らしさを感じるのかもしれません。
(Emotion Bot にあえて名前を与えなかったのは、ある意味で正解だったと言えるのではないでしょうか。恋してしまいそうだから)


ELIZA効果 - Wikipedia
出典: フリー百科事典『ウィキペディア(Wikipedia)』 ELIZA効果(イライザこうか、 英語: ELIZA effect)は、意識的にはわかっていても、無意識的に コンピュータの動作が人間と似ていると仮定する傾向を指す。これは、プログラミングの限界の自覚と プログラムの 出力を生む動作との微妙な 認知的不協和の結果とされる。ELIZA効果は 人工知能研究における重要な発見であり、 チューリングテスト についてそれまで考えられていたような、言語(文字)を通した会話というだけではなく、人間の認知的性
https://ja.wikipedia.org/wiki/ELIZA%E5%8A%B9%E6%9E%9C


エピローグ

 箱庭に閉じ込めている bot をすべてのチャネルに解放することもできます。
 すべての会話をチェックして、(その場で bot 自身は投稿することなく)裏で感情データを外部サーバーに蓄積することもできるでしょう。
 しかし、そんなことをするつもりはありません。それは SF において「ディストピア」と呼ばれる世界でしょう。

 ただ、この状況も「倫理観のアップデート」という肯定的な言葉とともに(現在の倫理観からすると)やばい方向に進むような気もしますね。

 そのあたりの倫理的な議論は置いておくとして、AI も完全にコモディティ化しましたね。API を呼ぶだけ。
 それだけに止まらず、プログラムを書かない人でも簡単に扱えるようになりました。しかも、安い。

 一方でモデルの構築となると、学習データを用意するコストや学習コストの高さから、結局は資本を持っているところが寡占するのでしょうか。
 つまりは、暴走する資本主義との戦いは終わらないのですね。

 まあ、とりあえず気軽に使えるので、それをつかってどのようなキラーユースケースが生まれてくるのか楽しみですし、自分でも何か作っていけたらいいなと思っています。
(簡単なものだと、お問い合わせフォームから送信された文章の感情を解析して、管理画面のお問い合わせ一覧にアイコンを表示すると面白そう)



Happy Hacking !


※ 弊社 Slack は殺伐としていません!(注:広報担当者)

イジゲングループ株式会社's job postings
4 Likes
4 Likes

Weekly ranking

Show other rankings