📝

AIの画像認識&自然言語処理を活用して、テスト問題に挑戦【個人開発】

2024/10/30に公開

こんにちは、Tsujiです。

本記事では、AIに興味のある皆様に向けて、Googleの最新AIモデルであるGemini APIを活用した画像認識AIスマホアプリ「教えてAI先生」を開発したので、その実力を検証した結果を報告します。AI初心者の方にも分かりやすく解説していきますので、ぜひ最後までお付き合いください。

1. AI家庭教師「教えてAI先生」のご紹介

「教えてAI先生」は、Gemini APIの画像認識能力を活用した学習支援アプリです。スマートフォンのカメラで問題を撮影するだけで、AIが問題を認識し、解答と解説を提供してくれます。まるで家庭教師のように、いつでもどこでも学習をサポートしてくれる頼もしい存在です。

主な機能:

  • 手書き文字認識: ノートに書いた問題も認識可能。
  • 多様な問題形式対応: 選択式、記述式など様々な問題に対応。
  • 詳細な解説: 解答だけでなく、問題の解き方も丁寧に解説。

こんな人にオススメ!

  • 効率的に自習を進めたい学生
  • 資格取得を考えている社会人
  • 隙間時間を有効活用して学習したい方

実際に作成したアプリのダウンロードはこちらから🔽

Android版⬇️
https://play.google.com/store/apps/details?id=com.cocorotech.ai_teacher
iOS版⬇️
https://apps.apple.com/jp/app/写真を撮影し-先生に教えてもらおう-教えてai先生/id6737162064

2. Gemini APIによる画像認識と自然言語処理の実装

「教えてAI先生」では、Gemini APIの高度な画像認識と自然言語処理能力を活用し、画像から問題文を抽出し、解答と解説、そして問題の種類を一度のAPIコールで生成しています。

具体的には、以下の手順で問題を処理します。

  1. 画像のアップロード: ユーザーがスマートフォンで撮影した問題画像をアプリにアップロード。
  2. Gemini APIによる処理: アップロードされた画像をGemini APIに送信。 この段階で、問題文の抽出、解説の生成、解答の生成、問題の種類の特定を同時に行います。
  3. 結果の表示: APIから返された解答と解説、問題の種類をアプリ上に表示。

以下に、主要なコード部分を抜粋して解説します。

@https_fn.on_call()
def on_call_solve(req: https_fn.CallableRequest) -> dict:
    image_url = req.data.get("imageUrl")
    prompt = f"""あなたは非常に優秀な先生です。画像から、問題文、解説、解答、問題の種類をそれぞれ導出してください。解説は理解しやすい回答としてください。(中略)
    問題文: question
    解説: explanation
    解答: answer
    問題の種類: type

    (以下、例)
    """
    # ... (前処理)

    model = GenerativeModel("gemini-1.5-pro")
    response = model.generate_content([image_file, prompt]) # 画像とプロンプトを同時に送信

    # ... (後処理)

    return result_dict

gemini-1.5-proモデルのマルチモーダル機能により、画像とプロンプトを同時に渡すことで、一度のAPIコールで全ての処理が完結するようになりました。

3. 解説先行型プロンプトによる解答精度向上

「教えてAI先生」では、解答精度向上のため、解説先行型プロンプトを採用しています。これは、LLMに問題の解説を先に生成させ、その後に解答を生成させるという手法です。

# 問題解答・解説生成部分のコード 
prompt = f"""あなたは非常に優秀な先生です。画像から、問題文、解説、解答、問題の種類をそれぞれ導出してください。解説は理解しやすい回答としてください。(中略)
    問題文: question
    解説: explanation  ← 解説を先に要求
    解答: answer      ← その後に解答を要求
    問題の種類: type

    (以下、例)
    """

プロンプト内で、"解説: explanation" が "解答: answer" より前に記述されていることに注目してください。これが逆になると、解答が間違っていることが多々ありました。
なぜ解説を先に生成させることで精度が向上するのか?
完全に仮説ですが、LLMは、大量のテキストデータから学習した統計的なパターンに基づいてテキストを生成します。解説を先に生成させることで、LLMは問題の背後にあるロジックや解法を理解し、そのコンテキストを保持したまま解答を生成することができるのではないかと予想しています。
これは人間の思考プロセスにも似ています。問題を解く際に、まず解法を考え(解説)、そしてその解法に基づいて答え(解答)を導き出します。解説を先に生成させることで、LLMも人間のように論理的に思考し、より正確な解答を導き出すことができるのではないかと感じています。

4. テスト問題チャレンジ!AI先生の実力は?

実際に「教えてAI先生」を用いて、様々なテスト問題を解かせてみました。検証には、大学入試センター試験の数学・英語、そしてFP資格試験の問題を使用しました。

検証結果:

問題の種類 正答率 具体的な問題内容 結果と考察
センター数学 (三角関数) 7/8 三角関数の値を求める問題など √を含む解答がありましたが(これは正解とした)、複雑な計算式も正しく生成していました。しかし、計算ミスが散見され、最終的な解答が誤りとなるケースがありました。
センター英語 (発音) 0/3 下線部と同じ発音の単語を選ぶ問題 下線部を正しく認識できず、全問不正解でした。画像認識の精度もしくは下線のテキスト出力が課題となっています。
FP (不動産) 5/7 不動産に関する選択問題 一部の解答にハルシネーション(事実と異なる内容の生成)が見られました。

考察:

数学の問題では、解答に至るロジックは正しく理解しているものの、計算ミスによって最終的な解答が誤りとなるケースがありました。これは、LLMが数式処理においてまだ完璧ではないことを示唆しています。今後の課題として、計算精度の向上が挙げられます。

英語の発音問題では、下線部を読み取ることができず、全問不正解でした。これは、画像認識の段階で下線部が正しく認識されていない、もしくはアプリの問題で下線のあるテキストを出力できないことが課題と考えられます。

FPの問題では、ハルシネーションが発生するケースがありました。これは、LLMが学習データに含まれていない専門知識を問われた際に、事実と異なる情報を生成してしまうことがあるためです。専門知識の学習や、事実確認の強化が今後の課題となります。

数学

英語

FP

5. 結論:AI家庭教師の未来と可能性

今回の検証を通して、「教えてAI先生」は、学習支援ツールとして大きな可能性を秘めていることが分かりましたが、画像認識と自然言語処理の組み合わせはまだまだかなと思いました。
今後、更なる精度向上を行うことで、より効果的な学習支援ツールへと進化していくことが期待されます。

市場の需要と今後の展開

AIを活用した学習支援アプリ市場は、今後大きな成長が見込まれています。特に、パーソナライズ化された学習体験や、いつでもどこでも学習できる利便性への需要が高まっており、「教えてAI先生」のようなアプリの需要も拡大していくと個人的には考えています。

今後、ユーザーフィードバックを収集し、機能改善や新機能開発に役立てながら、より多くの学習者のニーズに応えるアプリへと成長させたいとは思っています(個人開発はなかなか当たらない、、、)。
アプリのダウンロード数やそれに伴う収益性についてもいずれ記事にしたいと思います。

Discussion