見出し画像

AI開発&AI投資で失敗しない方法

どうも。おっさんです。今日はタイトルの通り、AI開発&AI投資で失敗しない方法です。まぁ、言うて、おっさん、最先端の頭脳搭載のキレキレエンジニアでもないですし、経営者でもないです。文系学部卒、プログラマー歴15年で、AI開発をちょうど1年だけやってみて、その後、社内の派閥争い的なので部署ごと仕事干されて(AIでの手柄を独占したい人たちの争い)、今は関係ない仕事やってる人です。とは言え、分かったことは結構色々あります。そのあたりを、AIとかなんにも分からないけど、AIでお金を損したくない方向けに、もう、だいぶ昔のような気がしますが、思い出しつつ、整理してみたいと思います。

定番AIは3種類

実用性があって、すぐ使えるやつ、というのは3種類(+α)あります。まずは、これをアタマに入れましょう。もちろん、全て無料です。

定番その1:scikit-learn(サイキットラーン)

これはディープラーニングと呼ばれるやつではなくて、その手前の機械学習と呼ばれるやつです。機械学習の中にディープラーニングも含むという捉え方もあると思いますが、この記事の中では、機械学習と言ったら、ディープラーニングより前のやつ、ということにしておきます。

scikit-learnはライブラリと言ったほうがいいのかな。この中に色々と使えるものが詰まってる感じになります。用途に応じて使い分けると思います。

また、scikit-learnには入ってないけどメジャーな機械学習ライブラリというのもあり(XGBoostとか)、scikit-learnの利用を考えるなら、そういうのも、その延長線上で検討することになると思います。

scikit-learnは分類や回帰(予測)に使えます。私の会社では、「この商品を買った人はこんな商品も買ってます」的な文脈でクラスタリング(分類)に使ったのと、特徴量選択でランダムフォレストを使ったのと、価格の推定にXGBoostを使った感じです。特徴量選択というのは「AIに突っ込むデータとしてどれが重要そうか?」について、あたりを付けるということです。

定番その2:ディープニューラルネットワーク(DNN)

全結合層(Dense層などとも言ったり)を3つ並べるだけ、という最もベーシックなディープラーニングです。全結合層としては、GoogleやFacebookが既に用意しているものがあるので、あなたは、それを3つ並べるだけです。4つ並べても5つ並べても良いですが、実はあんまり変わらなかったりします。DNNは分類や回帰(予測)に使えます。

私の会社では、価格の推定に使ったのと、名寄せされてないデータを名寄せする際の参考に使った感じです。

定番その3:畳み込みニューラルネットワーク(CNN)

画像の物体検出とかで使えるやつですね。DNNみたいに3つ並べるだけ、というわけには行かないですが、YOLOなどの既に作り込まれて配布されているCNNのモデルがあるので、それに投入できるように、画像のデータセットを用意すれば良いだけです。今はYOLOよりもいいモデルが色々とあります。SoTA(State of The Art)と呼ばれる最先端のモデルを使えば、誰でも、最先端なクオリティを獲得できます。

私の会社では、画像の中に特定の物体が映ってる/映ってないの判定に使ってました。

一番、AIをルーティンワークとして、サクサク稼いでる会社、って言ったら、一番はこの分野じゃないですかね。たぶん、ドル箱です。入れるデータが違うだけで、やってることはずっと同じですもん。AIがちゃんとできてるかどうかの判断も簡単ですしね。見たまんまですもん。安心して使えるAIと言ったら、こいつです。

たぶん、私とかでも、日本最高峰のガンの画像診断医を雇うことができて、大量のレントゲン画像を入手することさえできれば、日本最高峰のガンの画像診断AIとかも作れちゃうんじゃないかな。要は正解/不正解のデータセットさえ用意することができれば、もう、後はできたようなものです。

定番+α:オートエンコーダ

これは、私の会社では使ってはないんですが、作るのは簡単ですし、何か使い道はありそうな気はしました。これは全結合層を5つ並べる、とかそういう感じのシンプルなやつで、データの圧縮に使うのもいいでしょうし、データの歪みを調べる(異常検出)のに使うのもいいでしょうし。。こいつは、これ単体で使うっていうか、他のAIを作る際の補助として使う感じですね。

定番の中でやれることに絞れば、事故にはなりにくい

これ、ありますね~。AIに頼めばなんでもできるとか、そういう甘い考えはやめたほうがいいかもしれません。定番の中だけだと、できること、できないことがあります。とは言え、いきなり、定番の外へ出ていくのは、お金と時間ばっかりかかって、AI投資の効果が得られにくいかもしれません。まずは、定番の中でできることで、実績を積み上げるほうが、追加の予算の確保もしやすいと思います。

