機械学習を会社で導入する時に覚えて置いて欲しいAutoMLについてまとめてみた

## はじめに
この記事は2020年12月19日のデータラーニングギルドのアドベントカレンダーの記事です。


https://qiita.com/advent-calendar/2020/data-learning-guild2020

「機械学習をやりたい！」「機械学習エンジニアかっこ良さそう！」と志す方はかなり多いのではないでしょうか？その中で、研究機関だったり大規模なデータを保有していて、データが整っている組織だと機械学習をpythonのライブラリを使って行ったりすることが多いでしょう。しかし、そうではない企業の場合、つまり機械学習組織がまだ無かったり、データがまだまだ整っていない場合などは往々にしてこのようなpythonのライブラリを使って前処理をしてモデルを組んで、というkaggleなどでイメージしている内容のことができない場合が多いです。理由としては、

・そもそもデータが足りない
・たとえコードを書いても自分しか分からないものが出来上がり、後々技術的負債になりやすい
・機械学習では前処理や実際に本番導入を始めたあとの運用が大変なため、工数的に見返りと合わない

ということがあります。このような場合、「AutoML」という、APIを通して機械学習の部分を自動でやってくれるものは一つの有効な選択肢です。しかし、まだAutoMLを実務でどのように使えば良いのかということをイメージできていない人が多いように見受けられます。そのため、今回はこのAutoMLにどのようなものがあるのか、そしてどういうように使うことができるのかということについて大まかな内容に話していこうと思います。
まず一つ大前提として、Azure、AWS、GCPの大手三つのクラウドサービスはそれぞれ専門のapiを使用することができます。そのため、一旦話をシンプルにするためにもこの３社に絞って話をしていきたいと思います。内容については実務で広くやっている人にとっては物足りない内容になるかもしれません。

# 画像系
## 提供しているモジュール
・CloudVison(GCP)
・Amazon Rekognition（AWS）
・Computer Vision（Microsoft Azure）

## 実際に使える場所
・顔や表情などの人に関する認識
・物体検知
・文字の認識（OCR）
・そのほか１からモデルを作るとき

これらを使用するメリットとしては、「あらかじめ用意されているものなら学習データが一切必要ない」ということです。つまり、たとえば顔かどうかを判定するプログラムを１から作る場合には、数千枚の画像を集めて、それに対して画像のラベルをつけて、それを元にモデルを作るということをする必要がありますが、これらの外部サービスを使うことで一切その必要がなくなります。あらかじめこれらのサービスには（筆者はCloudVisionしか実際に使ったことはありません）
そのため、APIを叩くだけでよく、とても導入がしやすいです。また、実際にモデルを１から構築する場合でもCloudVisonは使うことができ、モデルの選定は勝手にGCP側でやってくれて、それをすることができます。
これは、製造業や動画系からWebサービスまで様々なところで用途があり、一番AutoMLの中で使いやすいのではないかなと考えています。


# 自然言語系
## 提供しているモジュール
・AutoML Natural Language(GCP)
・Amazon Comprehend, AutoGluon-Text （AWS）
・Computer Vision（Microsoft Azure）

## 実際に使える場所
・異常検知
・テキスト分類
・チャットボット
・文章の要約

これは具体的に自分が耳にした使われている例だと、CS（カスタマーサポート）のためのチャットの分類、大量のドキュメントから要約を行う、自動的にチャットボットが返信してくれる、音声を文字に落とし込んでDBに入れるなど、多様な使い方があります。また、これに関しては、例えば翻訳だったらDeepLのAPIを使い、英語を勝手に日本語に変換してくれる処理を噛ませるなど、他のサービスとして存在しているAPIをそのまま叩いてくるという使い方もかなり実用性があるのではないかなと考えています。


# レコメンド系
## 提供しているモジュール
・Amazon Personalize（AWS）
・Recommendations AI（GCP）
・Recommendations Solution Template


## 実際に使える場所
ECサイト系やマッチングアプリなど、webサービス上がメイン



レコメンドというものについて説明すると、簡単にいうとユーザーが見ている画面に誰を表示するかを大量のデータを通して個別最適化させていくというものです。これを行うときに、ユーザーベース、強調フィルタリングなどで機械学習を用いることが多くあります。
ちなみにレコメンド系を使用するのは多くの場合、上で述べたようにwebサービスが多いので、多くの場合データが溜まっていると思いますが、強調フィルタリングなどをpythonでの実装をすると保守性という面でかなり大変なことになるので、ルールベースのものをフルスクラッチで書くか、これらのサービスを使うのが良いでしょう。ちなみに、これらの方法だとかなりたくさんのユーザーがいる場合に個別最適化すると処理が重くなってしまうので、そのときにはElasticsearchなどを使うのも良いでしょう。（Elasticsearchというのはデータを管理したりそれを分析したりするのに使われるDBツールの一つです。いわゆるNoSQLの中の一つです）
また、日本の会社などでレコメンドエンジンを開発していて販売している会社もありますが、今回は一旦そのようなものは省いています。細かくはこの辺の記事を見てみると良いかもしれません。

https://liskul.com/recommend-engine-30109

## 予測系
・BigQuery ML,AI Platform Prediction(GCP)
・Amazon SageMaker,Amazon Forecast（AWS）
・Azure Machine Learning（Azure）

これは単純にDBに入っているデータを元に訓練して予測をするものです。そのため、今データが集まっていない企業では使用が難しく、どちらかというとデータは溜まっているけどそれを機械学習で使う人員がいないという企業向けのものでしょう。そのため、製造業や金融などよりは、もうすでにRedshiftやbigqueryなどにデータが溜まっているケースが多い、自社サービスの企業向けのものかなと思います。

## 終わりに
本来はアドベントカレンダーはキャリアについて書くべきところですが、キャリアは前の記事で書き切ってしまった感があるので今回はこのようなテーマで書きました。
僕のやっていたことについてはこの記事などを参考にしてください笑

https://qiita.com/Falcon__0904/items/4f7202ca3a79b25a5f13

自分で調べてみて驚きましたが、思ったよりもGCPやAWS上で使用できるAutoMLサービスは多いみたいなので、バックエンドのシステムだったりAPIだったりでこれらのものを呼び出せば、簡単に使えるかもしれないので、ぜひ導入を検討してみてください。また、僕も調べながら書いたところが大きいので、何か追加するべきことなどがあればコメントください。