Azure AI Fundamentals AI-900 受験前 振り返り

# この記事の内容
2022/2/12にMicrosoftのAzure AI Fundamentals AI-900を受験するので、復習用に学習した内容を簡単にまとめました。

# 学習の仕方
Microsoft Learn（Microsoftの無償のeラーニング）で学習しました。
https://docs.microsoft.com/ja-jp/learn/certifications/exams/ai-900

学習を一通り終えて、試験を申し込んでから気付いたのですが、Microsoftでは無料のトレーニングイベントがあり、これを受講すると一通りの学習ができる上に、試験を無料で受験できるそうです。
https://www.microsoft.com/ja-jp/events/top/training-days/

なので、これから勉強して受験する方は、まずトレーニングイベントに参加してから、eラーニングをやると良いと思います。

# 試験の出題範囲
これは、Microsoftのページなどに載っています。
https://mta.odyssey-com.co.jp/outline/AI-900.html

１．人工知能のワークロードと考慮事項についての説明
２．Azureでの機械学習の基本原則に関する説明
３．AzureでのComputer Visionワークロードの特徴に関する説明
４．Azureでの自然言語処理(NLP)ワークロードの特徴に関する説明
５．Azureでの会話型AIワークロードの特徴に関する説明

# 学習した内容のまとめ

## 1. 人工知能(AI)の概要
* AIとは、人間の行動と能力を模倣するソフトウェアを作ること。

### AIの要素とMicrosoft Azureの主なサービスの関係

| AIの要素 | Microsoft Azureの主なサービス |
| ---- | ---- |
| 機械学習(Machine Learning) | Azure Machine Learning |
| コンピュータービジョン(Computer Vision) <br> **→要するに画像処理系** | Computer Vision <br>Custom Vision <br> Face <br> Form Recognizer|  
| 自然言語処理(Natural Language Processing) | 言語サービスのText Analytics機能 <br>Speech <br> Translator Text <br> 言語サービスのLanguage Understanding(LUIS)機能|
| 対話型AI(Conversational AI) | 言語サービスのQnA Maker機能 <br> Azure Bot Service|
| 異常検出(Anomaly detection) | Anomaly Detector |

### AIの課題とリスク
  1. 偏りが結果に影響する可能性がある（性別による差別が生じるなど）
  2. エラーによって損害が発生する可能性がある
  3. データが流出する可能性がある
  4. ソリューションがすべてのユーザーに対して有効ではない可能性がある
  5. ユーザーが複雑なシステムを信頼する必要がある
  6. 誰がAI主導の意思決定の責任を負うのか（顔認証による証拠で、無実の人が有罪になった場合の責任は？）

### 責任あるAIの基本原則（6つ）

| 原則 | 説明 |
| --- | --- |
|公平性（Fairness）|AIシステムはすべての人を公平に扱う必要があります|
|信頼性と安全性（Reliability and safety）|AIシステムは確実かつ安全に実行される必要があります。|
|プライバシーとセキュリティ（Privacy and security）|AI システムは安全であり、プライバシーを尊重する必要があります。|
|包括性（Inclusiveness）|AI システムはあらゆる人に力を与え、人々を結びつける必要があります。<br> AI は、身体能力、性別、性的指向、民族性などの要因に関係なく、社会のすべての部分に利益をもたらす必要があります。|
|透明性（Transparency）|AI システムは理解しやすい必要があります。 ユーザーは、システムの目的、しくみ、想定される制限事項を十分に認識する必要があります。|
|アカウンタビリティ（Accountability）|人々は AI システムに対して説明責任があります。<br> AIベースのソリューションの設計者と開発者は、ソリューションが明確に定義された倫理的および法的基準を満たすことを保証するガバナンスと組織の原則の枠組みの中で作業する必要があります。|

## 2. 機械学習
* 機械学習には、Azure Machine Learningサービスを使う。

| サービス | 主にできること | 補足 |
| --- | --- | --- |
| Azure Machine Learning | 1. 自動機械学習 <br> 2. 回帰モデル作成 <br> 3. 分類モデル作成 <br> 4. クラスタリングモデル作成 | Azure Machine Learningは機械学習モデルのトレーニングと管理に使用できるクラウドサービス。データの準備、モデルのトレーニング、予測サービスのデプロイなどを行える。|

