【随時更新】元コンサルが UiPath Document Understanding をわかりやすく説明するコーナー

# はじめに

- 本記事は、UiPath Studio の基礎知識をお持ちで、これから Document Understanding を利用したい方向けの内容となっています。
- 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
- 製品仕様や参考画像は 23.4 バージョンで構成しています。

# UiPath Document Understanding で何ができるの？

Document Understanding（以降、DUと略す）は、***ドキュメントから情報を抽出・解釈する機能群***です。
DUの機能と Studio でのワークフロー実装によって、次の様な自動化を実現できます。

（左の例）請求書やInvoiceから請求依頼システムへの自動入力や仕訳IFの作成・連携等
（右の例）履歴書から人事システムへの自動入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/ecfc5578-2a0c-8b36-c19f-3b886f567c95.png)

## 機能の全体像

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/fdfdd327-1755-c84b-63f8-50335afc58c3.png)

### 自動変換

![DU1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/488676d7-41f4-e088-edb2-6cf4547fe1b4.jpeg)
文書データをOCRでデジタルデータに変換します。

::: note
読み取り可能なファイルの拡張子は ***「.pdf」「.jpeg」「.png」「.tiff」*** です。
読み取り対象文書に日本語が含まれる場合、2023年5月時点で最も精度が高い ***「OCR - 日本語、中国語、韓国語」*** をご利用ください。
:::

自動変換では文書から抽出した ***テキストデータ*** と ***ドキュメント オブジェクトモデル（通称：DOM）*** を出力します。（DOMはオブジェクト型のデータであり、単純な文書のテキストデータだけではなく、文書のページ数やメタデータ、文字の位置情報、その他の情報を保持します。）


### 自動分類

![DU2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/11a6eab0-b79f-a8d4-5dac-122d13d74f02.jpeg)
自動分類では、 ***文書のテキストデータ*** と ***DOM*** と ***タクソノミー*** を引数に渡して文書の分類をおこないます。

ここで急に登場したタクソノミーですが、***帳票定義の様なもの*** と覚えてください。
![DU3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/b0420b2b-bac0-0733-db75-c4faa47ba8a0.jpeg)
Studio のデザインリボンにある「タクソノミーマネージャー」ボタンを押下して表示される ***専用画面で文書フォーマットの項目定義（※）*** をおこないます。
これは、DUのプロジェクトで一番最初にやることで、作成した定義は「タクソノミーを読み込み」アクティビティをワークフローの冒頭に配置し読み込みます。

