NINA HOUSE

技術ブログ作ってみる

【AI-900】Azureの自然言語処理サービスについて(Text Analytics編)

Text Analytics サービスを使用してテキストを分析

docs.microsoft.com

テキスト分析ってこんなことしてる↓

  • テキストで使用されている用語の統計分析。 たとえば、一般的な "ストップワード" ("the" や "a" など。テキストに関するセマンティック情報がほとんどない単語) を削除し、残りの単語の "頻度分析" (各単語の出現回数をカウントする) を実行すると、テキストの主要なテーマに関するヒントを得ることができます。

  • 頻度分析を複数用語のフレーズに拡張します。これらのフレーズは、一般的に "N グラム" (2 単語のフレーズは "バイグラム"、3 単語のフレーズは "トライグラム" など) と呼ばれます。

  • "stemming" または "lemmatization" アルゴリズムを適用して、カウントする前に単語を正規化します。たとえば、"power"、"powered"、"powerful" のような単語は同じ単語として解釈されます。

  • 言語構造規則を適用して文を分析します。たとえば、文を "名詞句" などのツリー状の構造に分割します。これ自体には、"名詞"、"動詞"、"形容詞" などが含まれます。

  • 単語や用語を、機械学習モデルのトレーニングに使用できる数値の特徴量としてエンコードします。 たとえば、含まれている用語に基づいてテキスト ドキュメントを分類します。 多くの場合、この手法は、"感情分析" を実行するために使用され、ドキュメントは肯定的または否定的として分類されます。

  • 単語を n 次元空間内の場所に割り当てて、単語間のセマンティック関係をキャプチャする "ベクトル化" モデルを作成します。 たとえば、このモデリング手法では、"花" と "植物" という単語に値を割り当てて、それらを相互に近接するように配置し、"スケートボード" には、はるかに離れた位置にある値を与えます。

https://docs.microsoft.com/ja-jp/learn/modules/analyze-text-with-text-analytics-service/1-introduction

めちゃくちゃ複雑。これらをできるようにしたサービスがText Analytics

ドキュメントまたはテキストの言語 (フランス語や英語など) を決定

例えば英語とスペイン語が混在するような文章でもどっちが主要言語であるか判定してくれる。

【判定の仕方】
f:id:nina-b:20210508201833j:plain

テキストに対して感情分析を実行して肯定的または否定的な感情を決定

事前に構築された機械学習分類モデルを使用して、テキストを評価し、0 から 1 の範囲のセンチメント スコアを返す。1 に近い値ほど肯定的な感情。 範囲の中間 (0.5) に近いスコアは、中立または不確定とみなされる。

テキストから、主な要点を示す可能性のあるキー フレーズを抽出

こんなレビューがあったとしたら↓

"誕生日のお祝いに、ここで夕食をいただきましたが、すばらしい経験でした。私たちは親切な接客係の女性に出迎えられ、予約した席にすぐに案内されました。くつろげる雰囲気で、料理も非常においしく、サービスは最高でした。すばらしい料理と気配りの行き届いたサービスが好きなら、ぜひこの場所を訪ねるべきです。"

  • 気配りの行き届いたサービス
  • すばらしい料理
  • 誕生日のお祝い
  • すばらしい経験
  • 親切な接客係の女性
  • 夕食
  • 雰囲気
  • 場所

こんな感じで抽出。感情分析に応用。

テキスト内のエンティティを識別して分類する。 エンティティとしては、人物、場所、組織、または日常的な項目 (日付、時刻、数量など) がある

例↓
f:id:nina-b:20210508202710j:plain

Text Analytics サービス用の Azure リソース

Text AnalyticsかCognative Services。
他のサービスとの課金の仕方でどっちを選択するか考えましょう。(他のCognative Servicesと一緒にする場合はCognative Services)

【AI-900】Azureの光学式文字認識(OCR)

AzureのOCRサービス

docs.microsoft.com

必要なリソース

Computer VisionCognitive Servicesのどちらか。
こちらもこれまでと同様キーとエンドポイントが必要。

Computer Visionでやってみる

2つのAPIがある。画像内にテキストがどれだけ含まれているかで使い分ける。

  • OCR API - 画像内の少量のテキストを素早く抽出

    • テキストを含む画像内の領域
    • 各領域のテキストの行
    • 各テキスト行の単語
      OCR API はこれらの各要素について、領域、行、または単語が表示される画像内の位置を示す四角形を定義する "境界ボックス" 座標も返す。
  • 読み取りAPI - 大量のテキストを含むスキャンされたドキュメントに適している(手書き文字もいける)

