こんにちは。QAエンジニアの大橋です。
ご存じの方もいらっしゃると思いますが、先日ユニファではchatGPTを活用した入力補助機能(β版)をリリースしました。 prtimes.jp
有難い事に、IT media様でも記事を出して頂けました。 www.itmedia.co.jp
こちらのテストを担当したので、今回はそのことを書いてみようと思います。 (入力補助機能(β版)の概要についてはプレスリリースを参照ください。)
ユーザー向けとしては弊社でも初の機能であり、AIソフトウェアのテストとは。。。?の状態からのスタートでした。 書籍を参考にしたりと手探りで進めている中で得られた事を書いていきます。
参考資料を探している中で辿りついた方には申し訳ありません。
段取り不足により、テストのための準備期間を十分取れておらずのため、検討不足や正道は理解しつつも実行できていない点があります。 (記載内容は私の理解を元にしていますため、誤った事を書いている可能性もあります)
まずはAIソフトウェアに対する取り組みの一歩として、また世の中に数ある実例の1つとして、こんな事をしているのかという温かい目で見て頂ければと思います。
準備したこと
以前購入し詰本となっていた「AIソフトウェアのテスト」という書籍を読み込から始めました。 まずはこの書籍を通して、AIソフトウェアおよびテストに対して下記のような理解を持ちました。
- AIソフトウェアとは、機械学習の技術を利用したソフトウェアであり、AIソフトウェア利用したシステムがAIシステムである
- AIソフトウェアは、学習データから自ら抽出した特徴を利用し、未知の入力データに対して特徴に着目して判別を行う
- 事前の学習により、抽出したい特徴を定義する必要がある
- 出力結果は、学習データと近い特徴から判断されたものであり、入力に対する出力結果が正しい保証は無い
- AIソフトウェアのテストアプローチには大きく4つある
- メタモルフィックテスティング
- 入力に対する出力の正解値はわからないが、入力に一定の変化を与えると出力がどう変化するのか予測できるという、メタモルフィック関係を利用したテストアプローチ
- 参考:JaSST'19 Hokkaidoレポート「Deep Learning搭載ソフトウェアの品質評価/テストを前進させる取り組み」P27
- ニューロンカバレッジ
- 学習に使用したデータを使用し、ホワイトボックス的にニューラルネットワークがどの程度使われたかを測定、網羅性を高めていくためのテストアプローチ
- ディープニューラルネットワーク向けのテスト手法の1つ
- 最大安全半径
- 学習用データを元に出力された内容が、出力結果としてどこまで許容できるかを定め、出力結果を評価するテストアプローチ
- 誤って判別させるデータ(敵対的データ)を入力として使用し、入力結果に対するロバスト性(頑健性)を評価する
- 参考:産総研「機械学習品質評価・向上技術に関する報告書第2版」P34
- 網羅検証
- 絶対に守って欲しい条件に対し、「どのような入力データであっても、事前に与えられた条件を逸脱しない事」を確認するテストアプローチ
- 絶対守りたい条件に対し、全ての入力パターンで網羅的に実施し、条件を満たす事を確認する
- メタモルフィックテスティング
テスト対象に対するスコープの検討
次に、書籍で得られた知識を元にして、テスト対象である入力補助機能(β版)に対するテストスコープの設定を検討しました。
chatGPTを使った機能であり、学習データとプロンプトの設定により箇条書きで書いた入力データであっても、保育士さんが書いた内容を想起させる文章を、プレビュー生成するようになっています。 入力補助機能(β版)を使用して実際のに生成した結果を載せてみます。
上の白背景部が入力データ、下の灰色背景部が生成した出力データです。
画像を見て頂くと分かるのですが、1のデータを入力したら10以上が出力されるような結果となっています。そのため、入力データに対する出力データの評価は困難になりそうだと当初は感じました。。。
そこで、スコープを次の様に設定し、実施してみようと検討しました。
- 大前提として、chatGPT自体の機能確認をするようなテストは実施しない
- メタモルフィックテスティング
- ニューロンカバレッジのテストアプローチは外す事とした
- メタモルフィックテスティング
- 運用想定が園内かつ帳票・おたよりであり、使用者も限定されている事から、テストアプローチを次の2種とした
- メタモルフィックテスティング
- 文章と、文章を箇条書きにしたものとで出力比較
- 文章中の文言を一部変更(ex.今日⇒機能)したものとで出力比較
- 最大安全半径
- タイプミスおよび誤字を挿入し、出力結果でどのように扱われるか
- メタモルフィックテスティング
- 網羅検証に関しては、テスト期間と機能確認優先度および機能の特性と運用想定の兼ね合いから今回は外した
テストを実施してみて
事前にスコープで想定・設定した内容がうまい事ハマり、要求された動作確認が実行できました。 第一歩の取り組みとしてはまずまずの結果が得られたと考えます。
まず、メタモルフィックテスティングの観点では、ベースの入力データに対する出力と、規則性のある変更を与えた場合の出力データの規則性を確認する事ができました。 また、入力データを文章と箇条書きに設定した際の出力データの関係性も、明らかな関係性の棄損は見られませんでした。
次に最大安全半径の観点ですが、タイプミス・誤字に関して面白い結果が得られました。 まずタイプミスに関しては、前後の文脈から判断して置換あるいは補完し、文章生成が実行されました。
誤字に関しては、試行数を増やして確認したいですが次の結果を得ました。
- 学習データに特徴が近い誤字は、修正されずそのまま使用された
- ex.登園を桃園に誤変換の場合、桃園のまま使用された
- 反面、学習データと特徴が離れている誤字については、読み替えて補完された
- ex.登園を東遠に誤変換の場合、登園を思わせる文章が生成された
深追いできていませんが、学習データの種類・プロンプトでの設定により
- 前後の文章から推論して補完・修正された
- 誤変換単語の入る場所によっては違った文章となる可能性有(深追いできていません。)
- 保育園に関連する単語が含まれている文字列は修正される傾向がある
といった事が起きたと推測します。(限られた試行の中で得られた結果を受けての、私なりの考えです。)
テストデータの例を記載してみます。
①文章と、文章を箇条書きにしたものとで比較 * 文章
○入力データ ---------------------- 今日はバスハイクに行きました。 科学館では色々な実験を見たり、お話しを聞いたりして楽しそうにしていました。 そのあと公園に行き、シートを敷いてクラスの皆でお弁当を食べました。 ---------------------
○出力データ --------------------- 今日は、クラスの子どもたちとバスハイクに行きました。 科学館では、色々な実験を見たり、お話しを聞いたりして、子どもたちはとても楽しそうでした。 その後は公園に行き、シートを敷いて皆でお弁当を食べました。 ---------------------
- 箇条書き
○入力データ --------------------- ・今日はバスハイクがあった ・科学館に行った ・色々な実験を見て楽しそうだった ・公園に行ってお弁当を食べた ---------------------
○出力データ --------------------- 今日は、クラスの子どもたちとバスハイクに行きました。 科学館では、色々な実験を見たり、お話しを聞いたりして、子どもたちはとても楽しそうでした。 その後は公園に行き、シートを敷いて皆でお弁当を食べました。 ---------------------
②タイプミスおよび誤字を挿入
○入力データ ---------------------- 明日は遠足に行きます。 8:30に出発予定のため遅れに東遠をお願いします。 当日の桃園打刻は園で一括でa行いますため不要となります。 登園しましたら、ホールまでお子さんをお連れください。 到着時刻は16:30頃となります。 お迎えの際は降園打刻を忘れずにお願い致します 当日は以下の持ち物をご準備頂き、お子さんに持たせてきてください。 ・リュック ・水筒 ・お弁当 レジャーシート 傘(おりたたm) レインコート ---------------------
○出力データ --------------------- 明日は、保育園の遠足があります。 出発予定は8:30ですので、遅れないようにお越しください。 当日の桃園打刻は、園で一括で行うため、保護者の方での打刻は不要です。 登園後は、ホールまでお子さんをお連れください。 帰りの到着予定時刻は、16:30頃となっています。 お迎えの際は、降園打刻を忘れずにお願いいたします。 当日は、以下の持ち物をご準備いただき、お子さんに持たせてきてください。 ・リュック ・水筒 ・お弁当 ・レジャーシート ・傘(折りたたみ) ・レインコート 以上、よろしくお願いいたします。 ---------------------
今後に向けて
AIソフトウェアテストの第一歩として、今後に生かせるデータの収集と傾向を何となく把握する事ができました。
反面、準備不足のため検討が十分でなく、個人的興味からも、もう少し深入りした確認をできるよう、学習と段取りを整えておくべきでした。 (第3者目線で見た時にも検討すべき所はあると考えます。)
テストにあたって参考とした資料も手元の書籍のみであるため、AIプロダクト品質保証ガイド(QA4AIコンソーシアム)や、機械学習品質マネジメントガイドライン(産総研)も参照して検討する必要有りと感じています。
AIソフトウェアを使用したシステムとの関わりは避けられないものと考えますため、今後も継続して学習を進めていきたいと思います
ユニファではプロダクトを一緒に創っていくQAエンジニアの方を募集しています! unifa-e.com