### 2-1. Azure Machine Learningの自動機械学習を使う
* Azure Machine Learningの自動機械学習を使用すると、前処理とモデルのトレーニングが自動的に行われ、教師あり機械学習モデルを得られる。
* 自動機械学習で得られるモデル
    * 回帰：数値の予測
    * 分類：カテゴリまたはクラスの予測
    * 時系列予測：時系列要素による回帰

### 2-2. Azure Machine Learningデザイナーを使って回帰モデルを作成する
* 回帰は、数値を予測するために使用される、教師あり機械学習手法。
* Azure Machine Learningデザイナーを使用して回帰モデルを作成できる。作成の流れは以下の通り。
  1. Azure Machine Learningワークスペースの作成
  2. コンピューティングリソースの作成
  3. データを調査し、データ変換のモジュールを追加 <br> ・Select Columns in Dataset（データセット内の列の選択）<br> ・Clean Missing Data（欠損データのクリーニング） <br> ・Normalize Data (データの正規化)：各列の値が同様のスケールになるように数値データを変換
  4. トレーニングパイプラインを作成して実行する <br> ・Split Data（データの分割）<br> ・Train model（モデルのトレーニング）<br> ・Score Model（モデルのスコア付け）
  5. 回帰モデルを評価する <br> ・Evaluate Model（モデル評価）
  6. 推論パイプラインを作成する
  7. 予測サービスをデプロイする

* 回帰モデルで使用される評価指標

| 評価指標 | 英語(略称) | 英語 | 意味 |
| --- | --- | --- | --- |
| 平均絶対誤差 | MAE | Mean Absolute Error | 予測値と真の値の差の平均。この値が小さいほど、モデルの予測が正確。|
| 二乗平均平方根誤差 | RMSE | Root Mean Squared Error | 予測と真の値の平均二乗の平方根の差。 MAE (上記) と比較すると、差が大きいほど個々の誤差の分散が大きくなることを示す(たとえば、一部の誤差が非常に小さく、他の誤差が大きい場合など)。|
| 相対二乗誤差 | RSE | Relative Squared Error | 予測と真の値の差の2乗に基づく、0から1の間の相対的な指標。0に近いほど、モデルのパフォーマンスが高くなる。|
| 相対絶対誤差 | RAE | Relative Abusolute Error | 予測と真の値の絶対差に基づく、0から1の間の相対的な指標。0に近いほど、モデルのパフォーマンスが高くなる。|
| 決定係数 | R2 | Coefficient of Determination | 作ったモデルの予測値が真の値（正解ラベル）と比べてにどのぐらい当てはまるのかの割合。この値が1 に近いほど、モデルのパフォーマンスが高くなる。|
※R2の意味が良く分からなかったので、以下のサイトも参考にしてまとめました。
https://aizine.ai/r2-score0411/

### 2-3. Azure Machine Learningデザイナーを使って分類モデルを作成する
* 分類は、カテゴリまたはクラスを予測するために使用される、教師あり機械学習手法。
* Azure Machine Learningデザイナーを使用して分類モデルを作成できる。作成の流れは以下の通り。
  1. Azure Machine Learning ワークスペースの作成
  2. コンピューティングリソースの作成
  3. データを調査し、データ変換のモジュールを追加 <br>・Normalize Data (データの正規化)
  4. トレーニングパイプラインを作成して実行する <br> ・Split Data（データの分割）<br>・Two-Class Logistic Regression（２クラス　ロジスティック回帰）<br>・Train model（モデルのトレーニング）<br>・Score Model（モデルのスコア付け）
  5. 分類モデルを評価する<br>・Evaluate Model（モデル評価）
  6. 推論パイプラインを作成する
  7. 予測サービスをデプロイする

* 分類モデルで使用される評価指標

| 評価指標 | 英語 | 意味 |
| --- | --- | --- |
| 正解率 | Accuracy | 予測の合計数に対する正しい予測 (真陽性 + 真陰性) の比率。|
| 適合率 | Precision | 正しく識別された陽性のケースの割合 (真陽性の数を真陽性と擬陽性の合計数で割った値)。|
| 再現率 | Recall | 陽性として分類され、実際に陽性だったケースの割合 (真陽性の数を真陽性と擬陰性の合計数で割った値)。感度、True Positive Rate, TPRとも呼ばれる。|
| F1値 | F1 Score | 適合率と再現率を組み合わせた値。（適合率と再現率の調和平均）
| AUC | Area Under the Curve | ROC曲線の下側の面積の大きさで分類予測を評価する指標。面積は0から1の範囲で変動し、AUCが大きいほど優れた予測だと言える |
※ROC曲線は、横軸に偽陽性率（false positive rate,FPR)を、縦軸に再現率（または真陽性率）（Recall, true positive rate, TPR)をとる曲線。
※以下のサイトも参考にしました。
https://www.codexa.net/ml-evaluation-cls/
https://tech.ledge.co.jp/entry/metrics