たとえば、あるAIの要求仕様として3つあったとします。でも、定番の中だけでやろうとすると、2つしか満たせないとします。この場合、3つ目も満たそうとして、いきなり定番の外へ行くよりは、まずは、2つだけを満たしたAIを作ったらいいんじゃないですか?その2つを満たしたAIすらないとか、一見満たしているようで実はものすごく変な動きをしているとか、そういう状況であれば、2つだけをきちんと満たしたAIを作るだけでも、会社としては前進なのではないでしょうか。仕事を頼む側としても、このあたりを意識して、最初から高望みせずに、定番の中でできることをまずやろう、という協力姿勢を見せることが重要かなと思います。

私の会社の場合は、AIのチームが複数あったんですが、Aチームは定番ばかり、Bチームは定番の外ばかり、ということになりました。そうなった経緯はよく分かりませんが、定番かどうかということは、お互い特に意識してなかったと思います。たまたま、それぞれのチームが関心を持っていることをやろうとしたら、それがちょうど良いように見えた、ということかな、と思います。でも、結果として、Bチームはハズレくじを引いて、難航して、ボスは危険な兆候を察知したのか、とんずらして、チーム自体無くなった、ということです。ちなみに、私はBチームが終焉する最後のほうに、いくらかでも得られるものを得ようということで、ちょっとお邪魔してた、という立ち位置です。

あ、ちなみに、Bチームのボスは私の会社では確かに最も秀才ではありました。だから「定番の外でもおれならやれる。むしろ、いきなりぶっちぎりの成果を取ってやる」って思ったかもしれません。とは言っても、別にAIの専門家ってわけでもなかったので、ベースの頭が良くても、それだけでは勝てなかったってことかなと思います。

あ、そうそう、このBチームのボスは行動履歴を使ったレコメンドAIをSoTAモデルとか使わず、Attentionレベルとかから積み上げて自作しようとしてました。今思えば、無謀過ぎでしたね。数学オタクだったので、やればできると思ったんですかね~。まぁ、数年前は、あんまり既成モデルとしていいものが配布されてなかったってのもあるでしょうけど。。そういう秀才が何人も居て、予算も無尽蔵な会社だったらよかったんでしょうけど、そこまでの会社では無かったので。。

定番の外 その1:文章生成

ディープラーニングを勉強してると、RNNとかLSTMとか、そういうのが出てきて、時系列データ分析とか、自然言語処理とか、言ってるわけなんですが、RNNとかLSTMレベルじゃ、自然言語処理は話にならないと思います。今はそれよりもずっと先まで行ってます。LSTMの後に、Attentionやら、Transformerやらが出てきて、そして、さらにBERTとかが出て来ました。おそらく、実用レベルになったのはBERTあたりからだと思います。しかし、今はそれよりもさらに先に行ってて、BERTをベースとした、色々なAIが最先端を競ってる感じになります。でも、そのような、最先端のモデルにデータを整形して入れるだけで、使える状態になってるという意味では、結構お手軽です。

私のチームでは、BERTベースのT5っていうものをちょっといじってたんですが、結果としては、やりたいことは残念ながらできませんでした。T5でできたこと、できなかったこと、なんですが、T5でも、文章生成は結構できます。「できてるね。うわー、おもしろーい!」って言えるレベルにはできてるんですが、我々に課された要求仕様としては、結構、間違っちゃいけない文章が多かったんですね。

たとえば、「これはきれいな花です。」っていう分には、おそらく、この文章がおかしいと言う人はあんまり居ないと思うんです。でも、「これは3000円の花です。」って言っちゃった場合、それが実は5000円だったら、まずいじゃないですか。で、我々が生成しないといけないのは、こういう計量的な情報を含んだ文章だったんです。もちろん、金額の所をプレースホルダ―にして、後から、正確な金額を差し込む、っていう手もあったでしょうけど、金額だけじゃないんですよね。ありとあらゆる、計量的なデータがあっちこっちに出て来るか出て来ないか、分からないような様々な文章を生成しないといけなかったんです。

だから、占いの結果を出すとか、おしゃべりbotを作るとか、そういうことであれば、全然できただろうな、という感じです。

結局、AIではできなかったので、ひな形の文章に穴埋め形式で文章作る、みたいな、普通のシステムで代替する、という結末になりました(=下記「ルールベースAI」の項を参照)。

