自己紹介

河合俊典氏:「機械学習OSSの変遷と未来」と題して発表します。「ばんくし」として活動しています。今、キャディという小さい製造業向けのITベンチャーで機械学習とかデータサイエンスをやるチームを立ち上げて、そこでリーダーをやっています。

前職はM3という医療ITの会社ですが、そこのフェローをやらせてもらっています。私は“ギルド”と呼んでいますが、趣味でそういった開発が好きな人で集まって開発をするチームを組んでいて、そこの主宰もやっています。とにかく開発が好きなかたちでいろいろ活動しています。

今日のテーマはOSSということで、このあとで出てくる、XGBoostやLightGBMという機械学習の分野ではかなり著名なところのコミッターをやっていたり、それのRust Wrapperのメンテナーをやっていたりします。

あとはML(Machine Learning)のパイプラインのフレームワークとか、もうちょっと広げると、Xonshというシェルがあり、このシェルにたぶん日本人で一番コミットしていると思います。

ほかの趣味はもうTwitterぐらいしかないので、基本的にずっとTwitterをやっています。ふだんは「この会場とか、今この空間の中で一番フォロワーが多いのが私です」とよくネタにして言っているんですが、今日はまつさん(まつもとゆきひろ氏)に負けているという現実があって。ただただTwitterに時間を浪費している人として発表いたします。よろしくお願いします。

今日のセッションの概要

完全に前のお三方(のセッション)はフリだなと思っていて。みんな「OSSとは?」とか「企業にOSSを導入していく」とか、「その文化を成熟させていくには?」みたいな話をしてくれると私は読んでいたので。

私はもうちょっと個にフォーカスして、「専門性を活かしたOSS貢献ってどういう考え方で、どういうポイントを押さえてやっていくとよさそうか」というのを、私はせっかく機械学習エンジニアとして長くやっているので、その実例をいくつか紹介しながら、最後に「エンジニアとしての実績とかキャリアにもつながりますよ」みたいなところで紹介していければと思っています。

機械学習OSSの状況

今回、機械学習エンジニアの方だけではないというのは承知の上で来ているので、まずざっくり「機械学習OSSってどういう状況ですか?」ということを紹介しようかなと思います。

(スライドを示して)これは私が昨日夜なべして作ったグレートな図ですが、機械学習エンジニアの触るOSSって、幅がどんどん広がってきています。おかげさまで一時期バズワードになったりしていたので、すごい勢いでライブラリが開発されています。

開発ツールになってくると「Jupyter」とか、インフラになってくるとKubernetesとかにも触れる機会があると思います。もうちょっとPythonに絞ると、例えば機械学習をやっていなくても「NumPy」とか、「Deep LearningといえばTensorFlowだよね」みたいなところは、みなさんも聞いたことがあるんじゃないかなと思います。

単に機械学習OSSというかたちで発表しようとしてもすごく広く時間がかかってしまうため、今日はその範囲を絞って紹介しようかなと思っています。どちらかというと、マシンラーニングのアルゴリズムやそのデータ構造みたいなところで、専門性が活かせる部分にフォーカスしてお話しします。

その部分を時系列にまとめてみました。実際、機械学習でよく使われている基盤のツール、例えば「NumPy」とか「SciPy」、行列計算とか数値計算を行うためのライブラリとか。あと、今かなり広く使われているpandasというテーブルデータを扱うOSSとか。

あとscikit-learnという広く使われているいろいろな機械学習のモデル、アルゴリズムだとか、評価指標だとか、その前処理のツールキットが入ったような統合ライブラリ。かなり古く、2000年代から作られているようなツールが多くなってきています。

2010年ぐらいにもう1回、おかげさまで機械学習ブームというのがきて。私はこのあたりを一番体験していると思うんですけど、Deep LearningのTensorFlowとかPyTorchというツールがこのあたりで出てきたり。先ほど私の自己紹介でも出てきたようなXGBoost、LightGBMもこのあたりでガンガン出てきたかたちになっています。

直近になってくると、「もうちょっとDeep Learningを簡単になおかつ高速に書きたいよね」ということで、Wrapperのライブラリや「JAX」というツールが出てきたり。もうちょっと広くAutoMLのような文脈で、「誰でも簡単にマシンラーニングができますよ」と「AutoGluon」というツールが少しずつ人気を博してきています。

もうちょっとツールに寄っていくと、例えば今はGPUのメモリがすごく増えているので、GPU上でいろいろなデータを扱いたいよねという意味でcuDF。これはpandasをCUDAの上で動かせるようにしたものだったり、xfeatというPFNが作っているようなOSSが出てきています。

