AIが爆発的に普及しているここ最近ですが、誰がどのようにその仕組みを作っているか想像できますか?
例えば私たちが利用しているYouTubeは個人の好みを学習し、私たちが見たいと思う動画を提案してきています。その仕組みは誰がどうやって実装しているのでしょうか。
答えはAIエンジニアです。
社会のあらゆる場面でAIが活用されることが増え、AI技術を実装するプロであるAIエンジニアに最近注目が集まってきています。
今回はそんな、近年活躍の機会が多くなっているAIエンジニアについて、実際にどんな仕事をしているのか、一般的なエンジニアとは何が違うのかなどを紹介していきます!
AIエンジニアとは?
AIエンジニアとは、機械学習技術を用いてシステムやアプリケーションを開発するエンジニアです。
仕事内容としては、主にAIモデルの構築と、システムやアプリケーションへのAI技術の導入を行うことが挙げられます。
AIモデルの構築
ビジネス課題を解決するための機械学習モデルを構築し、AI技術を実装するのがAIエンジニアの仕事です。
機械学習モデルを構築するため、AIモデル開発用フレームワークを用いた開発、データの収集や加工、データセットの整理を行います。
機械学習モデルとは、機械学習アルゴリズムを用いてデータを学習させた、様々な事象を予測するモデルです。代表的なものとしては、売上予測モデル、情報推薦モデル、画像認識モデルなどが挙げられます。
一般的なエンジニアと比べて、データの取り扱いやAIシステム・機械学習モデルに関する設計、モデルの精度向上に関する知見が求められる機会が多いことが特徴です。
システムやアプリケーションへのAI技術の導入
AIモデルを構築しただけでは、ビジネスの現場で活用することができません。
既存のシステムやアプリケーションに接続したり現場に新しく導入し、問題なく動作させる必要があります。
例えば、画像認識で異常を検知するAI技術を導入するとなった時には、単に異常検知のモデルを構築するだけでは現場で活用することができません。
構築した異常検知のモデルをどのような形で搭載させるのか、画像をリアルタイムで撮影するシステムをどうするか、異常を検知するための処理速度は十分か、などシステムを全体で考え、設計する必要があります。
また、ChatGPTを筆頭とする生成AIが登場し、業務システムに生成AIを組み込みたいという需要が高まっています。
一番多い例としては、QAチャットをAIで自動化したいという依頼や、社内のテキストデータを学習させて社員が利用できるQAチャットボットを作りたい、という活用法です。
生成AIを使ったシステムを構築する場合は自分たちでモデルを構築するのではなく、ChatGPTなど既存のモデルのAPIをシステムに組み込むよう設計する必要があります。
チャットボットの作成、文章校正ツールなどを実現する言語系の生成AI、言葉を入力して指定した画像を出力する画像系の生成AIなど、ビジネスでの活用機会が増えるとともにこれらをシステムに組み込む役割が重要になります。
一般的なITエンジニアとの違い
システムやアプリケーションへのAI技術の導入
AI技術の導入に関しては、テストの手法が一般的なエンジニアと大きく異なります。
一般的なITシステムのテストは、入力に対して出力が正しいかどうかを客観的に判断することができます。
ここのボタンをクリックしたらこの画面が表示される、この時間になったらこのデータが読み込まれる、などです。
一般的なシステム開発だと事前にテストケースを作成して、それらを全てパスするようにテストすると思います。
一方のAIモデルに関しては、100%正解を出すことは難しいです。どんなAIモデルでも間違えた結果を返してくることがあります。
ある程度の間違いを許容する必要があります。現代最高のAIの一つと言っても過言ではない、ChatGPTですら、間違った答えを返してきます。
精度が100%にならない前提でアプリケーションの設計、UXの設計、テストの設計をする必要があります。
このようにAIが返してくる結果に対して、判断基準を設定するのが一般的なITシステムに比べて難しいという違いがあります。
AI技術をシステムやアプリケーションに導入するプロジェクトでは、それ以外の部分は一般的なエンジニアの行うシステム開発と概ね同じと言うことができます。
AIモデル構築
AIモデルを構築する際の流れは、一般的なITエンジニアのシステム開発手順とは大きく異なります。
AIエンジニアがAIモデルを構築する時には、以下のような流れでサイクルを回します。
モデルの設計
プロジェクトの目的を明確化し、どのようなモデルが必要かを考えます。
プロジェクトの目的から、実装後の運用イメージを作ります。
そこに必要なモデルは何かを自らの経験や論文調査、事例調査などを通じて検討します。
例えばリアルタイムで顔を認識するシステムの構築が目的として設定されている場合、畳み込みニューラルネットワークなどのアルゴリズムを利用したモデルを開発することや、yoloなどの画像認識モデルを使用することが候補として挙げられるでしょう。学術的な論文や、Web上の技術記事、時には社外の専門家とディスカッションすることなどを通して徹底的に調査を行います。
精度の設計
モデルの設計ができたら、そのモデルでどのくらいの精度を出せば良いのかを考えます。
ここでも、どのくらいの精度を出せばビジネス上の課題が達成できるのか、KPIを設定することが重要です。
例えば体温を計測するために顔を認識したいというビジネス上の課題があった場合、99%の精度があれば残りの1%は手動で体温計によって測ることができる、などの調整をしながらKPIを設定することができます。
ビジネス上の課題、現場の状況、技術的な実装のバランスを取りながら精度を設計していく必要があります。
データ設計
モデルの学習に必要なデータはどう準備するのか?を考えます。
ここでは既に学習するためのデータが用意できている場合、できていない場合が考えられます。
例えば気象庁が天候を予測するモデルを作成したいと思った場合は、自身で収集した過去の天候のデータがあるため、データは用意できていると言えます。
一方で今まで天候に関するデータを扱っていない企業が新しく天候予測モデルを作りたいと考えた場合、自分たちで0からデータを用意する必要があります。
データが十分に用意できていない場合、
- システム上でユーザーや業務フローを通じて集める
- 公開されているデータセットを利用する
- 自分たちで教師データを作成する
などの方法でデータセットを準備する必要があります。
先ほどの天候データの例だと、公開されているデータセットがないかを調査し、なかった場合は気象庁から公開されている天気や気温などのデータを整理・加工し、データセット化する必要があります。プログラムを作成し、ダミーデータを生成するという方法も考えられるでしょう。
既にデータがある場合でも、きちんとデータ化されているか、データ形式が適切であるか、などをきちんと確認しましょう。
具体的には、そもそもデジタルデータになっているか、欠損値(抜けているデータ)はないか、欠損値がある場合は対処できそうか、機械学習モデルに入力させる形式に加工・変換するのにどのくらいのコストがかかりそうかをチェックする必要があります。
大規模なデータを扱うプロジェクトであれば、データレイクやデータウェアハウスなどの大規模データ処理基盤の構築を検討する必要があります。
実装
十分にモデルやデータなどに関して設計できたら実装を始めます。
環境構築やデータの読み込み、成形なども含めてプログラムの記述や様々なサービスを扱う技術が必要になります。
例えばよくあるのは、モデルはPythonでPyTorchライブラリを使用しながら記述し、データの加工はSQLで行うなどのケースです。この場合それらの言語を記述する技術はもちろん、プロジェクトによってGitやDockerなど様々な技術に対する扱いが必要になります。
テスト(精度/速度)
実際に構築したAIモデルがどのくらいの精度を出しているのか、どのくらいの速度で出力をしているのかを様々なテストケースにおいてテストをします。
先ほども述べたようにモデルが「良いか悪いか」の評価をすることは難しいです。自分たちで適切なKPIを設定し、判断する必要があります。
様々な評価指標を用意し、モデルについて基準を設定した上で実際の現場で運用することができるかを慎重に判断します。
AIエンジニアの役割とは?現役AIエンジニアの仕事内容に密着
AIエンジニアは、1日にどのような業務を行なっているのでしょうか。
弊社で活躍するAIエンジニアに密着し、実際の仕事についてお話を聴いてみました。
- 現在行っている仕事の概要を教えてください
中條:新しいプロジェクトのPoC(※1)を担当しています。
新しいプロジェクトでは、現在公開・運用されているアプリ内の商品をおすすめする機能に、AIによる推薦アルゴリズムを新たに搭載したいという依頼で進められています。
従来の、ルールベース(※2)のアルゴリズムよりも予測精度の高い推薦アルゴリズムを作ることが目標です。
現在はプロジェクトの目的をすり合わせしつつ、構築した推薦モデルを改善している段階です。
※1PoC:概念検証。開発に入る前段階の、小規模で試作や実装を行う検証プロセス。
※2ルールベース:あらかじめ決まったルールを基に推薦を行う。Aを選択したユーザーにはBを推薦する、など。
クライアントミーティング
中條:ビジネスサイドとの定期的なすり合わせは非常に重要です。
作っているものが最終的に求められている形なのかを頻繁に確認しておかないと、大きなやり直しが発生し、時間を無駄にすることになります。
それを防ぐためにも、定期的なアウトプットの報告・確認を行い認識のすり合わせ、そこからの方針の決定をする必要があります。
このプロジェクトでは1日1回30分のミーティングを行い、調査結果や改善したモデルの精度を報告しています。
また、モデルを構築するにあたってユーザーや業務フローについてこちらが細かく把握しておく必要があります。
今回はアプリ内の推薦システムを構築するプロジェクトなので、アプリの詳細やユーザーの動向など、こちらが気になった部分も含め細かく共有してもらい、モデルの構築の参考にしています。
論文調査
中條:推薦モデルに関する論文を複数調査していきます。
同じアルゴリズムを使うとしてもプロジェクトによって求められるモデルは微妙に違うので、プロジェクトに合ったアルゴリズムを調査・インプットするのは非常に重要です。
例えば今回の推薦モデルでは、アルゴリズムとしてランダムフォレストやGBDT(勾配ブースティング決定木)、ニューラルネットワークなどの候補があります。それぞれについて派生の理論などを調査し、それぞれについて検討した上で簡単なモデルを試しながら進めています。
プロジェクトに関連する論文を複数ピックアップし、提案されているアルゴリズム、使用されているデータセット、実験結果をざっと確認します。
その中で実際にプロジェクトのモデル構築に活かせそうなものがあれば詳しく読み込み、自分でモデルとして作ってみたり、検討中のモデルを改善します。
モデル改善
中條:論文調査や事例調査を通してモデルを改善するための仮説を複数出し、それらを試していきます。
今回の目標は学習時間を現状のまま保ちつつ、一つの指標における精度を向上させることです。
調査の結果以外にもデータの再加工、特徴量の調整、パラメータチューニングなどを行い、より良い形の学習モデルを作ります。
今日は午前中にミーティングと論文調査を行なったので、それを基にいくつか新しいアルゴリズムを含めたモデルを作り、試してみようと思っています。
モデルの精度検証
中條:それぞれモデルの改善を行なったら、精度の検証をしていきます。
今回は推薦アルゴリズムの精度検証なので、テストデータは過去のユーザーの行動履歴データを整理し、加工したものを使っています。これをオフライン評価と呼びます。
具体的には、入力はユーザーの年齢や過去のアプリ使用データなど、正解データはおすすめ機能からのクリックデータ、CTR(クリック率)のデータです。
今回はおすすめ順上位の予測の精度を検証したいので、mAP(※1)やMRR(※2)などと言った指標を参考にします。
改善を行なった各モデルについて、これらのデータや指標を使ってどのくらいユーザーのクリックするものを予測できているのかを検証しています。
※1,2 mAP(mean Average Precision)、MRR(Mean Reciprocal Rank)。統計学や機械学習タスクにおける評価指標の種類。
AIエンジニアに必要な能力は?社員にインタビュー
AIシステムの需要が高まるにつれて、AIエンジニアを目指す人も増えてきています。
AIエンジニアを目指す人が身につけるべき、必要な能力はどのようなものなのでしょうか。
社内の現役AIエンジニアにインタビューを実施しました。
- AIエンジニアに求められる能力にはどんなものがありますか?
機械学習理論
松田:当然、専門家として機械学習理論について精通している必要があります。
ニューラルネットワークや決定木などのアルゴリズムのような基礎的な部分から、それぞれの実践的な知識・経験が必要になります。
自分は、基礎的な部分は技術書を読むことによってかなりつけられたと思っています。あとは先輩と一緒にプロジェクトをこなすことでデータ加工や精度に対する考えなどは身につけられたかなと思っています。
レポーティング
松田:実際のプロジェクトでは、機械学習モデルがどのような結果を出しているのかをビジネスサイドに報告することが必要になります。
具体的には、自分は得られたデータをPythonのライブラリで可視化し、スプレッドシートに整理してミーティング時に報告するということが多いです。
モデルの精度などの結果を複数の指標を用いて分析し、可視化することで機械学習や統計の知識がない人にも分かりやすく伝える能力が求められます。
相手が何を知りたいのか、得られた結果の中でどこが強調するべき点なのかを考えることが重要です。
統計学
松田:データを扱う上で、統計学は欠かせない知識です。
統計学を身につけておくことで、指標の信頼性やデータ同士の関連性などをスムーズに理解することができます。
例えばプロジェクトで精度が出力できた時、その値が信頼できるかどうかは統計学では確率として表すことができます。このような結果に対する"妥当性"は統計学の知識があれば定量的に判断することができるようになります。
自分は入社当初は統計学について触れたことがなかったのですが、社内の技術書を読んだり勉強会に参加することによって、確率やベイズ推定などの必要な知識は一通りインプットすることができました。
実務でも使う機会が多くあるなと感じています。
キャッチアップ力
松田:機械学習だったり生成AIなどの技術は比較的新しく、つい最近新しい手法が生まれていたり、生成AIが提供されるサービス自体の仕様が変更されたりします。
実際のプロジェクト内でもそのような情報の重要性は認知されており、勉強会なども多く開かれています。
例えば機械学習やLLM(※)などに関する論文を読んでまとめたり、その技術を実際に使ってモデルを構築してみたりと、常に新しい手段を取り入れることが求められます。
※LLM:Large Language Model(大規模言語モデル)。ChatGPTを代表とする、大量のテキストデータによって学習された高度な言語モデル。
- AIエンジニアに求められる能力にはどんなものがありますか?
KPIの設計力
佐藤:KPIを自分で設計し、そこに向けて成果物を作り上げていく能力が必要だと思います。
まず、プロジェクトやプロダクトで要求される重要な目標達成指標が存在します。例えば自動化によって業務効率を向上させ、人件費を20%削減するなどです。
これはKGI(Key Goal Indicator)と呼ばれることもあります。
それに対して、KGIを達成するために必要なKPIを設計していきます。
機械学習モデルを学習させる場合は精度と呼ばれる値を設定して、モデルの良し悪しを判定しますが、我々の場合はこれがKPIになります。
しかし、機械学習モデルの精度と一口に言っても、何を設定するかでプロジェクトの達成度合いは大きく変わってしまいます。
例えばニュースメディアの記事推薦モデルの精度は何に設定するのが適切でしょうか?
そのニュースメディアはどのようなビジネスモデルになっているのか、から逆算して考えなければなりません。
いくつか例を挙げると、クリック率、記事の滞在時間、広告のクリック回数、など様々な指標が考えられます。
例えばクリック率を精度として設定したとして、従来のモデルよりもクリック率が改善したが、広告のクリック回数が下がって、メディアの収益が悪化する、という可能性も充分考えられます。
ビジネス上の改善したい課題から逆算して自分でKPIを設計する必要があるのです。
大規模データを扱う能力
佐藤:機械学習を行うためには大量のデータが必要です。
当然モデルを構築する際に準備するデータは非常に大規模になります。
基本的な部分ですが、例えば最初につまづいたのはデータの量が大きくなると、データの場所を移すのにも普通の方法では膨大な時間がかかるということです。
データの圧縮やデータ整理に関するプログラムを自分で書いたり、ETL(※)などデータ基盤の取り扱いを習熟しておくなど、データの扱いの工夫を確立しておく必要があります。
※ETL:Extract(抽出)、Transform(変換)、Load(格納)。データ統合時に発生する各プロセス。
アプリケーション開発の技術そのものも必要
佐藤:機械学習を専門とするエンジニアとはいえ、AI技術をシステムに導入する機会も多いため一般的なエンジニアと同等の、アプリケーション開発を行う能力も必要です。
バックエンドだけでなく、フロントエンドも含めたアプリケーション開発の知識・経験も求められる場合があります。具体的にはPythonを使って一気通貫で開発するケースや、React + TypeScriptなどの組み合わせでフロントエンドも含めて開発することが多いです。
一般的なITエンジニアには必要で、機械学習エンジニアに必要ないという能力はないように思えます。
- ありがとうございました!
今回は、AIエンジニアが一般的なエンジニアと比較してどのような仕事をしているのかを紹介していきました。
AIシステムの需要がどんどんと高まっていく世の中、必然的にAIエンジニアへの需要も高まってきています。今回の記事が、そんなAIエンジニアに対する具体的な理解が深まるきっかけになれば幸いです。
今回の記事を読んで「自分もAIエンジニアとして活躍してみたい!」と思った方はぜひAIシステムを社会を変革する、株式会社Nucoへエントリーお待ちしています!