Azure AI-102試験受験体験記

# はじめに
Azureの[AI-102試験](https://learn.microsoft.com/ja-jp/credentials/certifications/exams/ai-102/)を受けたため、受験体験記と試験対策メモを残す。  
この試験に合格することによって、資格「**Azure AI Engineer Associate**」を取得することができる。  
試験の難易度は中級者向けで、スコア700以上で合格となる。  
初心者向けには[AI-900試験](https://learn.microsoft.com/ja-jp/credentials/certifications/exams/ai-900/)がある。

試験対策メモに関しては、私が調べた範囲のことを適当にメモしたものであるため、読み流してください。

# 私のスペック
* AIに関しては初学者～中級者レベル、G検定合格済
* Pythonは業務レベルで用いることができる
* C#の経験はほぼない
* Azureの利用に関しては初心者レベル
  * Azure OpenAI サービスに関してはかなり触っているが、その他のリソースはほぼ初見

# 勉強に用いたもの
* Microsoft Learn
  * 試験ページにこの資格向けの講座が掲載されているため、それらを全て受講した。
  * 演習も行い、実際にAzure上でリソースを作成した。
  * プログラミングの演習はPythonで行った。
* Udemyで購入した問題集
  * [Microsoft Certified: Azure AI Engineer Associate / AI-102](https://www.udemy.com/course/microsoft-certified-azure-ai-engineer-associate-ai-102/)を購入した。
  * 問題集は全て英語であったため、ブラウザの翻訳機能を用いながら解いた。
  * 画像が埋め込まれている場合もあるため、その時はスマホの翻訳アプリのカメラ機能を用いた。
  * 所々問題や解答に不備があった。
  * 2023/07にAzureのAIに関するリソースの名前が大幅に変更されているが、それには対応していない。
  * Azure OpenAIサービスにも対応していない。
* ChatGPT
  * 問題集を解いて分からないところは適宜質問した。
  * 本当は公式リファレンスを見るべきだろうが、時間がなかったためChatGPTを信じた。
* この記事の試験対策メモ
  * 問題集を解き終えたあとに公式ドキュメントを読んだが、読むだけでは頭に入らない気がしたのでアウトプットとした。

# 勉強のスケジュール
* 試験日の約1ヶ月半前からMicrosoft Learnを受講し始め、試験日の1週間前に完了した。
* 試験日の1週間前から問題集を解き始め、4つの模擬問題をひたすら解き直し続けた。
  * どの模擬問題も初回受験時の正答率は50%程度であった。

# 試験を受けてみて
* 試験はテストセンターで受験した。
  * 自宅受験の場合はカメラをONにしたり、デスク周りをかなり整理しなければならないようなので、テストセンターを選択した。
* 試験結果は876/900点で合格することができた。
* 試験問題は42問であった。
  * 初期に表示されている40弱程度の問題の回答を完了したあとに、最終問題が表示された。
    * 初期表示されている問題で試験終了かと思っていたため、追加の問題にあまり時間を割けなかった。
  * Azure OpenAI サービスに関する問題は出題されなかった。
* サービス名の変更は適応されていなかった。 (Azure AI Document IntelligenceがAzure Form Recognizerのままであったなど)
* AzureのAIに関するリソースについて問われる問題ばかりなので、AIの基礎的な知識があれば合格することができるように感じた。

# 試験対策メモ
引用文となっている箇所は全て[Microsoft Learn](https://learn.microsoft.com/ja-jp/)から引用しています。
## Azure AI Language サービス
>Azure AI Language は、テキストを理解し分析するための自然言語処理 (NLP) 機能を提供するクラウドベースのサービスです。 このサービスを使用すると、Web ベースの Language Studio、REST API、およびクライアント ライブラリを使用してインテリジェントなアプリケーションを構築できます。この言語サービスは、これまで利用できた Azure AI サービス (Text Analytics、QnA Maker、LUIS) を統合したものです。
* 使用するためにはエンドポイントと認証キーが必要。
### 言語検出
* リクエストに含まれるテキストの言語を検出する機能。
* 120の言語に対応している。
* リクエストのテキストは複数の言語を含めることができる。
* レスポンスでは0~1の確信度を返却する。
### キーフレーズ抽出
* リクエストに含まれるテキストの要点を特定する機能。
* キーフレーズは1つ以上返却される。
### 感情分析
* リクエストに含まれるテキストがポジティブかネガティブかを評価する機能。
* 結果はpositive, mix, negativeの3種類がある。
  * 肯定的 (否定的) な文章と中立的な文章だけが含まれる場合はpositive (negative) と判定される。
  * 肯定的な文章と否定的な文章が含まれる場合はmixと判定される。
### エンティティ抽出
* リクエストのテキストに含まれるエンティティを抽出する機能。
* エンティティはカテゴリのようなイメージ。
  * 例えば、「山田太郎」→「人物」、「東京」→「場所」など。
### LUIS (Language Understanding)
* 和訳すると「会話言語理解」
* 会話言語理解モデルをデプロイするにはAPIか、Language Studio (Webサービス) を用いる。
* ユーザーの発話 (utterances) から意図 (intents) を理解できるようなモデルを構築する。
* 意図を理解するためにはエンティティ (entities) を定義する。
  * エンティティとは意図に特定にコンテキストを追加するためのものである。
  * 例えば、「東京の天気はどうですか？」という発話には「天気を知る」という意図があり、エンティティとしては場所 (東京) がある。
* Azure AI Languageでは会話言語理解モデルの学習を行わずとも、Microsoftが用意した会話言語理解機能が使うことができる。
  * 種類が多すぎるため、[リンク](https://learn.microsoft.com/en-us/training/modules/publish-use-language-understand-app/2-understand-capabilities-of-language-service)参照
### 質問応答 (question answering)
* QnA Serviceと呼ばれるサービスの新バージョン
* ナレッジベースを作成し、そこからユーザーの質問に適した回答をする。
* ナレッジベースの作成にはLanguage Studio (Webサービス) を用いる。
  * データソースにはFAQページのURLや、構造化されたチャットが含まれるファイルなどがある。
* 解答の精度を上げる方法として「アクティブラーニング」と「同義語の定義」がある。
### テキスト分類
* 入力されたテキストを予め定義したクラスに分類できる機能。
* 単一ラベル分類と複数ラベル分類を行うことができる。

## Azure AI Translator サービス
>Translator サービスは、クラウドベースのニューラル機械翻訳サービスであり、どのオペレーティング システムでも使用できる Azure AI サービス ファミリに含まれます。 Translator は、世界中の何千もの企業によって使用されている Microsoft の製品やサービスを強化するもので、言語翻訳やその他の言語関連の操作を行うのに使用できます。
* 使用するためにはデプロイされた地域と認証キーが必要。
* 翻訳機能のオプションとして文章の長さを取得することができる。
* 不適切用語のフィルタリング機能があり、以下のオプションを指定できる。
  * NoAction：何もしない
  * Deleted：翻訳結果から削除
  * Marked:指定した文字で置き換える (デフォルトは「*」)
* 既存の翻訳能力に不満がある場合はカスタム翻訳を定義することができる。
  1. カスタム翻訳ツールにてワークスペースを作成
  2. プロジェクトを作成
  3. 学習データをアップロードして、モデルを学習
  4. モデルをテストして発行
  5. APIを使って呼び出し
* 通常の翻訳機能に加えて音訳機能がある。
  * 「こんにちは」をラテン文字で音訳すると「Kon'nichiwa」になる。

## Azure AI Speech サービス
>音声サービスでは、音声リソースを使用して、音声テキスト変換とテキスト読み上げの機能が提供されます。 音声を高い精度でテキストに文字起こしし、自然に聞こえるテキスト読み上げ音声を生成し、音声を翻訳し、会話中に話者認識を使用することができます。
* 使用するためにはデプロイされた地域と認証キーが必要。
### Speech To Text
* デフォルトの入力ソースはマイクだが、音声ファイルを用いることも可能。
### Text To Speech
* 出力音声ファイルの種類、サンプルレート、ビット深度を選択できる。
* 音声に標準音声とニューラル音声 (DNNを用いた自然な発声) が選択できる。
* SSML (音声合成マークアップ言語) を用いることによって、音声出力を制御可能。
  * 話すトーンの指定
  * 音素 (発音) の指定
  * 韻律の調整
  * 録音された音声や音楽を挿入
### 音声翻訳機能
* 機械学習をベースとした機能
* デフォルトの入力ソースはマイクだが、音声ファイルを用いることも可能。
* 翻訳したテキストは音声出力することもできる。
  * イベントベースの音声出力は、1つの言語から1つの言語への翻訳のみに対応している。
  * 多種類の言語への翻訳を音声出力したい場合は手動で音声合成する必要がある。

## Azure AI Bot サービス
>Azure AI Bot Serviceは、ボット開発用に構築された統合環境を提供します。
### Bot Framework SDK
* ボットを作成するためのSDK
* 複数の言語をサポートしている。
* アクティビティハンドラーを用いて様々なアクティビティに対してボットに処理を行わせることができる。
  * メッセージ受信、メンバーが会話に参加・退出、ボットが追加された (LINEの友達追加のイメージ?) などの様々なアクティビティに対応している。
### Bot Framework Composer
* GUIでボットを作成できるローコードツール。
* 利用するにはNodeと.NETの実行環境が必要。
* ダイアログという概念がある。
  * Webアプリにおけるページのようなものである。
  * 例えば、ピザの注文を受けるボットであれば、ピザの選択ダイアログや、注文を確定ダイアログがある。
* ユーザーエクスペリエンス向上のために、シンプルなテキストに加えて、[カード](https://learn.microsoft.com/ja-jp/azure/bot-service/bot-service-design-user-experience?view=azure-bot-service-4.0)を利用できる。
### Power Virtual Agents
* Microsoft Power Platformにあるサービス。
* ノーコードでボットを作成できる。
* PVAで作成したボットはAzure AI Botの一部の機能を使えない。
### Bot Framework Emulator
* 作成したボットをローカルまたはWebアプリとして実行して、動作をテストすることができる。

## Azure AI Vision サービス
>Azure AI Vision は、多くのデジタル資産管理 (DAM) シナリオに活用できます。 DAM は、リッチ メディア アセットの整理、保管、取得、およびデジタルの権利とアクセス許可の管理を行うビジネス プロセスです。 たとえば、会社では、表示されるロゴ、顔、オブジェクト、色などに基づいて、画像をグループ化し、識別することができます。 または、自動的に画像のキャプションを生成し、キーワードを添付して検索できるようにすることもできます。
* 使用するためにはエンドポイントと認証キーが必要。
### 画像分析
* 画像の説明、タグ、画像内の物体などの情報を取得することができる。
### 動画分析
* Azure Video IndexerというWebサービスを用いて行う。
* 以下の機能がある。
  * 顔認識
  * OCR
  * 音声の文字起こし
  * 話されているトピックの抽出
  * 感情分析
  * 動画のカテゴリ分析
  * 成人向け、暴力的なテーマの検出 (コンテンツモデレーション)
### Face サービス
* 顔に関する機能を提供している。
* 以下の機能がある。
  * 顔検出：検出された顔ごとにIDとバウンディングボックスを表示してくれる機能。
  * 顔分析：頭部の姿勢、メガネの有無、顔を隠す物体などの情報を取得できる機能。
  * 顔の位置取得：顔の特徴的なパーツ (目頭、目尻、瞳孔、鼻の先など) の座標を取得できる機能。
  * 顔の比較：複数の顔画像と比較し、似ている顔の検索と、同一人物かの判断を行える機能。
  * 顔認識：顔の画像を用いてモデルを学習し、顔の識別を行う機能。

## Azure AI Custom Vision サービス
>Azure AI Custom Vision は、独自の画像識別子モデルを構築、デプロイ、改良できるようにする画像認識サービスです。 画像識別子は、視覚特性に従って、画像にラベルを適用します。 各ラベルは、分類または物体を表します。 Azure AI Vision サービスとは異なり、Custom Vision ではユーザーが独自ラベルを指定し、それらを検出するためのカスタム モデルをトレーニングできます。
* 使用するためにはエンドポイントと認証キーが必要。
* モデルのトレーニング用のリソースと予測用のリソースが分かれている。
### 画像分類
* 画像へのラベル付け～モデルの発行までの一連の流れをAzure AI Custom Vision ポータルというWebサービスで行うことができる。
  * REST APIを用いても行うことができるが、通常ポータルを使うらしい。
### 物体検出
* 画像分類と同じく、Azure AI Custom Vision ポータルを使う。
* 少数の画像に手動でラベル付けをし、モデルをトレーニングすると、スマートラベル付けツールを使うことができる。
  * ラベル付けの際に、システムがラベルの種類・大きさを提案してくれる機能。
### OCR
* 2つのAPIが用意されている。
  * Read API：大量のテキストを読み込むことができ、手書きの文字も読み取ることができる。
  * Image Analysis API (プレビュー機能)：少量のテキストの読み取り向けであり、テキストの抽出だけでなく、画像の分類やサムネイルの作成などの様々な機能がある。

## Azure AI Document Intelligence サービス
>Azure AI Document Intelligence は、クラウドベースの Azure AI サービスで、インテリジェントなドキュメント処理ソリューションの構築を可能とします。 さまざまなデータ型にまたがる大量のデータが、フォームとドキュメントに格納されます。 Document Intelligence は、データの収集と処理の速度を効果的に管理することを可能とし、運用の改善、情報に基づくデータ主導の意思決定、知見に基づくイノベーションの鍵となります。
* 使用するためにはエンドポイントと認証キーが必要。
* 旧サービス名：Azure Form Recognizer
* ディープラーニングを用いた高度なOCR機能を持っている。
### ドキュメント分析モデル
* PEG、PNG、PDF、TIFF ファイルからテキストの位置・内容、表やチェックボックスなどを読み取り、ドキュメントの構造をJSONで返却する。
### 事前構築済みのモデル
* 予め構築されたモデルによって、特定のドキュメントのフォーマットからの情報抽出結果をJSONで返却する。
* 対応しているフォーマットは以下。
  * W-2フォーム (アメリカで用いられている源泉徴収票)
  * 請求書
  * レシート
  * 身分証明書
  * 名刺
### カスタムモデル
* ドキュメントのフォーマットをモデルに学習させることができる。

## Azure Cognitive Search サービス
>Azure Cognitive Search (旧称 Azure Search) は、Web、モバイル、エンタープライズ アプリケーションに、プライベートで異種のコンテンツに対するリッチな検索エクスペリエンスを組み込むためのインフラストラクチャ、API、およびツールを開発者に提供するクラウド検索サービスです。
* 使用するためにはエンドポイントと認証キーが必要。
### レプリカ
* サービスのインスタンスのことを指す。
* 読み取り専用ワークロード  (クエリの実行) の高可用性を実現するには2つ必要。
* 読み取り/書き込ワークロード (クエリの実行/インデックス作成)の高可用性を実現するには3つ必要。
### パーティション
* インデックスを複数のストレージに分割するために使用する。
* サービスの負荷が高くないのにも関わらず、クエリの実行速度が遅い場合はパーティションを増やすことで改善する場合がある。
### スキルセット
* データソースからインデックスを作成するときに、AIの機能を用いて様々な付加情報をインデックスに追加できる機能。
### インデクサー
* インデックスを作成するための機能。
* インデクサーは作成時に自動実行される。
* 定期的な実行や、手動実行も行うことができる。
* インデックスに新しいフィールドを追加するときや、スキルセットにスキルを追加するときなどはインデックスをリセットしてからインデクサーを実行しなければならない時がある。
### インデックス
* データソースから作成された検索可能なデータ。
* インデックスはフィールドで構成される。
* インデックスフィールドは以下の属性を持つことができる。
  * key：一意なキー
  * filterable：フィルタリングに用いるかを制御
  * searchable：検索に用いるかを制御
  * sortable：ソートに用いるかを制御
  * facetable：ファセット (既知のフィールド値の一覧に基づいて結果をフィルター処理するために使用されるユーザー インターフェイス要素) に用いるかを制御
  * retrievable：検索結果に含めるかを制御