こんにちは。teratail開発チームの鈴木です。
今回は,2018年3月23,24日に行われた「MANABIYA -teratail Developer Days-」にて,TIS(株)戦略技術センター 主査,久保隆宏氏によるセッション「機械学習時代のシステムプログラミング」を聞かせていただきましたので,こちらの内容をレポートしたいと思います。
teratailの周りで機械学習を活用している事例はなく,個人的な使用経験もなかったのですが,機械学習ならではの難しさや考え方を知ることができ,刺激を受けることができました。
セッション中の久保隆宏氏

「茶帰」というミッション
はじめに,登壇者である久保さんの所属するチームのミッションを紹介していただきました。
「茶帰」という愛称があるようですが,この実現のためには仕事を効率化するだでなく,仕事の仕方自体を変える必要があるということで,機械学習ならではのアグレッシブで素晴らしいミッションだと感じました。
ただ,そうは言ってもすぐに変えるということはなかなか難しいので,プロトタイプを作成し,実際に効果を体験してもらうことを大切にして活動されているそうです。
また研究活動はオープンに行われており,GitHubのリポジトリには総計で700を超えるスターが集まっているとのことでした。
機械学習モデルの依存性管理
次に,本セッションのメインとなる依存性管理のお話です。
機械学習にはさまざまなメリットがある中で,従来のプログラムとは異なる性質を有しています。その性質とは,機械学習による判断は確率的なものになるという点です。たとえば猫の写真に対して,機械学習モデルを通してこれが何なのかを判断させると,「○○%猫である」というような結果が得られます。
こうしたはっきりとしない出力は通常のプログラムでは扱うことができないため,そのギャップを埋める処理もまた,機械学習をシステムに組み込む上では必要になります。
ギャップを埋める代表的な手法には,「これ以上の確率なら次に進む」という閾値を用いる方法と,確率が最大のものに寄せる方法の2つがあり,一般的には後者の方がよく用いられるとのことでした。ただ,確率が最大のものに寄せる方法には問題があり,その例として挙げられていたのは,ツイートが危険だったらツイッターアカウントを停止する処理でした。
この処理で確率が最大のものに寄せる方法をとった場合,停止するかしないのかの二択であるため,ツイートが危険という確率が50%を超えた段階でアカウントが停止されてしまいます。これでは不確かな証拠でアカウントを停止してしまう可能性があり,ユーザーに大きな不利益が発生してしまいます。したがって,一定の責任がある処理を行う場合には,適切な閾値の設定が欠かせないとのことでした。
つまり,機械学習モデルを既存システムに組み込む場合,機械学習を利用する側に,機械学習の判断を「扱う方法」を設定しないといけないことになります。これは,もし機械学習モデルに更新が発生したら,扱う側も更新しないといけないことを意味します。そのため,機械学習をシステムに組み込む際は,この連鎖範囲を確認してメンテナンスをしないといけないということです。
この連鎖範囲を把握するために,「モデルの利用を通じた依存関係」と「データを通じた依存関係」の2種類の依存関係を明らかにする必要があるとのことでした。
モデルの利用を通じた依存関係とは,作成したモデルが別の用途でも使用されることや,それをベースにした新たなモデルが作成されることによる依存関係を指します。データを通じた依存関係とは,同じデータソースを使っているモデルは,更新の際同期をとらなければならないことがあるというものです。これは,モデルの判断傾向が作られた時期のデータの傾向に依存することにより,同じデータソースが元なのに判断傾向に差が出てきてしまうためです。
これらの依存性をいかに管理するかが,機械学習のビジネス上のパフォーマンスを維持するために重要になってくるということですね。
依存関係の管理方法には,開発面と運用面からのアプローチが考えられるそうです。
開発面からのアプローチでは,コードにおけるモジュール依存関係の文脈で管理できるようにします。運用面からのアプローチでは,学習プロセスなど機械学習にまつわる処理をログとして管理しておき,そこから依存関係をたどることができるようにします。
セッション内で実践編として紹介されていたコードは,登壇者の方の[GitHubリポジトリ(icoxfog417/jetbull)から見ることができるようです。
機械学習エンジニアの進む先
続いて,機械学習エンジニアが今後何をしていくべきなのかという点についてもお話いただきました。
結論として,機械学習自体の自動化が進む中で,機械学習エンジニアが取り組むべき問題は変化してきており,「より特化」「より汎用」「より柔軟」という3つの方針が挙げられるそうです。
機械学習エンジニアが取り組むべき問題

「より特化」とは,データの前処理,素のデータには無い特徴の追加など,よりドメインに特化した処理を行うことで精度を上げていきます。
「より汎用」とは,より細かいカテゴリを持ちさまざまな分類に対応できるモデルや,言語ではクロスリンガルなモデルを指しています。
「より柔軟」とは,適切な事前学習済みモデルを作成しておき,少ないデータしか存在しないような状況にも対応していくことです。
現実のビジネス環境では,売上予測モデルにおける競合店の出現や質問回答システムにおける法令の改正のような,機械学習モデルに大きな影響をもたらすような変化が多く起こり得ます。そのため,「より柔軟」の実現は,変化の多いビジネス環境にも機械学習の活躍の場を広げるという面で重要です。そしてその際に,今回お話いただいた依存性の問題が現れるということでした。
このように機械学習の活用をさらに進めていくには,機械学習の研究的な進歩だけでなく,今回お話しされていたような「どう扱うか」というエンジアリング面での進歩も求められるというお話でした。