定番の外 その2:レコメンド

レコメンド(商品をおすすめするアルゴリズム)にも色々あると思うんですが、うちの会社では、お客さん1人1人に合ったレコメンドがしたかったんです。つまり、行動履歴が使いたかったんです。で、まぁ、それができるAIモデルとして、NRMSってモデルを見付けてきたんですよ。こいつは、MSNっていう有名なニュースサイトのデータセットを使ったレコメンドをやるのに使えるモデルってことになってます。もうちょっと具体的に言うと、ユーザーが過去に見たニュース記事を学習して、レコメンドするニュース記事として、どれがいいか、判定するというものですね。

で、NRMSっていうのは、ニュース記事の中身もちゃんと見てるんですよ。でも、一方で、中身は見ないレコメンドモデルもあるんですよ。でも、逆に、中身を見ずにどうやって判定するの?ってなりそうですけど、たとえば、似たような行動履歴を持つ人を見付けて、その人が見たから、この人も見るだろう、みたいな、そういう感じの判定もありうるってことです。

で、私の会社としては「中身も見て欲しい」という、ちょっとエライ人の意向もあって、「NRMSでできるんなら、いいかもね」みたいな雰囲気はちょっとあったんですよ。

でも、問題があってですね。ここでも、計量的なデータの問題ですね。結局、我々が扱うサイトに載ってる情報というのが、パソコンのスペックではないんですが、そういう感じの計量的なデータが多い、サイトだったんですよね。ニュース記事じゃないんです。もちろん、計量的なデータでもなんでも、ニュース記事のようにテキストにしてぶちこむってことも可能ではあるんですが、やっぱり、テキストにした後、それをさらに200~300次元とかのベクトルにするので、無駄に次元が増えちゃいますからね。それよりも、元々数値(スカラー)であるものは、数値のまま投入できたほうが、次元数も膨らまないですし、直接投入できるんで、ストレートに効きそうな気がします。というわけで、元々テキストのものはテキストとして投入してもいいと思いますが、元々数値のものは数値のまま投入するっていう、そういう2種類の投入方法を併用できたらいいんじゃないか?とは思ったんですが、それの改造のやり方がよく分からなかった、という感じです。やっぱり、専門家の力を借りたかったのですが、我々のチームも、終幕ギリギリの所だったんで、追加援助などもなく、終了した、という感じでございます。

結局、この件、どうなったか?って言いますと、scikit-learnでクラスタリングで済ませるということになってました。つまり、「これを買った人はこんなのも買ってます」ってパターンです(とは言え、単純に似たやつを勧めるだけ)。つまり、お客さん1人1人に合わせるっていう部分はカットしたってことですね。でも、それでいいんだったら、4年もかかってないんですけどね。AI最近始めましたって人でも、1~2か月あれば全然できるやつですよね。あ、4年ってのは、1チームで4年ではなくて、色々なチームが入れ替わり立ち代わりっていう感じです。Bチームの当初のメンバーで外部の専門家も入れつつ2年ぐらい、その後、Aチームも専門家を入れつつ1年くらい、その後、Aチームは専門家抜きで9か月、で、最後の最後の3か月で、Bチーム残存勢力である私ともう2人でNRMSほか5モデルを調査、で、その結果を、Aチーム(専門家抜き)にフィードバックした結果、「あ、そこまで複雑な話になるんだ、やべーわ、これ」みたいな雰囲気になって、おそらく、先に成果取るぞ!って雰囲気になって、うまいこと水面下で交渉して、行動履歴の所をカットしてscikit-learnで逃げ切った、みたいな感じですね。いや~、大いなる金の無駄遣いですね。まぁ、4年とは言っても、これだけやってたわけでもないので、そこまでひどくはないかもしれませんが、それにしても、たぶん、5000万ぐらいは無駄になってますね。そんな無駄金使うぐらいだったら、さっさとscikit-learnでやりましょうよ。我々としても、行動履歴とか言われなければ、scikit-learnでやったんでしょうけどね。でも、最初から、行動履歴ありきで話が進んでて、そこは絶対外せないみたいな流れだったので、がんばってたんですけどね。う~ん。。

定番の外の既成のAIを扱う場合の立ち回り

