機械学習(ほぼ)初心者が、Webアプリケーションを作ったキッカケ
本記事では、機械学習の(ほぼ)初心者である筆者が、TIS株式会社の5daysインターンシップ「機械学習を用いたWebアプリケーション開発」に参加した際に開発したWebアプリケーションについて紹介します。筆者は、学部で情報工学の基礎を学び、現在は都内国立大学大学院に通う大学院生です。これまでにWebアプリケーションの開発経験はなく、機械学習も「なんとなくイメージはできる」程度の理解でした。今回は、開発にPythonを用いました。Pythonの使用経験は2年弱でしたが、機械学習を実装するのは初めてでした。
開発したアプリケーションのソースコードは、GitHubで公開していますので適宜参照してください。
5daysインターンシップとテーマ設定
今回のインターンシップでは、機械学習技術を活用したWebアプリケーションを開発するということ以外の制約はなく、開発に用いる言語やテーマは自由でした。そこで、テーマを考える際にSNSからデータ取得することを考えました。私はもともと写真に興味があったので写真共有SNSの"Instagram"に投稿された写真を眺め、
- 「人物が写っている写真を投稿するユーザーは、女性が多いのでは?」
- 「男性は食べ物が写っている写真が多いのでは?」
という仮説を思いついたので、写真共有SNSの投稿画像からユーザーの性別を推定するWebアプリケーションを開発するテーマに設定しました。もし、ユーザーの性別が分かれば、ユーザーに応じてより適切な広告を表示したりサービスを提供したりすることが可能になります。
このWebアプリケーションでは、ユーザーがInstagramに何を被写体とした写真を多く投稿しているか、ユーザーが投稿した写真の傾向をもとに性別を推定することを試みます。具体的には、Instagramでユーザーの直近20枚の画像を取得し、画像認識API(AlchemyAPI)を使ってそれらの写真に写っている物体ごとにスコア化して、そのスコアに応じて性別を推定します。
今回用いたプログラミング言語/ライブラリの紹介
Python | 汎用プログラミング言語。今回は、最新(当時)バージョン3.4.3を使用 |
IPython | Pythonを対話的に実行するシェル |
IPython Notebook | IPythonをWebブラウザ上で実行することができる |
scikit-learn | 機械学習ライブラリ |
Flask | Webアプリケーションフレームワーク |
Instagram API | 写真投稿SNSのInstagramをプログラミング言語から呼び出すAPI |
AlchemyAPI | 画像解析API。画像をこのAPIに入力すると、該当するタグをスコアが出力される。スコアは0から1の範囲で、1に近ければ近いほどそのタグの適合度が高い |
開発の流れ
今回開発するのはInstagramのユーザーIDを入力すると、そのユーザーの性別を推定してくれるWebアプリケーションです。
まずユーザーが投稿した写真から性別を推定する識別器(モデル)が必要になります。その識別器は、すでに性別が分かっているユーザーの性別と写真の組み合わせを学習データとしてscikit-learnで機械学習を行うことで作成します。その識別器を呼び出すWebアプリケーションを開発します。