Higu`s diary

新米データサイエンティストのブログ。技術についてゆるく書きます〜

Wantedlyの機械学習エンジニアインターンに3週間いってきました

ひぐです!8/19~9/6の期間にWantedly社でMLエンジニアコースで働かせていただきました!
f:id:zerebom:20190908180454j:plain
楽しかったのでブログを書きたいと思います。

志望動機と選考

魔法のスプレッドシートでやれること・日程・給与などなどを見比べながら決めました。

2019夏のITエンジニアインターンの情報が集まる魔法のスプレッドシート - Google スプレッドシート

メンターさんが1on1で付いてくれること、サービスを知っているからこそ裏側を知るのが楽しそうと言った理由も大きかったです。

選考はES->コーディングテスト->Skype面接でした。
コーディングテストはAtCorder ABCのBくらい?の難易度でした。

何をしたか

Wanteldy Peopleのユーザにタグをつける。

Wantedly Peopleという名刺管理アプリケーションの改善するためDeepLearningでなんとかすることになりました。

people.wantedly.com

はじめに抽象度の高い課題をいくつか提示していただいて、 サーバーからデータをクエリで拾い、データを見ながら、実現可能性がありそうなアプローチを考えていくという段階からスタートしました。

僕が取り組んだタスクは、ユーザの職業欄からタグをつけるというものです。 例えば職業欄が
[取締役執行委員 社長]/[CEO]/[社長 取締役]⇨[社長]タグを付与
[〇〇営業所 部長]/[セールスエンジニア]⇨[営業]タグを付与

のようになります。要は名寄せとかカテゴリ付与みたいなタスクです。

名寄せができれば以下のメリットがあります

  • ユーザがフォロワーを検索するときの足がかりになる
  • 広告などのレコメンドのターゲッティングに使える指標となる

しかし、この課題には以下のような障害がありました

  • ユーザ一人当たりの情報が少ない
    読み込まれた名刺の持ち主はPeopleのユーザではないことが殆ど、プロフィール文やフォロワーの分布から予測はできない

  • 表記揺れがマジで多い
    社長を表す表現一つにとっても、「社長」「取締役代表」「代表取締役社長」「CEO」みたいに色々な種類がある
    「取締役代表 補佐」とか「取締役 秘書」とかは取り除かないといけないなどの問題も

最終的には
事前学習モデルから分散表現を獲得し、名刺に含まれる単語の平均ベクトルを学習して予測を立てる」 というアプローチになりました。

簡単にいうと、単語の意味を表すベクトルを使って、そのベクトルの近さとかでグループ分けをしようって感じです。

分散表現についてはこちらのサイトでわかりやすく説明されていました。
deepage.net

職業が同じ単語(「社長」や「代表取締役」など)は意味空間でのベクトルが近いので同じタグを貼れるだろうというアプローチです。
前処理はこんな感じです。
f:id:zerebom:20190907193758p:plain

今回はアノテーションはルールベースで行いました。 例えば名刺に「医」「療」という単語が含まれていれば医療ラベルを付与といった感じです。

結果としては予測精度は高かったのですが、精度の高さ=ルールをどれだけ守っているかになってしまい、 オフラインでの評価は難しかったです。

一応ルールベースでのアノテーションに変わる方法を何個か提示しました。 時間があれば半教師あり学習とかもできたらなぁって感じで終わりました。

機械学習エンジニアとして働くことを体験して

Kaggleなどでは決められたタスクに対して高速で実装していく力などが求められますが、
実務では、どんなアプローチがあって、どのデータなら使えるかなど、課題設定から始めなくてはいけないと改めて気づかされました。
また評価指標やアノテーションの仕方も考える必要があって、やりがいがありました。 そういった意味ではアイデア力も必要ですし、アイデアを産むために数理的な知識も、ビジネスの知識も必要だなぁと痛感しました。

こう言ったことを知れたのはメンターの縣さんが何を持ち帰ってもらおうか考えてインターン生をサポートしてくださったからこそだと思います。
本当にありがとうございました!

できるようになったこと・学んだこと

  • GItHubを綺麗に使えるようになった
    レポジトリを見てWantedly社は相当GItHubを使いこなしているなという印象を受けました。 他のレポジトリなどを見ながら、コードレビューしてもらいやすいプルリクの作り方や、後世に遺産が伝わりやすいIssueの書き方などを知れました。

  • 便利なオープンソースコードを知れた インターンでFastTextやBERTなどの事前学習モデルをクローンして使うことがあったのですが、あんなにお手軽に再学習や、分散表現を手に入れらるとは思いませんでした。 特にFastTextはgensimのWord2Vecクラスは便利なメソッドが多くて、今後も使おうと思います。
    またBigQueryとかPlotlyとかも書けるようになりました。

  • 機械学習エンジニアのリアルを知れた
    上記に書いたとおりです。

Wantedlyインターンの印象

たしかに就業型インターンでした

取り組んだ課題がインターン生のために用意された課題ではなく、インターン生を一人の社員として見てくださっている感じがありました。 給料をいただいているし、メンターの方の時間も割いていただきながら仕事をするので、進捗産まなきゃ。。。みたいな緊張感はありましたが、詰まったらいつでも聞いてねという感じだったのでありがたかったです。

オフィスも街も綺麗

オフィスが白金台だしピカピカだしテンション上がりました。   f:id:zerebom:20190908180530j:plain

あと会議室の名前が全部ジョジョのスタンドの名前でウケました。 「ザ・ワールドで話そうか」みたいな。出てこれなくなっちゃいそう。

業務後は卓球もできました。
f:id:zerebom:20190909084544j:plain

同じタームの子と仲良くなった

席が近い子とは毎日昼ごはんに行ったり、シャッフルランチが毎週あったりで仲良くなれました。
ただインターン生全員と席が近いわけではないので、全員と話すには割と能動的に行動しないといけないかもです。

f:id:zerebom:20190909083540j:plain
打ち上げのボドゲ大会

インターンの選考対策にしたこと

自分も去年はこういうブログを見て、インターン行きてえ。。。!ってなってたのですが、
「おすすめなので是非行ってみてください!」
的な文章を見るたびに、いや受かる前提やんけ!みたいな気持ちになってました。

誰得だよって感じですが、自分なりにES/面接で気をつけたことを書きたいと思います。

  • 成果ベースで話す
    〇〇を勉強中です!みたいなことを推すのは弱いと思ったので、なるべく成果ベースで話しました。 アウトプットが社外に公開されるような会社で長期インターンをしつつ、大きな仕事があれば積極的に関われるようにコミニュケーションを取るととっかかりやすいかもです。 あとはKaggleとかもメダルは取れたわけではないのですが、ちゃんとSubmitして順位が出ているので伝えました。

  • 自分の関心領域と業務内容が近い(近そう)ということを語る
    当たり前ですが、業務内容のミスマッチは企業側も避けたいと思っているので、
    自分の経験や興味が企業に取り組む内容に近いことを推していくのは大事だと思います。
    株主総会向けのプレゼン資料とかに、企業のビジョンや今後注力する領域がわかりやすくまとめてあるのでオススメです。

  • やる気を見せる
    記述式の問題や、ESの文字数制限ないところは人よりたくさん書いたと思います。

  • 最強の技術力があれば関係ない
    それはそう

  • 応募しないと絶対受からないので、いっぱい出す
    それはそう

終わり

こういったインターン行くと成長の糧になることをいっぱい学べるし、
仲間やメンターさんとのつながりもできるし、本当に参加できてよかったと思ってます!

今回学んだことを研究や将来の職業でも活かせるように今後も頑張ります!
3週間ありがとうございましたー!

google-site-verification: google1c6f931fc8723fac.html