※専用画面（タクソノミーマネージャー）
![DU4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/41826e89-3201-7cc3-4db4-a1f7582e984b.jpeg)
フォーマットの各項目はテキストや数値、日付型、表データを抽出するためテーブル型（以下、例）などがあります。
![DU5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/7232c216-1315-a54e-72ff-09b1d33b1f9e.jpeg)
タクソノミーマネジャーの詳細は[***こちらのガイド***](https://docs.uipath.com/ja/activities/other/latest/user-guide/load-taxonomy)で確認できます。

本題の分類についてですが、次の3つのアクティビティが用意されています。
- 「キーワード分類器」
- 「インテリジェントキーワード分類器」
- 「マシンラーニング分類器」

「キーワード分類器」と「インテリジェントキーワード分類器」は学習した***単語ベクトル（※）*** をもちいて分類をおこないます。

「マシンラーニング分類器」は単語ベクトルに加え、***座標や画像***なども考慮できます。

::: note
※：学習結果（主に「スコア」と「キーワード」が対になったデータ）はローカルファイルに記憶されます。
■対象ファイル：
{プロジェクトフォルダ}\DocumentProcessing\IntelligentKeywordClassifierLearningFile.json
:::

::: note warn
自動分類で利用するAIは***分類用のモデル***です。後述の抽出用のモデルとは別物です。
:::

### 分類結果の表示

![DU8.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/4937eb2a-d096-8570-0426-0e9292ba60b3.jpeg)
引数（文書のテキストデータ、DOM、タクソノミー、自動分類結果）を渡して実行することで、分類結果の画面（以下、例）を表示してくれます。
![DU10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/7a0b7265-a9d1-22d7-2dd7-245d8e2983ae.png)
![DU9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/b30ded79-1d69-4cef-4d07-a1626f716c3b.png)

### 再学習（分類）

![DU11.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/cef9751e-5ce0-42e4-4fff-f6b3ed065005.jpeg)
分類結果から手動で変更のあった項目のデータから再学習をおこないます。（上図は、ローカルの分類器のトレーニング用アクティビティ）
- 「キーワード分類器」と「インテリジェントキーワード分類器」　➢　ローカルファイルのアップデート
- 「マシンラーニング分類器」　➢　AIのモデルのアップデート

### 自動抽出

![DU6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/4c94f2dd-d344-ec20-7e58-e00e68f25c27.jpeg)
大別して3種類のデータ抽出方法があります。
- ***ルールベース***
    - 「フォーム抽出器」と「正規表現ベースの抽出器」アクティビティ等をもちいて、***文書上の固定領域内の値を抽出、または正規表現検索で一致する値を抽出***します。
- ***モデルベース***
    - 抽出用のAI（事前学習済みのモデル）に対して、トレーニングデータをもちいた追加学習をおこない、デプロイして利用可能となったエンドポイントを呼び出すかたちで値を抽出します。
- ***ハイブリット***
    - ルールベースとモデルベース両方の抽出器をもちいて値を抽出します。

::: note
備考：
- 正規表現ベースの抽出では、該当データが複数在る場合、値は抽出されません。
- フォーム抽出器のテンプレート（読み取る領域の情報などを覚えさせたもの）は『分類』と紐づきます。複数のフォーマットのテンプレートを作成する場合、タクソノミーの登録段階で『分類』も分けておきましょう。
- AIのモデルの学習にもちいるデータセットの作成は DocumentManager（Automation Cloud のDUのサービスの一画面）等でおこなえます。
:::

適用する抽出器は***項目ベースで細かく指定***することができます。
![DU7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/a03eca35-e06c-9223-97d3-6cce1049e04b.jpeg)

::: note warn
自動抽出で利用するAIは***抽出用のモデル***です。先述の分類用のモデルとは別物です。
:::

### 抽出結果の表示

![DU12.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/e03fc588-b423-87ff-1d21-834f9ac184d1.jpeg)
引数（文書のテキストデータ、DOM、タクソノミー、自動抽出結果）を渡して実行することで、抽出結果の画面（以下、例）を表示してくれます。
![DU13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/80a14e2d-ff32-9b40-6fca-ebdcb0d448ff.png)

### 再学習（抽出）

![DU14.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/c961ebb1-c831-2302-25ff-05ac8bfacc2f.jpeg)
抽出結果から手動で変更のあった項目のデータから再学習をおこないます。（上図は、抽出のAIモデルのトレーニング用アクティビティ）

::: note warn
2023年5月時点で、トレーニング機能が備わっているのは「マシンラーニング抽出器」のみです。
「フォーム抽出器」と「正規表現ベースの抽出器」はルールベースのため再学習はありません。
:::

### データ操作・出力

![DU15.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/93484345-6746-5e6a-c6f4-147376c43d3d.jpeg)
「抽出結果をエクスポート」アクティビティを使うことでデータセット型（※）の情報を出力できます。
※：複数のデータテーブルを保持できます。データテーブルを単一の「テーブル」とした場合、データセットは「データベース」のイメージです。

（出力サンプル）
![DU16.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/81999916-f01a-b501-2afc-5f51a6b0a06e.jpeg)
![DU17.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/b6fd1b66-a557-11e7-2e95-856cdc5ec21c.jpeg)
![DU18.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/683d9f61-f656-011b-ff93-c89c9ed0445b.jpeg)
抽出したデータはワークフローの中で容易に整形することができます。
例えば、読み取った電話番号をハイフンなしに加工したい場合、
![DU19.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/c5ed996e-ea22-64ff-e67c-4d54abb0464f.jpeg)
「代入」アクティビティを配置し、
```
{左辺の整形済みテキスト} = System.Text.RegularExpressions.Regex.Replace(電話番号, "[^0-9]", "")
```
と書くだけでできますし、住所を市区町村で分割してあげたければ
[***こちらの記事***](https://qiita.com/ManabuTech/items/9e10fd59636174ba810c)の様にChatGptと連携して処理することで実現できます。

# 最後に

いかがでしたでしょうか？
Document Understanding は登場人物が多い機能のため、UiPath の製品の中でも理解するのが難しい部類です。
この記事を読んで少しでもDUの理解が深まった、また関心が強まったという方は
是非以下の記事等もご覧になっていただけますと幸いです。

https://qiita.com/Kajiita/items/552a1192ab457281bfb3

https://qiita.com/Kajiita/items/1cd174ada00dd3055707

https://qiita.com/utanesuke/items/8cdcd1276fe248fafea7

https://qiita.com/utanesuke/items/95e49a3f21d81c4393a9

https://qiita.com/utanesuke/items/d26c9636a078a2ebcabb

https://qiita.com/utanesuke/items/c59aaaa96db2f93bc83a

https://qiita.com/utanesuke/items/1cac422f8e4b2ecee26e

https://qiita.com/utanesuke/items/103cae121fc695b77f36

最後までお読みいただきありがとうございます(・ω・)ノ