読み取りAPIは処理が多いので、コンテンツを読み取ってアプリケーションに結果を返す間、アプリケーションをブロックしないように非同期的に動作。よって、読み取りAPI を使用するには、アプリケーションで次の 3 ステップの処理を行う必要があるす。

  1. API に画像を送信し、応答として操作IDを取得

  2. 操作 ID を使用して画像解析操作の状態を確認し、完了するまで待機

  3. 結果を取得

ページ、行、単語、座標を取得できる。

フォームに特化したOCRサービスもあるよ

Form Recognizer

docs.microsoft.com

Form Recognizerとは

フォームの内容まで解釈してくれるスグレモノ。

例)フィールド名と値の照合
データのテーブルの処理
日付、電話番号、住所、合計などの特定の種類のフィールドの識別など

2つのモデルがある。

  • 事前作成済みの領収書モデル - 売上票からデータを認識して抽出するようにトレーニングされてる

  • カスタムモデル - キーと値のペアと、テーブル データをフォームから抽出できる

使用するにはForm RecognizerのAzureリソースが必要。

事前作成済みの領収書モデルでは

カスタムモデルのドキュメントはこちら↓

docs.microsoft.com

【何が抽出できるか】
* 取引時間
* 取引日
* 販売者情報
* 支払い税額
* 領収書合計
* 領収書に記載されている可能性があるその他の関連情報
* 領収書のすべての文字が同様に認識されて返される

【ファイルの要件はこちら】

  • 画像を JPEGPNGBMP、PDF、または TIFF 形式にする
  • ファイル サイズを 50 MB 未満にする
  • 画像のサイズを 50 x 50 から 10000 x 10000 ピクセルにする
  • PDF ドキュメントの場合、17 インチ x 17 インチ以下

【AI-900】Faceの顔分析(Azure)

AzureのFace APIチュートリアル

みんな大好き「Face」でできること。

docs.microsoft.com

3 つのできること

  • 顔検出 - 人間の顔を含む画像の領域の識別。顔周りに長方形を形づくるやつ。

  • 顔分析 - 単純な顔検出を超えて、顔の目印 (鼻、目、眉毛、唇など) などの他の情報を返すこともできる。表情がわかったり。

  • 顔認識 - 顔の特徴から既知の個人を識別するために機械学習モデルを訓練し、トレーニングされていない新しい画像でそれらの人物を検出できるようにする。

例えばこんなことができる。

  • セキュリティ - 顔認識は、セキュリティ アプリケーションを構築するために使用することができ、それはデバイスのロックを解除するためのスマートフォンのオペレーティング システムで使用されることが増えています。

  • ソーシャル メディア - 顔認識を使用して、写真の既知の友人に自動的にタグづけ

  • インテリジェントな監視 - 自動車にはドライバーが道路を見ているか、モバイル デバイスを見ているか、疲れの兆候を示しているかを判断するため、ドライバーの顔を監視するシステムが組み込まれていたり

  • 広告 - 画像内の顔を分析し、人口統計上適切なオーディエンスを広告のターゲットを解析

  • 行方不明者 - 公共カメラ システムと顔認識を使用して、行方不明者が画像フレーム内にいるかどうかを識別することができる

  • ID 検証 - イミグレで使用

Azureの顔分析サービス

  • Computer Vision:顔検出と、一部の基本的な顔分析 (年齢の特定など)

  • Video Indexer:ビデオ内の顔を検出して特定するために使用

  • Face:顔を検出、認識、および分析できる事前構築済みのアルゴリズムがある

「Face」の特徴

  • 顔検出

  • 顔検証

  • 類似した顔の検出

  • 類似性に基づいた顔のグループ化

  • 人の識別

年齢、表情、髪とか化粧とかいろいろ判断する。

Face 用の Azure リソース

  • Face
  • Cognitive Services
    他のCognative Services同様、キーとエンドポイントが必要。
注意事項
  • 画像形式 - サポートされている画像は JPEGPNG、GIF、および BMP

  • ファイル サイズ - 6 MB 以下

  • 顔のサイズ範囲 - 36 x 36 から 4096 x 4096 まで。 これより小さいまたは大きい顔は検出されない

  • その他 - 極端な顔の角度、妨害 (サングラスや手などの顔をブロックするオブジェクト) によって損なわれる可能性があります。 顔が完全に正面、または完全な正面にできるだけ近い場合に最良の結果が得られる