こういう既成のAIって、もし用途がカチッと一致していれば、投入するデータを差し替えるだけで使えるっていう面では便利なんですが、改造となると、一気に難易度が上がる気がします。そうなると、やっぱり、ちゃんと、numpyベースでいじくり回して、AIをゼロから作れるような、そういう精密な技術が必要になりますね。さらに技術力と併せて「この人ならできそう!」っていうふうに信頼してもらえるバックボーン(東大卒、京大卒、修士、博士)とか、キャリア(AI開発歴云年)とかが必要そうな気がします。仮に私ができた!と言っても、たぶん、信用されないと思うんですよね。自分でも不安なくらいですし。。もしかしたら、素人集団のため、信用してくれるかもしれませんが、逆にそれが怖いっていうのもありますね(おれの改造とかあてにすんなっつーの)。だから、そういう人は、用途がかっちり合った既成のAIモデルを見付けることができなければ、要求仕様を削って、定番の中に収めるとか、延期するとか、お金があれば、専門家に協力を依頼するとか、そういう感じになると思います。まぁ、自分に専門性が足りなくても、専門家と話ができるレベルであれば、もしかしたら、できるかもしれませんね。もしくは、自称AI専門家から、できもしねーのに、金だけ吸い取られる可能性もあるかもしれませんけどね(渡るAI業界は守銭奴ばかり)。

定番の外 その3:GAN

我々はちょっとこれはやってないんですが、なんか、画像の分野でありますよね。似て非なる画像を生成する、みたいやつです。詳細はググって下さい。でも、何か画像ができさえすればいい、っていうことだったら、実はそれほど無理はないのかもしれません(知らんけど)。

番外編:ルールベースAIとは?

「ルールベースAI」とか言う人がたまに居ますが、これは、AIじゃないと思います。これ分かる人居るかな、昔、30年ぐらい前かな、ドラクエ4っていうゲームがあって、「世界初!戦闘AI搭載!」みたいな売り文句で大人気のゲームだったやつです。確かに、その時代だったら、AIって言っても良かったのかもしれませんけど、今や、機械学習、ディープラーニングの時代じゃないですか。このような時代に「AI作れます!」って言ったら、そりゃ、機械学習やディープラーニングのほうの話だって、普通思うじゃないですか。でも、ルールベースAIって言ったら、このドラクエ4の30年前の意味でのAIなんですよね。つまり、あらかじめ、プログラマーがプログラムした通りに動くだけ、ってそういうことです。もう、それAIって呼ぶやめましょうよ。普通に詐欺でしょ、って思います。でも、そういう会社、ガチでありますよ。うちの取引先でもありました。みんな騙されてました。気を付けて下さい。

で、話は戻りますが、このAI商法に騙されない方法ですが、「それって、ルールベースAIってことですか?機械学習やディープラーニングは使わないってことですか?」って聞いてみればいいです。「そうです」っていう回答だったら、もし、あなたの会社がITの会社だったら、つまり、AI関係ないんで、普通のシステムとして作れるってことなので、自分らで作ったほうがいいです。もしくは、お友達の会社で安くやってくれるところに頼むのでもいいでしょう。とにかく、AIとして扱うと、AI価格としてぼったくられそうなので、気を付けましょう。

一方で、なんでも、機械学習やディープラーニングにすればうまく行く、という意味でもないです。そこも勘違いしないようにしましょう。結局、機械学習やディープラーニングとして作ろうとして無理だったってことになって、普通のシステムとして作らざるをえないっていうパターンもあるので、ルールベースAIが完全にダメということではないです。ただ、ルールベースAIのくせにAI価格はおかしいってことです。

詐欺師は会社の外だけじゃない、中にも居る

また、そういう詐欺師の会社が存在するだけでなく、私の会社のAチームのほうも、そいつらと「AIの共同研究してます」ってことにして、また1つAIの実績増えたわ~、みたいに振る舞ってる、という最悪な話も別にあります。詐欺師は会社の外だけじゃない、中にも居る。そういうこともあります。AI業界では、こういう中身のない「共同研究」ってのも多いんじゃないですかね。

さらには、また、Aチームは某有名大学とも「共同研究」をしています。その内実としては、単に隔週で「こんなことやってました」っていう報告会をやってるだけで、共同作業なんか何にもありません。でも、共同研究している建前となっているので、大学に金も流してますし、もちろん、そのための予算も会社から取ってます。実質的に、その大学の大学名をブランドとして借りて、自分たちの立場を良く見せるためのものになりますね。「○○大学と一緒にやってるから大丈夫!」みたいな話です。

おわりに

いかがだったでしょうか?いかに定番が大事かお分かり頂けたでしょうか?これから始められるという方は、是非、予算を無駄遣いしないよう、有効活用できるよう、精進してくださいませ。アディオス!

この記事が気に入ったらサポートをしてみませんか?