### 2-4. Azure Machine Learningデザイナーを使ってクラスタリングモデルを作成する
* クラスタリングは、特徴に基づいて類似したエンティティをグループ化するために使用される教師なし機械学習手法。
* ※クラスタリングとクラス分類とは異なる。
    * クラスタリング（clustering）：教師なし学習。データの中で集まりを見つける手法。特徴だけに基づいてクラスターに分類するよう、モデルをトレーニングする
    * クラス分類（classification）：教師あり学習。事前に決まっている分類を新たに入力されたデータに正確に付与する手法<br>
* Azure Machine Learningデザイナーを使ってクラスタリングモデルを作成できる。作成の流れは以下の通り。
  1. Azure machine Learningワークスペースの作成
  2. コンピューティングリソースの作成
  3. データを調査し、データ変換のモジュールを追加<br>・Select Columns in Dataset（データセット内の列の選択）<br>・Clean Missing Data（欠損データのクリーニング）<br>・Normalize Data (データの正規化)：各列の値が同様のスケールになるように数値データを変換
  4. トレーニングパイプラインを作成して実行する<br>・Split Data（データの分割）<br>・K-Means Clustering（K-Means クラスタリング）：指定した数のクラスターにグループ化される。例：3つにグループ分けする場合は、重心の数（Number of centroids）に3に設定する。<br>　※ K-Meansアルゴリズムは、データを最も近い重心に割り当てる。<br>・Train Clustering model（クラスタリングモデルのトレーニング）<br>・Assign Data to Clusters（クラスターへのデータの割り当て）
  5. クラスタリングモデルを評価する<br>・Evaluate Model（モデル評価）
  6. 推論パイプランを作成する。
  7. 予測サービスをデプロイする

* クラスタリングモデルで使用される評価指標

| 評価指標 | 日本語 | 意味 |
| --- | --- | --- |
| Average Distance to Other Center | 他の中心への平均距離 | クラスター内の各ポイントが他のすべてのクラスターの重心に (平均で) どれだけ近いかを示す。|
| Average Distance to Cluster Center | クラスターの中心への平均距離 | クラスター内の各ポイントがそのクラスターの重心に (平均で) どれだけ近いかを示す。|
| Number of Points | ポイント数 | クラスターに割り当てられたポイントの数。
| Maximal Distance to Cluster Center | クラスターの中心までの最大距離 | 各ポイントとそのポイントのクラスターの重心の間の最大距離。この値が大きい場合は、クラスターが広範囲に分散している可能性がある。|
※Average Distance to Cluster CenterとMaximal Distance to Cluster Centerの組み合わせは、クラスターの"分散"を判断するのに役立つ。

## 3. コンピュータービジョン（画像処理）
Computer Visionなどの画像処理系サービスをまとめました。

