LoginSignup
8

More than 3 years have passed since last update.

素人がSalesforce AI アプリコンテスト 2018に参加して、予選落ちして、悲しみの中で得たもの

Last updated at Posted at 2018-05-26

とにかく僕は実績がほしかったんだ

素人ながらも、なんとなく勉強し、ちょっとしたアプリを作ってると自信がでてくる。
なので世でも力になれるかと思ったら、そうじゃない。
私には実績がなかった。
とにかく実績がほしかった。

そんなときに見つけたアプリコンテスト

そんなときにSalesforce AI アプリコンテスト 2018なるものを見つけた。
ちょうど機械学習を勉強していたし、Salesforceはなかなかのネームバリューだし、賞金100万円だし、
アイデアはなかったが、応募してみた。

開発の日々

  • アイデアを提出して、Salesforceの方がGoogleHangoutsでいろいろ相談してくれたり、
  • 仕事くそ忙しくて睡眠時間削ってコード書いたり、
  • 提出期限直前、本番デプロイして、バグ見つけて、仕事中まじ焦ったり、、

ほんとこのときは、本気で100万+優勝の肩書めざして頑張って、楽しい時間だった。。。

最終的に下記のような機能のアプリを提出した。

  • Gmailから上司のメールを取得
  • 取得したメールを「danger」と「safe」にラベリングし学習
  • 学習後はそのモデルを用いて、いつでも上司からのdangerと予測されるメールをslackに通知できる

というアプリだ。

この時は、本当に1位取れるんじゃないかとおもっていた。。

結果

ファイナリスト発表は2018/5/25(金)だけど何時ころに通知されるかは不明。
仕事中、メールばっかみてた。
そしてメールが来た。

ファイナリスト 5チームが決定しました!!

この中に自分の作品はなかった。

たしかにファイナリストの作品は、自分のより楽しそうで、使ってみたくて、夢がある。
私は負けたのだ。
ぎりぎりじゃなく、圧倒的に負けた。

賞金でMacbookProとiphoneとダイソンコードレス掃除機を買おうと決めていたが、
とりあえず、この日の夜は同僚と立ち飲み居酒屋に行って、現実逃避し、眠りについた。。。

予選落ち確定の翌朝(つまり執筆している今日)思ったこと

落ちたけど、無理やり有意義なものにしないといけない。
今後もコンテストに参加したいからだ。
そのため、このコンテストの過程で得たものを公開する。

得たものその1 WEBサービスは見せ方が異常に大事

おそらく、私のアプリは技術的にはファイナリストたちと大差はない。(と信じたい)
大きな差があるのは見せ方。

ファイナリストたちの作品は、

  • タイトルで引き付けられる
  • タイトルでなんとなくアプリのイメージが沸く
  • そもそもアプリの操作が簡単

一方、私の作品は、

  • タイトルからどんなアプリか想像しにくい
  • 初期設定が若干面倒(slackのwebhookURLを入力とかは特に面倒)
  • AIのパーソナライズ機能を実装したが、学習に1時間かかったりする

私のアプリを改善するとしたら、

  • 多少精度は犠牲にし、AIモデルはこちらで準備
  • 「メールで職場のストレスチェック!」みたいな感じで、一般的な指標(こちらで準備したモデル)でストレス度を測れる

みたいな感じにすれば、上位に食い込めたかもしれない。。
(てか、これやってやろうかなとちっと今思った)

得たものその2 AIサービスって使うの結構カンタン

今回のコンテストはEinsteinという「SalesForceが開発したAI」を利用してアプリを作るというものだった。

なんかAIというと頭いいひとが使うイメージだったが、

  • 学習データをcsvにして、curlでpostする
  • するとレスポンスで数字が帰ってくる。データを学習したモデルを識別する番号だ。
  • このモデル番号と判別したいデータを、curlでpostする
  • 結果が返ってくる

ほんとこれだけなのである。
curlの先にあるAPIサーバを作るのは激しく難しいだろうが、使うだけであればカンタンだ。
コンテストの過程でIBMのAIであるWatsonも検証したが、これも簡単だった。

つまり、AIサービスは思っていた以上に簡単に使える、
つまり、AIサービスを提供できる側になると、かっこいい。

得たものその3 コンテストは最高級にテンションがあがる

アプリコンテストは初参加だった。
そして、期間中、モチベーションの高さが異常であった。

いままではなんか勉強とか、会社で使えそうなツールつくるとか、
大したドキドキもなかった。

でもコンテストはやばい。

  • 高額の賞金、お金を使うときの妄想
  • 迫りくる締め切り期限
  • グランプリを取ったときのインタビューの妄想
  • 仕事との両立で、睡眠効率の最大化、目ギンギン
  • 提出ボタンを押すときの1クリックにかかる重み

最高だった。また参加する。ぜったい。

得たものその4 Herokuのタイムアウトを非同期処理で解決

AIサービスの利用窓口となるEinsteinへのリクエスト機能の実装はカンタンだった。
ちなみにこのサイトを多用した。
curl-to-ruby

しかしAIはが学習したりするので処理に時間がかかる。
基盤としてHerokuを使うことにしていたが、本番デプロイ時、Herokuがタイムアウト。

コントローラにこんな感じの処理がかいてあったため、routingに時間がかかりすぎたためである。

learn_controller.rb
def new
  sleep(300) # ←これは時間のかかる処理をsleepメソッドで表現しています
  redirect_to root_path
end

解決策は時間がかかる処理を非同期で実装すること。
railsで制作していたのでdelayed_job_active_recordというGEMを使って実装した。
チュートリアルに沿っていけば難なく実装できるが、以下のポイントは注意が必要。

  • Windows環境で作成していると、'bin/delayed_job'に実行権限が付与されないケースがある。
  • 非同期JOBの中にredirect処理は組み込めない
  • JOB失敗時のエラー検知

これらに注意すれば、時間のかかるAI処理でもUXを損なわずに実装できる。

さいごに

まだ悲しさが残っているし、
まだ脱力感はぬぐえない。
素人なりにも、久々に頑張ったからだ。

いろいろと思ったことを書いたが、やっぱり技術的成長よりマインド的成長の方が大きかった。(はず)
悲しみの最中、この記事をかいたが、すっきりしてきた。(と思いたい)

やるべきことは、またなんか考えて作っていくことだと思う!

補足

技術的にはGmailAPI実装が激むずだったので、それも追って分かりやすく記事書きます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8