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

おつかれさまです、かきうち(@kakistuter)です。

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

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

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

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

開発の日々

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

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

最終的に下記を提出した。
https://devpost.com/software/detect-dangerous-gmail-from-your-boss

  • 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実装が激むずだったので、それも追って分かりやすく記事書きます。


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。