| サービス | 主にできること | 補足 |
| --- | --- | --- |
| Computer Vsion  | <br> 1.画像分析<br>2.テキストの読み取り | Computer Visionができること詳細：<br>　・画像の説明<br>　・視覚的な特徴のタグ付け<br>　・オブジェクトの検出<br>　・ブランドの検出<br>　・顔の検出 ※Computer Visionサービスの顔分析機能は、Faceサービスで提供される機能の一部。<br>　・画像の分類 ※86のカテゴリに分類できる<br>　・ドメイン固有のコンテンツの検出（有名人やランドマークの識別）<br>　・光学式文字認識（OCR）<br>　・画像の種類の検出<br>　・画像の配色の検出<br>　・サムネイルの作成<br>　・内容の抑制 ※アダルトコンテンツや暴力的な画像を検出<br><br>Computer Visionは、テキストの読み取りタスク用に２つのAPIを提供している<br>　1.OCR API：同期動作する。 <br>　2.読み取りAPI（Read API）：非同期で動作。大量のテキストの読み取りに向いている|
| Custom Vision | 1.画像分類<br>2.物体検出 |物体検出モデルでは次の情報が返される<br>　1.画像内で識別された各物体のクラスラベル<br>　2.物体分類の確率<br>　3.各物体の境界ボックスの座標<br><br>予測したモデルを使用するために開発者に渡す情報<br>　1.プロジェクトID<br>　2.モデル名<br>　3.予測エンドポイント：予測リソースのエンドポイントのHTTPアドレス<br>　4.予測キー：予測リソースの認証キー
| Face | 1.顔検出 <br> 2.顔認証 <br> 3.類似した顔の検出 <br> 4.類似性に基づいた顔のグループ化 <br> 5.人の識別 | Faceで返される属性：<br>　・画像内で検出された人間の顔の四角形の座標（顔の周りの四角形の境界ボックスを示す座標セット）<br>　・年齢<br>　・ぼかし（どの程度ぼやけているか）<br>　・感情<br>　・露出<br>　・顔髭があるかどうか<br>　・眼鏡をかけているかどうか<br>　・髪の種類と髪の色<br>　・頭部姿勢（顔の向き）<br>　・化粧されているかどうか<br>　・ノイズ<br>　・妨害（ブロックしているオブジェクトがあるかどうか）<br>　・笑顔（笑っているかどうか）<br><br>Faceを使用して個人の名前を特定するには、まず、名前付きの各個人の複数の画像を使ってグループを作成し、顔認識モデルをトレーニングする。|
| Form Recognizer | OCR | Frome Recognizerには、いくつかのモデルがある。 <br>　1.事前作成済のモデル：領収書モデル、名刺モデルなど<br>　2.カスタムモデル：独自のデータを使用してトレーニングを行い、モデルを作成 |

## 4. 自然言語処理
自然言語処理系のサービスをまとめました。
**言語サービス (Azure Cognitive Services for Language)はText Analytics、QnA Maker、Language Understanding (LUIS) の 3 つの個別の言語サービスが統合されています。**
https://docs.microsoft.com/ja-jp/azure/cognitive-services/language-service/overview

| サービス | 主にできること | 補足 |
| --- | --- | --- |
| 言語サービス (Azure Cognitive Services for Language) | **Text Analytics系**<br> 1. 言語検出 <br> 2. 感情分析 <br> 3. キーフレーズ抽出 <br> 4. エンティティ認識 <br><br> **Language Understanding(LUIS)系** <br>5. 会話言語理解のアプリ作成 <br><br> **QnA Maker系** <br> 6. カスタム質問応答 | 1. 言語検出（Detecting Language)：<br> 　テキストの言語（英語、スペイン語など）を検出できる。言語を判断できない場合（言語が曖昧な場合）はNaNが返される。<br><br> 2. 感情分析（Analyzing Sentiment）：<br> 　テキストを評価し、0から1の範囲のセンチメントスコアを返す。1に近いほど肯定的、0に近いほど否定的。0.5は中立。<br><br> 3. キーフレーズ抽出（Finding Key Phrases）：<br> 　ドキュメントの主な要点としてキーフレーズを抽出する。 <br><br> 4. エンティティ認識（固有表現認識、Identifying known entities）：<br> 　テキスト内で認識されるエンティティの種類、サブタイプ、ウィキペディアのURLが返される。エンティティには、人物、場所、組織、日付、時刻、数量、URL、電子メール、IPアドレスなどがある。<br><br>  5. 会話言語理解のアプリ作成：<br> 　例えば、「ライトをつけて」など、照明やファンのオン・オフの命令を理解するアプリを作成できる。作成するには、まず、意図・発話・エンティティを定義し、次に、モデルをトレーニングする。<br><br>  6. カスタム質問応答：<br> 　QnA Makerの新バージョン。対話型AI（ボット）を作るときにこの機能を使い、質問応答のナレッジベースを作成する。|
| 音声サービス (Speech Service)|1. 音声テキスト変換 (Speech to Text API)<br> 2. テキスト読み上げ (Text to Speech API) <br> 3. 音声翻訳| 1. 音声テキスト変換 (Speech to Text API)：<br> 　リアルタイムまたはバッチで音声をテキストに文字起こしすることができる。<br><br> 2. テキスト読み上げ (Text to Speech API)：<br> 　テキストの入力を音声に変換。スピーカーに直接再生するか、オーディオファイルに書き込むことができる。<br><br> 3. 音声翻訳：<br> 　音声を別の言語のテキストまたは音声に翻訳。60以上の言語に翻訳することができる。|
| Translator Text | テキスト翻訳 | ・テキスト翻訳：<br> 　テキストを別の言語のテキストに翻訳。60以上の言語間のテキスト翻訳をサポート。翻訳先の言語は複数指定可能。 |

