Introduction
AIのテストと聞いてどのような作業を思い浮かべますか?「2回か3回、実際に動かしてみて、それらしい答えが返ってくるか」というようなテストを想定される方が多いと思います。前回までの記事をご覧になった方は、性能劣化といったAIならではのテストも必要だとお考えかもしれません。今回の記事ではその中でも「2回か3回、実際に動かしてみて、それらしい答えが返ってくるか」というようなテストの問題点と、それを解消するための具体的な方法について紹介していきます。
目次
AIはテスト不可能?
従来型のプログラムのテストは、「入力値がこうだったら、動作結果はこうでなければならない」という形で期待値を定義し、プログラムの実際の動作結果と比べることで行われてきました。この入力値と期待値の組み合わせをテストケースと呼びます。テストケースはひたすら数を増やせば良いテストができるというものではありません。入力データの条件(境界値)をすべて洗い出し、その境界の範囲内でのテストケースと、範囲外のテストケースをそれぞれテストするということを繰り返します。こうすることですべての入力条件を網羅することができ、どのくらい網羅できているかが良いテストの指標(網羅性)となっています。
では、AIについてはどうでしょうか。まずテストケースのつくり方です。AIはきわめて複雑な計算過程を経て結果を返します。生成AIが返すような複雑な回答を事前に用意することは現実的に不可能です。したがってAIでは「動作結果はこうでなければならない」という期待値をカチッと固めることができませんので、そもそもテストケースをつくれない、という問題があります。また、境界値についても、「ここまではAIの守備範囲だがこれは範囲外」といった線引きがかなり難しいこともAIの特徴です。といったことから、AIのテストは従来通りの手法では不可能ということになり、別の手法でテストする必要があります。
従来システムのテスト | AIのテスト | |
テストケース | 作成可能 | 作成不可能 |
境界値 | 特定可能 網羅性100%が可能 |
特定不可能 |
AIへの適用 | 不可能 | 可能 |
AIシステムの品質保証をテーマに、 SHIFTで実施しているノウハウを紹介しながら具体的な手法や進め方などを説明した資料はこちらからダウンロードしてご覧ください。
>>AIシステムの品質保証ー基本と進め方ーのダウンロードページへ
AIのテスト手法
ではAIのテストはどのような手法があるのでしょうか。代表的なものを紹介します。
# | テスト手法 | 概要 |
1 | メタモルフィックテスト | 元データとメタモルフィックな関係のデータを作成することによりテストデータの十分性を高め、出力結果を比較することでより網羅的に推論の確からしさを評価する |
2 | Nバージョンプログラムテスト | メタモルフィックな関係性が想定できない場合においても、複数のモデルを用意しそれぞれの出力結果を比較することで推論の確からしさを評価する |
3 | 最大安全半径テスト | 元データに微小なノイズを加えたテストデータを作成し、元データの出力と一致しなくなるノイズの最小値を複数のパターンで求めることでモデルの安定性を評価する |
4 | 網羅検証テスト | 未知のデータに対して、発生しては困るような出力条件を数式で表現し、モデルを解析的(数学的)な手法で、数式が成立する条件がないことを検証する |
5 | ニューロンカバレッジテスト(発見的手法) | 他の手法では気がつきにくい問題を見つけることを目的に、ニューラルネットワークの各ニューロンが活性化されるような入力を生成して(ニューロンカバレッジを上げる)テストを行う |
6 | サーチベースドテスト(発見的手法) | 事前に用意したデータでは見つけにくい誤りを見つける事を目的に、探索手法により誤りの確率の高いデータを作成してテストを行う |
なかでもとくに代表的なテスト手法であり汎用的に使えるメタモルフィックテストとNバージョンプログラムテストを次の節で詳しく紹介します。
関連サービスについて
メタモルフィックテストとは
既知のテストデータと“メタモルフィックな関係”のデータを使ってテストを行う手法です。
“メタモルフィックな関係”とは、聞きなれない言葉ですが、「入力に対してある一定の変化を与えたときに、出力の変化が理論上想定できる」ことを指します。たとえば、次のような数式がメタモルフィックな関係です。
sin(θ) = sin(θ+2π)
sinってなんだっけ?とか、数式に拒絶反応がある方向けにもっとわかりやすくいうと、たとえば90度という角度と450度という角度は、書き方は違いますが同じですよね。だからsin(90度)とsin(450度)は計算結果が想定できる(この場合は計算結果が同じ)ということになります。これがメタモルフィックな関係ということです。ではこれを使ったテストを下の図の通り考えてみます。
AIは学習データを入力して構築しますから、「既知のテストデータA」は必ずあります。このテストデータAを使ってテストデータA‘を作成します。A‘はAと同じではいけませんが、微妙に異なるデータです。次に、このテストデータA‘での結果を想定します。ここでは「出力を想定できる」テストデータA‘を用意することがポイントです。こうして想定する結果が従来型テストで言うところの期待値となります。そしてAIが出力したデータB‘と期待値を比較、評価することで、テストとします。これをメタモルフィックテストと呼びます。
では従来型のテスト手法とのもう一つの違いだった網羅性についてはどうでしょうか。メタモルフィックテストで使うテストデータA‘は理論上は学習データの量だけ準備することができますから、完全網羅とはいえなくてもかなり網羅性の高いテストをすることが可能です。このようにメタモルフィックテストは比較的手軽に、一定程度の網羅性が担保できるテストを行うことができます。
ただし、メタモルフィックテストの適用が難しいケースがあります。そもそもメタモルフィックな関係性を定義することができない場合や、テストデータA‘を準備することができない場合、完全な網羅性が求められる場合などです。これらの事情がある場合は、別のAIテスト手法を検討することになります。
Nバージョンプログラムテスト
Nバージョンプログラムテストは、複数のAIモデルを使ってテストを行う手法です。下図の例では、AIモデル①をテスト対象とし、AIモデル②、モデル③を用意し、それぞれのモデルからの出力を比較しています。ただし、テストデータは未知のものを使用します。各AIモデル(①~③)に対して同じテストデータを使用します。
Nバージョンプログラムテストは、想定値(期待値)を定義していません。つまり”正しい”かどうかをテストするものではありません。あくまで各モデルの出力値が”同じ傾向”にあるかをテストするものです。これは従来型のシステム開発で行われるテスト手法と少し違う考え方ですので、戸惑う方が多いかもしれません。
Nバージョンプログラムテストの利用シーンを見てみましょう。例えば既存のAIモデルをバージョンアップする際に適用できます。具体的には、現行バージョンのAIモデルと新バージョンのAIモデルとを準備し、同じデータを入力して出力値を比較します。その出力値が一致していなければ、AIモデルまたは入力データに何らかの問題があると言えます。逆に一致していれば、新バージョンのAIモデルも信頼できると考えることができます(推論の確からしさ)。
Nバージョンプログラムテストは、複数のAIモデルと未知のテストデータが必要ですが、メタモルフィックな関係を想定できない場合や想定値(期待値)を準備することが困難な場合でも適用できる、強力なテスト手法です。
AIシステムの品質保証
本資料は、AIシステムの品質保証をテーマに、 SHIFTで実施しているノウハウを紹介しながら具体的な手法や進め方などを説明しています。
AIシステムの安全性と信頼性を確保することで、ユーザーに安心感を提供し、その結果、より広範囲での利用を促進いただけます。品質が確保されたAIシステムは、予測精度が高まり、ビジネスの意思決定や社会問題の解決に大きく貢献します。ぜひご覧ください。
本資料は、AIシステムの品質保証をテーマに、 SHIFTで実施しているノウハウを紹介しながら具体的な手法や進め方などを説明しています。
AIシステムの安全性と信頼性を確保することで、ユーザーに安心感を提供し、その結果、より広範囲での利用を促進いただけます。品質が確保されたAIシステムは、予測精度が高まり、ビジネスの意思決定や社会問題の解決に大きく貢献します。ぜひご覧ください。
まとめ
AIのテストを行う際は、従来型の手法をそのまま使うことはできず、AIテストのためのテスト手法を選択する必要があります。代表的なAIのテスト手法は「メタモルフィックテスト」や「Nバージョンプログラムテスト」で、これらは比較的手軽に適用でき、ある程度の網羅性を担保できます。が、万能なテスト手法は存在しないため、システムの特性やテスト目的に応じて最適なAIのテスト手法を選択する必要があります。
>>SHIFTのAI特化型品質保証サービスページへ
>>お問い合わせページへ
>>料金についてページへ