本記事では機械学習(AI)を用いたシステム・サービスを開発する上で考えておくべきポイント5選について解説します。
AIを用いたサービスって開発経験がないとどう気を付けて設計すればいいか分からないですよね。
AIを用いたサービス開発の注意点にずっとお悩みの方にお伝えしたい内容になっています。
僕も初めてAIを用いたシステム。サービスを開発する時以下のような悩みを持ちました。
AIを使ったサービスを開発することになったけど、経験がなくてどういうポイントに気を付けたらいいかわからない
AIの開発と言っても予算も限られてるので、極力将来もお金をかからないような設計にしたい
本記事でAIを用いたシステム・サービス開発で考えておくべきポイントを把握することができます。
AIを用いたシステム・サービス開発で考えておくべきポイントを把握することで将来のコストが低減できるようなシステムを設計できたり、将来の作業を減らすことができたりします。
運が良ければ上司によく考えてるなと褒められるかもしれません。
データサイエンス系の仕事を約3年経験したシステムエンジニアが解説しています。
AIを用いたシステムも構築したことがあります。
それらの経験談を踏まえて、やっておけばよかったなぁとか、お金がなくて作れなかったけどやっておきたかったなぁということをメインに書きます。
できるだけわかりやすく解説していますので、読んでいただければとうれしいです!
1.AIサービスの利用者に学習データを作らせる仕組みを作る
AIを用いたシステム・サービス開発のポイント1つめは「AIサービスの利用者に学習データを作らせる仕組みを作る」です。
AIを学習させるための学習データを集めるコストは自動でたまる仕組みがない限り非常に大きいです。
まず、学習データの作成作業の概要と学習データの作成には高いコストがかかることを説明します。
次にAIサービスの利用者に学習データを作らせる案をご紹介します。
最後に実際にAIサービスの利用者に学習データを作らせている事例をご紹介します。
AIの学習データの作り方の概要
学習データを作る作業はざっくり以下の通りです。(自動で学習データが蓄積される場合を除く)
作業的には簡単そうに見えますが、AIは膨大な学習データ量を必要とします。
一律どれくらい必要とは言えませんが、平気で10万とか20万件とか膨大なデータ量が必要だったりします。
作業的にはシンプルでも膨大な単純作業が待っています。
AIという先進的なことをやっているにも関わらずその裏には単純作業が欠かせません。
単純作業つらい。。。
AIの学習データをサービス利用者に作らせる案
しかし、こんな単純なことよりもっと頭使うことをしたい!と思うのがAIサービス設計者のサガです。(主観です)
初期のサービス公開時は外注しない限り自分で学習データを作る単純作業をやるしかありません。
しかし、サービス公開後は自分や外注の人に依頼するなどしてお金と時間をかけてせっせとやる必要がないように仕組みを作ってしまうことをおすすめします。
例えば、動物の画像をシステムに読み込ませるとその動物の種類を答えるWebサービスを作ったとします。猫の画像を入れるとAIが「この画像は猫です」と答えるシステムです。
このサービスに必要なAIを学習させるためのデータは様々な動物の画像とその動物が何の種類であるかという学習データになります。
これをサービス利用者から集めるには動物の答えを画面に出力した後にユーザー自身にその答えがあっていましたか?間違っていましたか?と尋ねるのです。
その結果、画像とその画像の正解付けまでされたデータが勝手にたまっていきます。
サービス利用者が増えれば増えるほどたまります。
データが溜まったらそのデータを追加で定期的に学習するバッチを構築しておけばどんどん賢くなるAIサービスの完成です。
ただし、変なデータを入れられたり、予想をしないようなデータが混ざっていることがあるでしょうから定期的にデータを見ることが大事かもしれません。
実際に利用者に学習データを作らせているAIサービス事例
リクルートのIMAGE PARADISE(画像解析API)が非常にわかりやすいです。
車の画像をユーザーにアプリ経由で入力させ、AIが判別結果を表示します。
AIの判別結果に対し、ユーザーが正しい、正しくないをフィードバックする機能があります。
2.AIに自動で学習させ、AIモデルを入れ替える仕組みを作る
AIを用いたシステム・サービス開発のポイント2つめは「AIに自動で学習させ、AIモデルを入れ替える仕組みを作る」です。
1で解説した利用者に学習データを作らせる仕組みができなくても自動でAIに学習させ、モデルを入れ替える仕組みは構築しておくべきです。
AIって勝手に育ってくれるんじゃないの?と思う人もいるかもしれませんが、仕組みを作らないとそんな魔法みたいなことはあり得ません。
ただ、それは人間がやらなくてもできる作業なのかなと僕は思っています。
人間がやるとミスが起こるし、人件費もかかるので、機械に任せられることは任せるべきです。機械に任せることでミスは減りますし、機械は人間と違って人件費はかからず文句も言いません。
具体的な自動で学習し、モデルを入れ替える手順は以下でやれるかと思います。
上記をプログラムで自動化しておけばいいです。
なぜか自動化に対し良く思わない人たちもいるので、断固として戦っていきましょう!
自動化はコストの面でお客としてもサービス設計者側の自分たちとしてもメリットが多いと思います。
3.機械学習の技術的負債を抱えない仕組みを作る
AIを用いたシステム・サービス開発のポイント3つめは「機械学習の技術的負債を抱えない仕組みを作る」です。
機械学習の技術的負債についてGoogleから出された論文があります。
機械学習の技術的負債と言ってもいくつかありますが、本記事では隠れたフィードバックループについて少し解説します。
例えば、ポケモンGOでピカチュウが出てくる場所を予測するAIを作ったとします。
その予測結果に基づいてそのAIのユーザはポケモンGOでその場所に行きピカチュウを捕まえたとします。
そのユーザーはピカチュウがAIの予測結果で捕まれられた場所をAIにフィードバックします。
そうするとそのフィードバックされたデータをもとにAIが再学習をするとAIの予測結果付近のデータばかり溜まってしまいます。
その結果、また同じような場所でピカチュウが出ると予測し、ユーザもその場所に行くことでピカチュウがゲットでき、また同じ場所のデータが溜まります。
そうすると同じような場所ばかり予測してしまうAIが出来上がってしまいます。
同じようなことを予測することの何がいけないの?
一見問題ないように思いますが、ポケモンGOの開発者がピカチュウが出現する場所を変更したとします。
そうなるとピカチュウ出現場所予測AIは全く予測場所を当てられず、ユーザからは期待外れの烙印を押されサービスとして廃れていく可能性があります。
上記はあくまで例なのでそんなAIサービスはないと思いますので、念のため。
そのようなフィードバックループを防ぐには以下の方法が考えらます。
あくまで個人的な案なので、システムによってフィードバックループに陥らないよう気を付けるポイントは異なってくるかと思います。
Googleから出されている機械学習の技術的負債に関する論文は以下にリンクを貼っておきますので、興味のある人はぜひ読んでみてください。(英語です。
日本語に翻訳してくれていたり、要約してくれている人もいるので、「機械学習 技術的負債」なんかでググると日本語の情報が手に入ると思います。
日本語で機械学習の技術的負債について以下のスライドシェアにまとめられています。
4.特徴量、パラメータは必ず明確にしておく
AIを用いたシステム・サービス開発のポイント4つめは「特徴量、パラメータは必ず明確にしておく」です。
機械学習で用いる特徴量やパラメータは精度を左右するので、とても重要な要素になってきます。
ひどい場合だと特徴量をどのように作成しているか、パラメータは何を設定しているかAIの開発者しかわからないみたいな状況になっていることがあります。
そのAIの開発者がいなくなったらAIのメンテナンスをできる人がいなくなってしまうので、どのような特徴量、パラメータを設定しているかは何かしらのドキュメントに残しておくことをおすすめします。
残しておくことでそのAI開発者がいなくても特徴量やパラメータを変更することで精度向上や新しい特徴量を追加するなどの作業が容易になってきます。
要はシステムの仕様書みたいなもので、AIサービスの属人性を下げ、引き継ぎコストが下げられるよという話です。
一般的なシステムも同じだね!
5.アルゴリズムが簡単に入れ替えできるようにしておく
AIを用いたシステム・サービス開発のポイント5つめは「アルゴリズムが簡単に入れ替えできるようにしておく」です。
AIの技術的進歩はここ最近目覚ましいです。
より良いアルゴリズムがどんどん開発されています。
そうなると今使っているAIアルゴリズムが古くなり、新しいアルゴリズムを使えばより良い精度が出せる可能性が高くなります。
サービス提供者としてはより良い精度でユーザに使っていただいて満足度を上げていきたいところです。
そのためにもAIサービスの中核となるAIアルゴリズムの入れ替えは簡単にできるようにしておくべきです。
アルゴリズムの入れ替えってそんなに難しいの?
アルゴリズムの入れ替え難易度は機械学習の種類によって変わってきます。
今は決定木系の機械学習アルゴリズムを使っているけど、ニューラルネットワーク系のディープラーニングに変えたいとなるとパラメタなど全く異なるので、学習プログラムが変わってきます。
想定の対策としては学習用のプログラム部分と学習したモデルを使う部分のプログラムは分けて作るなどが考えられます。
AIを用いたシステム・サービス開発のポイントまとめ
AIを用いたシステム・サービス開発のポイントについてまとめます。
どなたかの参考になればうれしいです!
コメント