【AI-900】Computer Vision サービスを使用して画像を分析する

Computer Vision サービスのチュートリアル

Computer VisionはAzureの画像分析するためのサービス。Azure Cognitive Servicesの一つ。

docs.microsoft.com

Computer Vision サービスを使用した画像の分析

  • 画像の説明
  • 視覚的な特徴のタグ付け
  • オブジェクトの検出
  • ブランドの検出
  • 顔の検出
  • 画像の分類
  • ドメイン固有のコンテンツの検出
    • 有名人
    • ランドマーク
  • 光学式文字認識
  • その他の機能
    • 画像の種類を検出する - クリップアート画像や線画を識別
    • 画像の配色を検出する - 具体的には、画像の支配的な前景、背景、および全体の色を識別
    • サムネイルを生成する - 画像の小さなバージョンを作成
    • 内容の抑制 - アダルト コンテンツや暴力的で残虐な場面が含まれている画像を検出

具体例はこちら↓

Azure で画像分析を開始する - Learn | Microsoft Docs

Computer VisionとCustom Vision

こちらがわかりやすかった↓
https://eventmarketing.blob.core.windows.net/decode2019-after/decode19_PDF_AI51.pdf

レーニング済みのモデルを開発者が使用するには?

→プロジェクトID,モデル名、予測リソースのキーとエンドポイントが必要!

docs.microsoft.com

docs.microsoft.com

  • Custom Visionを使用するにはCognitive ServicesかCustom Visionでリソース作る(おすすめはCognitive Services:エンドポイントが複数になるため混乱するかも)
  • Custom Visionでリソース作ると、トレーニング用と予測用と2つリソースができる
  • Custom Visionポータルでできる(GUI

コーディングするならこちら↓

docs.microsoft.com

【AI-900】AIの基礎

AIの基礎

MS learnで必要なところまとめていく。

docs.microsoft.com

AIとは

人間の行動と能力を模倣するソフトウェアを作成すること。

  • 機械学習 - 予測を行い、データから結論を導き出す方法をコンピューター モデルに「教える」こと

  • 異常検出 - システムのエラーや異常なアクティビティを自動的に検出する機能

  • コンピューター ビジョン - カメラ、ビデオ、画像を通じて世界を視覚的に解釈するソフトウェアの機能

  • 自然言語処理 - コンピューターが文字言語や音声言語を解釈し、同じ言語で応答する機能

  • 対話型 AI - 会話に参加するためのソフトウェア "エージェント" の機能

責任ある AI を理解する

Microsoft では、6 つの原則のセットを指針として、AI ソフトウェアを開発している。

公平性

AI システムではすべての人を公平に扱う必要がある。   例)銀行の融資承認申請システム

信頼性と安全性

AI システムは確実かつ安全に実行される必要があります。AI ベースのソフトウェア アプリケーション開発では、リリース前に期待どおりの動作を確保するために、厳格なテストおよびデプロイ管理プロセスを実施する必要があります。 例)自動運転システム

プライバシーとセキュリティ

AI システムは安全であり、プライバシーを尊重する必要がある。 AI システムのベースとなる機械学習モデルは、大量のデータに依存しており、これには非公開にする必要のある個人の詳細が含まれている場合があるので考慮しなければならない。

包括性

AI システムはあらゆる人に力を与え、人々を結びつける必要がある。 AI は、身体能力、性別、性的指向、民族性などの要因に関係なく、社会のすべての部分に利益をもたらす必要がある。

透明性

AI システムは理解しやすい必要がある。 ユーザーは、システムの目的、しくみ、想定される制限事項を十分に認識する必要がある。

アカウンタビリティ

説明責任。AI ベースのソリューションの設計者と開発者は、ソリューションが明確に定義された倫理的および法的基準を満たすことを保証するガバナンスと組織の原則の枠組みの中で作業する必要あり。

フレームワークの賞味期限について

web開発でフレームワークって欠かせないと思います。
現在わたしはC#フレームワーク.NET Coreについて勉強中です。

これまでに他の言語ではPHPのLaravel、Vue.jsのNuxt.jsを触ったことはありますが、特徴はそれぞれだけど基本的にどれも同じだと思っています。各種構造を理解できれば、特定の場所に必要な機能を追加実装するだけでwebアプリとして成り立つので積極的に使っていきたいところです。