(スライドを示して)この図には2020年以降、2021年のものがないんですが、図を作ってよくよく思い返してみると、2021年以降で目立った大きな変化は今のところないです。機械学習エンジニアが使っているのは、だいたいXGBoostやTensorFlowあたり。もっと古くから使われているpandasとかscikit-learnが長く使われているような状況です。

何が言いたいかというと、機械学習OSSはけっこう安定期に入ってきています。フロントで言うところの「Node.jsとTypeScriptとNextかReactかVueを使って開発をしましょうよ」というのが、機械学習エンジニアの中でもアルゴリズムにフォーカスすると安定して出てきているというのが現状です。

これは実際に数値でも見れるようになっています。(スライドを示して)これは機械学習のコンペティションのサイトを運営しているKaggleが毎年やっているアンケートのサーベイの結果です。先ほど出てきたscikit-learnというツールがかなりダントツで人気を博していて、その下に、TensorFlowとかXGBoostとか、先ほど出てきた2010年代に作られたようなツール、OSSが広く使われています。

右側の図はそれを過去4年のヒストグラムに変換したものです。その順序も特に大きくは変わっていないというのが、機械学習OSSの現状かなと認識しています。

ここで1回まとめると、ご紹介できていないところで栄枯盛衰や個々のモデル実装みたいなものは多くありましたが、主要なフレームワークは実は大きく動いていないような状況です。

こういう状況なので、マシンラーニングとかデータサイエンスの分野って、特にその1つの貢献が全体に響きやすいような状況になりつつあるので、実はOSS貢献をしやすい。たぶんいろいろな分野において、全体に響きやすいフレームワークがどんどん新しく出てきている状況なのかも、OSSに貢献する上での見極めというか、自分がどういうところで貢献していけばいいかというのを考えるポイントになるかなと思います。

専門性を活かした貢献とポイント1

専門性を活かしたところにフォーカスして、機械学習の事例をいくつか持ってきたので、それを紹介しつつ、「こういうところって大事だよね」ということをお話ししていこうかなと思います。

(スライドを示して)これは私が一番好きな事例でよく社内でもメンバーに話しているんですけど。先ほど出てきたLightGBM。これはMicrosoftが作っているモデルの実装ですが、そこにXE_NDCG_MARTというアルゴリズムを追加したというプルリクエストの実例です。この具体のアルゴリズムはここで紹介すると大変なのでしませんが、高速かつ精度が高いセッティング、パラメーターを追加したプルリクエストになっています。

けっこうおもしろいのが、このプルリクエストのオーナー自体は実際にOSS活動が活発的な方ではなくて。リサーチャー、研究活動をやっている方が、その後に論文を公開して、この手法を実際にLightGBMにプルリクエストで投げてきてくれているという状態です。

特にリサーチャーの方とか、もっと日々論文を読んでいる方は、数式をコードに落とし込む力や日々論文をサーベイする力があって、それが実際にOSSに還元されているいい例かなと思って、私はよく紹介しています。

専門性を活かした貢献とポイント2

CASE1を紹介したところで、他人の紹介だけだとあれなので私も似たような(例を紹介します)。これは先ほどのLightGBMのRustのWrapperを私が作ったものです。そこに対してFeature Importanceというデータを抽出する機能を追加しています。

これは何かというと、LightGBM自体のモデルの機能ではなくて、そのモデルの解釈基準を数値化するようなロジックのことを指しています。下にヒストグラムを書いていますが、あるデータを分類する時に、そこにおける判断基準として、例えば「age(年齢)が重要だったよね」みたいなことを数値化して表現できるような機能の1つです。

これは実際に「モデリングする過程」とか「コンペティションに出る」みたいなシーンで求められることが多いんですけど、私もその過程でこれを実際に機能追加しています。

こういったところから見ると、自分たちの専門性、ユースケースに対して困ったことをプルリクエストにしていく。なおかつ、そのラップしている元のロジックみたいな部分も理解しているのは、実はけっこう強みになっていて。それだけで多くのOSSとか、その専門性を必要としているOSSからかなり求められるというのが大きな現実かなと思っています。

専門性を活かした貢献とポイント3

「専門性がないとできないのか?」という話ではないと思うので、最後に簡単な例を出します。これはTop k Accuracyを実装して、先ほども「古くからありますよ」と言ったscikit-learnにAccuracyを実装した例です。

Accuracyという指標はすごく古くから機械学習界隈で評価指標として使われていて、めちゃめちゃロジックも簡単です。例えば0と1、0と1というものが10個並んでいて、そのうち1が何個あるかをカウントする。10個のうち例えば1個「1」が立っていたら、そのAccuracyは0.1という、すごくシンプルなロジックです。