## 5. 対話型AI
ユーザの質問に回答するボット（対話型AI）を作成したいときは、Mirosoft Azureの以下の２つのサービスを組み合わせて使うと簡単に作成できます。

| サービス | 補足 |
| --- | --- |
| 言語サービス(Azure Cognitive Services for Language) | 質問と回答のナレッジベースを作成するカスタム質問応答機能が含まれる。QnA Makerの新バージョン。|
| Azure Bot Service | Azure でボットを開発、公開、管理するためのフレームワーク。 |

* 作成の流れは以下の通り。
  1. 質問応答のナレッジベースを作成<br>・言語サービスリソースを追加 <br> ・Language StudioポータルでWordなどのFAQドキュメントをインポートし、ナレッジベースを作成
  2. Azure Bot serviceアプリとして公開<br>・自動ボット作成機能を使用して、ナレッジベースのボットを作成

* なお、Bot Serviceは音声入力をサポートしていない。音声入力に対応する場合は、音声サービス(Speech)の音声テキスト変換を使用する。
https://docs.microsoft.com/ja-jp/azure/cognitive-services/speech-service/tutorial-voice-enable-your-bot-speech-sdk

## 6. 意思決定支援（異常検出）
* 異常検出には、Anomaly Detectorを使います。

| サービス | 補足　|
| --- | --- |
| Anomaly Detector | 過去の時系列データやリアルタイムデータの異常を検出するクラウドベースのサービス |

* インプットするデータはJSON形式
    * 時系列データ、リアルタイムデータのどちらもJSON形式
    * リアルタイムデータは、要求ごとに1つの値を送信する。現在の値と前の値を比較して、異常であるかどうかを判断する。
    * JSONデータの中で、細分性（granularity）を指定する。例えば、時間単位、日単位、週単位などを指定する。
* データに欠損がある場合は、線形補間法を使用して欠損値を補充することもできる。
* 季節データ（seasonal data)とは、一定の間隔で発生するデータ。<br>例）時間単位、日単位、月単位

## 7. ナレッジマイニング（検索ソリューション）
* 検索ソリューションの作成には、Cognitive Searchを使います。

| サービス | 補足　|
| --- | --- |
| Cognitive Search | ドキュメントの検索用のインデックスを作成するツールが提供されており、これを使うことで、検索ソリューションを提供できる。|

* サポートされているデータソース
  * Azure SQL Database
  * Azure VM上のSQL Server
  * Cosmos DB：Azureが提供するNoSQL データベース サービス
  * Azure Blob Storage
  * Azure Table Strage

* インデックス
  * インデックスとは、検索可能なドキュメントのこと。JSON形式。
  * インデックスのスキーマ部（データ構造の定義部分）では、フィールド名やデータ型を定義する。
  * また、フィールドごとに、フィールド名、データ型、サポートされる動作（検索可能か、ソート可能かなど）などの属性を定義する。

* インデックスを作成するプロセス
  1. Azureリソースを作成する <br> ・Azure Cognitive Searchリソース：インデックスの作成、クエリ実行を行う <br> ・Cognitive Servicesリソース：AIスキルの実行リソース <br> ・ストレージアカウント：抽出結果の保存用
  2. データソースを準備する <br> ・ストレージにコンテナーを追加し、ドキュメントをアップロード
  3. ドキュメントのインデックスを作成する <br> ・Azure Cognitive Searchで、データのインポートウィザードを起動 <br> ・データソースを指定 <br> ・AIスキルによってエンリッチされたデータをナレッジストアに保存する設定 <br> ・インデクサーの作成 <br> →インデクサーがフィールドを抽出し、インデックスに書き込み。AIの出力結果はナレッジストアに格納される

# 追記
無事合格しました。1000点満点中910点でした。（合格ラインは700点）