今回は Azure Form Recognizer (プレビュー) と Logic Apps を用いて、AI で領収書を分析するシステムを作成します。記事執筆時点では Azure Form Recognizer はプレビュー版となっており、開発チームへ申請することでリソースを作成することができます。
#Form Recognizer の全体像
Form Recognizer のコンセプトは以下 MSDN の Channel 9 に動画がアップロードされています。
Learn about AI-powered robotic process automation with Form Recognizer
https://channel9.msdn.com/Shows/AI-Show/Learn-about-AI-powered-robotic-process-automation-with-Form-Recognizer
データが重要な時代にも関わらず、建設業等では紙で大事なデータを扱っています。Form Recognizer では PDF 等の紙データを AI が分析し、瞬時にデータをデジタル化することができます。(的なコンセプトです)
Form Recognizer は「フォームを解釈し、ドキュメントを抽出できる AI サービス」です。
Form Recognizer プレビュー
https://azure.microsoft.com/ja-jp/services/cognitive-services/form-recognizer/
マイクロソフトドキュメントによると、Form Recognizer は 3 つのサービスから構成されます。
-
カスタムモデル
フォームからキーと値のペアおよびテーブル データを抽出します。 これらのモデルは自分が用意した独自のデータでトレーニングされるため、実際のフォームに合わせて調整されます。 -
あらかじめ構成されたレシートモデル
事前構築済みモデルを使用して米国のレシートからデータを抽出します。
【補足】
英語で書かれた米国のレシートを読み取るためのモデルも付属しています。—レストランやガソリン スタンド、小売店などで使用されるタイプのレシートが対象となります。 このモデルでは、取引日時、販売店情報、税金と合計金額などの主要な情報が抽出されます。 さらに、あらかじめ構築されたレシート モデルは、レシート内のすべてのテキストを認識して返すようにトレーニングされています。 -
Layout API
テキストおよびテーブルの構造を、対応する境界ボックスの座標と共にドキュメントから抽出します。
【補足】
Form Recognizer は、高精細の光学式文字認識 (OCR) を使用して、テキストやテーブル構造 (テキストが関連付けられた行番号と列番号) を抽出することもできます。
このうちのカスタムモデルでは、ラベルを使用しないトレーニング、ラベルを使用したトレーニングがあります。
-
ラベルを使用しないトレーニング
Form Recognizer は、既定では教師なし学習を使用して、フォーム内のレイアウトを解釈し、フィールドとエントリ間の関係を解釈します。 入力フォームを送信すると、アルゴリズムによって種類別にフォームが分類されて、存在するキーとテーブルが検出されます。また、値がキーに、エントリがテーブルに関連付けられます。 手動によるデータのラベル付けは不要であり、大量のコーディングやメンテナンスも必要ありません。最初は、この方法を試すようお勧めします。 -
ラベルを使用したトレーニング
ラベル付けされたデータによるモデルのトレーニングでは、ラベル付けされた指定のフォームを使用して教師あり学習を行うことで、目的とする値が抽出されます。 こちらの方が、複雑なフォームや、キーのない値を含んだフォームでも機能する性能のよいモデルが得られます。
Form Recognizer は、印刷されたテキストや手書きのテキストの要素について、Layout API を使用して予想されるサイズや位置を学習します。 その後、ユーザーによって指定されたラベルを使用して、ドキュメントに含まれるキーと値の関係を学習します。 新しいモデルをトレーニングする際はまず、手動でラベル付けされた同じタイプのフォーム 5 つを使用し、そのうえで、モデルの精度を改善するために必要であれば、ラベル付けされたデータを追加することをお勧めします。
今回のデモでは、ラベルを使用しないトレーニングをカスタムモデルを使用します。
#Form Recognizer の利用申請をする
Preview Version のため、Azure アカウントを使って Form Recognizer の利用を申請する必要があります。
https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbRyj5DlT4gqZKgEsfbkRQK5xUMjZVRU02S1k4RUdLWjdKUkNRQVRRTDg1NC4u
申請後1,2日で開発チームから承諾メールが届きます。承諾メールの中に、Azure Portal から Form Recognizer をデプロイするためのリンクや、カスタムモデルを構築するためのクイックスタートへのリンクが記載されています。
#必要なリソースを作成する
Form Recognizer の他に必要なリソースは以下の二つです。
Azure Account Storage
Azure Logic Apps
この二つのリソースを下記のチュートリアルに従いながらデプロイします。
Tutorial: Use Form Recognizer with Azure Logic Apps to analyze invoices
https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/tutorial-form-recognizer-with-logic-apps
#Logic Apps を準備し、メールを送付する
Logic Apps ではメールを受信したことをトリガーとして、Logic Apps が起動します。
Logic Apps が起動すると、指定したメールアドレスにメールが送付されます。今回は以下のドキュメントを送付しました。
送付し、Form Recognizer で分析した結果、以下の JSON がメールで送付されてきます。
[
{
"id": "table_0",
"columns": [
{
"header": [
{
"text": "Invoice Number",
"boundingBox": [
38.5,
585.2,
113.4,
585.2,
113.4,
575.8,
38.5,
575.8
]
}
],
"entries": [
[
{
"text": "AC-32322",
"boundingBox": [
38.5,
549.5,
83.4,
549.5,
83.4,
535.9,
38.5,
535.9
],
"confidence": 1
}
]
]
},
{
"header": [
{
"text": "Invoice Date",
"boundingBox": [
139.7,
585.2,
198.5,
585.2,
198.5,
575.8,
139.7,
575.8
]
}
],
"entries": [
[
{
"text": "03 March 2018",
"boundingBox": [
139.7,
549.5,
206.1,
549.5,
206.1,
535.9,
139.7,
535.9
],
"confidence": 1
}
]
]
},
{
"header": [
{
"text": "Invoice Due Date",
"boundingBox": [
240.5,
585.2,
321,
585.2,
321,
575.8,
240.5,
575.8
]
}
],
"entries": [
[
{
"text": "06 Nov 2019",
"boundingBox": [
240.5,
549.5,
297,
549.5,
297,
535.9,
240.5,
535.9
],
"confidence": 1
}
]
]
},
{
"header": [
{
"text": "Charges",
"boundingBox": [
341.3,
585.2,
381.2,
585.2,
381.2,
575.8,
341.3,
575.8
]
}
],
"entries": [
[
{
"text": "$110,153.22",
"boundingBox": [
380.6,
548.7,
436,
548.7,
436,
535.9,
380.6,
535.9
],
"confidence": 1
}
]
]
},
{
"header": [
{
"text": "VAT ID",
"boundingBox": [
442.1,
590,
474.8,
590,
474.8,
575.8,
442.1,
575.8
]
}
],
"entries": [
[
{
"text": "RT",
"boundingBox": [
447.7,
549.5,
461,
549.5,
461,
535.9,
447.7,
535.9
],
"confidence": 1
}
]
]
}
]
}
]
上のサンプルレシートと照らし合わせると、Invoice Number、Invoice Date、Invoice Due Date、Charges、VAT ID がちゃんと認識されていることが分かります。
これまで人の目で見て人の手で入力していた作業が AI で補うことができるので非常に便利ですね!
#参考 URL
Train without labels
QuickStart: Train a Form Recognizer model and extract form data by using the REST API with cURL
https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/quickstarts/curl-train-extract
QuickStart: Train a Form Recognizer model and extract form data by using the REST API with Python
https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/quickstarts/python-train-extract
Train with labels
QuickStart: Train a Form Recognizer model with labels using the sample labeling tool
https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/quickstarts/label-tool
QuickStart: Train a Form Recognizer model with labels using REST API and Python
https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/quickstarts/python-labeled-data
Prebuilt receipts - extract data from USA sales receipts
Quickstart: Extract receipt data using cURL
https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/quickstarts/curl-receipts
Quickstart: Extract receipt data using Python
https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/quickstarts/python-receipts
Layout - extract text and table structure (row and column numbers) from your documents
Quickstart: Extract layout data using Python
https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/quickstarts/python-layout