フレームワークとは

簡単に言ってしまうと「必要な機能がすでに実装されているファイルをまとめているフォルダ」です。

こんなの ↓
f:id:nina-b:20210428174614j:plain:w300

もちろんこのファイルたち、裏で密につながっています。

例えばフォームのバリデーション。
自分で一から実装すると結構面倒ですが、フレームワークに標準で簡単にバリデーションを実装できるような機能がついてたりするので重宝します。標準のセキュリティがしっかりしてたりとか。

他にも書ききれないほどたくさんの機能がついてるので、使いたいフレームワークの特徴をそれぞれ調べてみると良いと思います。

docs.microsoft.com

バージョンとは

フレームワークにはバージョンというものがあります。
(例:.NET Core3.1の3.1の部分)

だいたい数字が増えるごとにバージョンが上がっていきますが、それぞれ新たな機能が追加されたり、そのバージョンでコーディング方法が変わっていたりするのでこの数字は非常に大事です。

そこで問題になってくるのが、「どのバージョンを選べばいいのか」。

フレームワークをインストールするときにバージョンを指定することができます。例えば .NET Coreは5が最新、Laravelでは8が最新(2021/4現在)なので最新を選べばいいかというと、必ずしもそうではありません。

もちろん選び方は人それぞれなので一概に言えることではありませんが、どれを選べばいいか迷っている方の一つの判断材料になればいいなと思います。

LTS(Long-term support)について

それでは本題、フレームワークの賞味期限についてお話します。

LTS(Long-term support)はその名の通り、「長期サポート」という意味です。公式がながーくサポートしてくれるバージョンというのが、あらかじめ決まっているんです。
.NET CoreやLaravelには、バージョンによってLTSなものとそうではないものがあります。
(LTSはフレームワークに限らず、OSや言語にもあります!調べてみましょう)

.NET CoreのLTS ↓

f:id:nina-b:20210428212613j:plain:w500

.NET Core and .NET 5 official support policy

LaravelのLTS ↓ 

f:id:nina-b:20210428212655j:plain:w500

Release Notes 8.x Laravel

ごらんの通り2021年4月現在では、.NET Coreでは3.1が最新、Laravelでは6が最新のLTSバージョンとなっています。
※それぞれ期間も違うので注意が必要です。

サポート期間が終了するとどうなるのか

ではサポート期間が終了するとどうなるでしょうか。

もちろんいきなり動かなくなったりすることはありません。もしフレームワーク側に重大なバグが見つかったとしても更新されず、セキュリティのリスクが上がるなど、webアプリが少しずつ腐っていきます。

ではどうすればいいのかというと、新しいバージョンに切り替えていく必要があります。 アップデートしながら運用していかなければなりません。
新しいバージョンを選ぶ時も、LTSを考慮する必要がありそうです。

まとめ

フレームワークを使ってwebアプリを開発・運用していくことを考えると、LTSは必ず検討しなければなりません。
もちろん最新バージョンにしかない新しい機能が使いたい!という場合は、LTSでなくともそのバージョンを選択する必要があると思います。

最適なバージョンを自分で選択できるようになりたいなと思います。おわり。

はじめに

技術ブログ開設

技術ブログを開設してみました。
C#, .NET Core, Azureがメインです。とりあえずわからないところをサクサクまとめて、後から見返せるようにというところまでが目標。

スペック

  • プログラミング歴1年
  • バックエンドエンジニア1年生
  • Java Script, PHP, Laravel勉強→就職
  • Vue.jsはちょこっとわかる
  • C#歴そろそろ5か月

C#がわからない

わからない。なんでこんなにわからないのかってぐらいわからない。
今までスクリプト言語しかやったことなかったのでコンパイラ言語はこれが初めてだけど、それにしてもわからない。(でも好き)
いい加減スラスラかけるようになりたいので、ど基礎から人に教えるぐらいの気持ちでこのブログにまとめていく。がんばる。

個人的ルール

  • 終業後30分~1時間で書く
    • 30分で書き終わるかどうか判定、1時間まで延長可
    • 書き終わらなければ翌日に持ち越し
  • マークダウン記法で書く
  • ネタはNotionで別途管理
  • とりあえず1か月やってみて、更新ペースについて再考

まとめ

.NET Core(特にRazor Pages)は日本語だとなかなかまとめが見つからないので、とにかく丁寧に書いていきたい。
初日終わり。