Accuracy Scoreというメソッド自体はすでにscikit-learnの中にありましたが、Top k Accuracyという「上位何個見て」というものは長らく実装されていませんでした。なんで長らく実装されていなかったかというと、誰もやっていなかっただけ。みんな自分でTop kを切るロジックを書いて実装していたというのがすごくありました。

こういうのって、実際は「scikit-learnの中に入っていればみんな共通化して使えていいよね」という実装の1つだと思います。長らく開発が続いているようなOSSの中にも、こういう小さいイシューとか「こういう機能を追加しておけばみんなが便利になるじゃん?」みたいな機能に関するイシューは山ほどあるような状態なので。

専門性という意味以外でも、自分自身が日々使う中でのイシューみたいなところから「この機能とか、なんかこのメソッドがちょっと使いにくいんだけど、どうなんだろう?」みたいなのを提案するというのも、1つのかたちとしてはあるんじゃないかなと思っています。

リサーチとかコンペティションとか、ML/DSの専門知識が活きる貢献は多くあります。

これって言い換えると、機械学習に限っていなくて。例えば物理や数学でpaperを読んでいて、それに関連するライブラリとか数式が読めるので、その論文を読んでOSSに貢献するようなかたちもできる。例えば、医学も最近はOSS化が激しく行われている分野の1つだと私は認識しているので、そういったところにコミットしていくのが1つのポイントになってくるかなと。

それだけじゃなくて、専門的なライブラリから離れなくても、小さな改善もライブラリには残っているので、チェックしてみるといいんじゃないかなと思っています。

OSS活動みたいなところをやっている人は評価しやすい

最後にちょっとザクザクっと、エンジニアのキャリアに対する接続のお話だけしていこうかなと思います。

(スライドを示して)これは特にMLやデータサイエンスのキャリアです。もともとMLやデータサイエンスの分野は、コンピューターサイエンスやマシンラーニング、あと統計の分野からくる方が基本的には王道と言うか、多くの割合を占めていました。

しかし直近だと、例えばもともと物理をやっていて大学が終わって新卒でMLE(Machine Learning Engineer)になるような人とか、数学や医学、経済学をやっていて(なる方)とか、そういったいろいろな分野の方がマシンラーニングやDSの分野に来ています。

これはたぶんマシンラーニング、DSに限らず、こういった方々がプログラミングの世界に入ってきているのが近年の傾向かなと思っていて。そういった中で、そういう人のバックグラウンドを評価するのはすごく難しくなりつつあるなと。私はよく採用もやっているんですけど、そう思います。

例えば物理の論文、書いた論文、博士論文とかを読んでも、内容がなにを書いてあるのかわからないので、その人がどれぐらい学術的にすごいかを評価できないというのがあったりします。これはちょっとミニマムケースなので別の方法で評価するんですけど。

そういった中で、OSS活動みたいなところをやってくれていると、けっこう評価しやすかったりするというのが1つ入りとしてあるかなと。特に「プロダクト開発に向き合っているかどうか?」「いろいろな人とコミュニケーションをとって開発できるんですか?」が見える化されている分、わかりやすいなと最近思っているところです。

私の話をすると、LightGBMの開発をやっていて、そこのコミュニティからスカウトメールをいただいたり、現職の転職においてもRustと機械学習みたいな文脈をずっとやっていたので、その文脈でTwitterでDMをもらってお話が始まったというのがあって。外向けに活動するという意味でも、やはり効果があるとよく思います。これはちょっと私の例なのでいったんこれぐらいにしておいて。

機械学習の知識や実装力が可視化が今後のキャリアにつながることもある

まとめると、機械学習の知識や実装力が見えることで、キャリアにつながることはけっこうあると思っています。これは別に機械学習に依らないというのは、先ほどから言っているとおりです。

特に今まで専門性を磨いてきていて、開発とかチーム開発をやったことがない人も巻き込むとか、そういった人と一緒に開発していくという方向もけっこうありだなと思っていて。そういった方がMLEとかDSを目指す時に、一緒にやるのはかなり有効かなと思います。

最後に軽く言うと、CADDi AI Labの採用を私もやっています。GitHubアカウントもmustではなくてnice to haveで一応見ています。そこで「どういうコードを書いているんだろう?」「どういうプルリクエストを出しているんだろう?」というのを見ているので、今もあると思いますけど、そういった企業も今後どんどん出てくるんじゃないかなと思っています。

最後に機械学習の未来、OSSの未来の話です。それを作るのはキャディとM3。一応私がフェローをやっているので宣伝で、この2つのアカウントをフォローしておくと、そういった情報がTLにどしどし流れてくるんじゃないかなと思うので、ぜひフォローをお願いします。

ということで、私の発表は終わりにしたいと思います。ありがとうございます。