UiPath Document Understanding 第7回 実践編 AI Centerを利用して自社のドキュメントを処理しよう

[第六回](https://qiita.com/utanesuke/items/103cae121fc695b77f36)までは、UiPathが用意したデフォルトのAIモデル([InvoicesJapan (請求書 - 日本) - ML パッケージ](https://docs.uipath.com/ja/document-understanding/automation-cloud/latest/user-guide/invoices-japan-ml-package))を利用して、日本語の帳票からデータを抽出しました。
しかし、このAIモデルを利用して、自社独自フォーマットのドキュメントからデータを抽出することが難しい場合、**自社独自フォーマットのドキュメントを利用して、AIモデルを再トレーニングすること**で、**自社のドキュメントからデータを抽出できる**ようになります。

今回の記事では、AI Centerを利用して、**このAIモデル(InvoicesJapan (請求書 - 日本) - ML パッケージ)を再トレーニング**する方法、及び**再トレーニング済のAIモデルの利用**を解説します。

AI Centerに関する説明は本記事で省略しますので、詳細な情報は以下の記事を参照してください。

https://qiita.com/utanesuke/items/43af7e88f2fb05b288f1

# 1. AI Centerでのプロジェクト作成及び関連設定

プロジェクトとは、特定の ML ソリューションの構築に使用できる、データセット、ML パッケージ、パイプライン、ML ログ、ML スキルなどの独立したリソースでグループです。プロジェクトを一番最初に作成する必要があります。

## プロジェクトの作成

**手順：**
- **プロジェクト**ページで、**プロジェクトを作成**ボタンをクリックします。**新しいプロジェクトを作成**ページが表示されます。
- **プロジェクト名**を入力します。**プロジェクト名**は今後更新できません。
- 必要に応じて、**プロジェクトの説明**を入力します。
- **作成**をクリックします。新しいプロジェクトが作成され、**ダッシュボード**ページが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/8f8c7e85-a1f5-81fb-6e38-0fc219deb4a8.png)

## データセット及びデータのラベル付けの作成

**手順：**
- 作成したプロジェクトを選択して、次の画面で左側の**データセット**をクリックします。
- データセットページで、**新規作成**ボタンをクリックします。
- **データセット名**を入力して、**作成**ボタンをクリックします。
- 左側の**データのラベル付け**をクリックして、右側の**UiPath Document Understanding**をクリックします。
- 次は、データのラベル付けセッション/新規作成の画面に、**名前**を入力して、**作成したデータセット**を選択して、**作成**ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/29a0d5c3-e2cb-0758-6258-3c9747616622.png)

# 2. Document Managerでドキュメントのラベル付け

次は、作成したデータのラベル付けセッション(例：DU_Japan_Invoice_30)をクリックして、Document Managerでドキュメントにラベルを付けます。

## OCRを設定します

Document Manager上で、OCR及び事前ラベル付けを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/61937156-cff5-56a1-ed75-8455b3aca929.png)

**手順**：
1. 青文字の**OCRを設定します**をクリックします。
2. **OCR**タブに以下の通りで設定します。
    - **OCR メソッド**に`UiPath Chinese-Japanese-Korean OCR`を選択します。
    - **OCR API キー**にCloud Automationライセンスから取得した API キーを入力します。 
    - **OCR のURL**に`https://du-jp.uipath.com/cjk-ocr`を入力します。
3. **事前ラベル付け**タブをクリックして、以下の通りで設定します。
    - **事前ラベル付け URL**に`https://du.uipath.com/ie/invoices_japan`を入力します。
    - **事前ラベル付けキー**はOCR API キーと同じにします。
4. **保存**ボタンをクリックします。

参照画面：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/5fdb70ba-0918-a17c-eca2-571189c435f3.png)

## 事前定義されたスキーマのインポート

ドキュメントからどんなフィールドを抽出するか、予め定義する必要があります。列フィールド、標準フィールド及び分類フィールドを自分で作成することも可能ですが、作業を開始しやすいよう、UiPath ではすぐに使える ML パッケージ用のスキーマを提供しています。これらの .zip ファイルは、データセットをインポートするのと同様に Document Manager にインポートできます。

[事前定義されたスキーマ](https://docs.uipath.com/ja/document-understanding/automation-cloud/latest/user-guide/document-manager-use-a-predefined-schema)から**InvoicesJapan (請求書 - 日本)** のをクリックしてダウンロードします。

**手順**：
1. 青文字の**ドキュメントをインポートします**をクリックします。
2. バッチ名を入力して、ダウンロードした**schema_invoices_japan.zip**をドラッグアンドドロップして、**アップロード**ボタンをクリックします。
3. **スキーマのインポートが検出されました**のメッセージが表示されたら、**インポート**ボタンをクリックします。
3. インポート ステータスが100%になったら、**閉じる**ボタンをクリックします。

参照画面：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/282bba42-f429-4319-98b0-6a985cd32e32.png)

正しくインポートされたら、以下のように事前に定義されたフィールドが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/b92c999f-f8b5-f656-d4a6-250e541e623d.png)

## フィールドを作成します

実際の請求書画面から以下ようなフィールドを定義します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/68a721d7-0810-668f-097a-8c09c329b833.png" width=540>

以下のテーブルには、請求書から抽出したいフィールドが示されています。
| No | フィールド名 | 種類 | 列-フィールド名 | 列-種類 |
|:-:|:-:|:-:|:-:|:-:|
|  1 | invoice-no(請求書番号)  | ID 番号  |   |   |
|  2 |name(請求元会社名)  |文字列   |   |   |
|  3 | billing-name(請求先会社名)  | 文字列  |   |   |
|  4 | 品目明細  | Table  |   |   |
|  4.1 |   |   | description(品名)  |文字列   |
|  4.2 |   |   | quantity(数量)  | 数値  |
|  4.3 |   |   | unit-price(単価)  | 数値  |
|  4.4 |   |   | line-amount(金額)  | 数値  |
|  5 | 総額  | 数値  |   |   |

次は、Document Managerで不要な標準フィールド及び列フィールドを削除します。

**手順**：
- 不要なフィールドの右側の鉛筆マークをクリックして、**削除**をクリックします。

参照画面：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/645474b9-a85c-ffc2-5106-82584a879700.png)

## ドキュメントのラベリング

こちらの[ du_japan_invoice30_data](https://drive.google.com/drive/folders/1hOvdWX6g-Ey3C0sm2rzG3nM66wRg5UY8?usp=sharing)で30枚の日本語請求書を用意したので、ダウンロードして利用してください。
ラベリングをするため、まずトレーニング用ドキュメントをインポートします。

以下の図で示したように、**インポート**をクリックして、ダウンロードした日本語請求書を**アップロード**して**インポート**します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/d71a1279-f5bb-bac2-e8b1-2baf5a3aacbb.png)

インポートが完了したら、**閉じる**をクリックして、ラベリングの作業画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/31742fae-e851-209e-2deb-a67bbd679b6b.png)

請求書画面で、フィールド(例：請求書Noの`23445984-0112`)を選択して、該当フィールドのホットキー(例：invoice-noのホットキーの`o`)をクリックします。繰り返しで、全てのフィールドを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/0f4b8cbe-5909-2785-2ce8-ddf84bab648c.png)

**繰り返しで、全てのページでのフィールドを指定します。**

:::note info
列フィールド(例：品番・品名)が複数ページを跨る場合は、`shift`キーを押しながらフィールドを選択します。
:::

## ファイルをエクスポート

次は、ラベリングしたデータをデーターセットにエクスポートします。

**手順**：
1. 全部の請求書をラベリングしたら、上の**エクスポート**をクリックします。
2. 名前を入力し、**AI Centerにエクスポート**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/3ea439a1-544d-ab50-c60c-7a43ddeef43a.png)

上の**エクスポート**の点滅が完了したら、AI Center のデータセットに行って、**<作成したデータセット名>/export** の下に **新しいフォルダー**があるかを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/203fffa9-0a49-e1ef-3a68-37029b0cfc59.png)

## スキーマ(フィールド)をダウンロード

今後この定義したスキーマを利用するため、セッションのスキーマ(フィールド)をダウンロードします。

**手順**：
1. 数:0 が表示しているフォルダーにフィルターします。
2. **エクスポート**をクリックします。
3. 名前を入力し、**ダウンロード**を押します。
4. ダウンロードしたフォルダーをデスクトップに置きます。

参照画面：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/79a4b199-613e-904a-32e3-48fe50b7dc10.png)

# 3. 請求書モデルの再トレーニング

## ML パッケージの作成

まずは請求書のML パッケージを作成します。

**手順**：
1. AI Centerプロジェクトの**ML パッケージ**を選択して、右の**すぐに使えるパッケージ**をクリックします。
3. **UiPath Document Understanding**を選択します。
4. **InvoicesJapan**を選択し**送信**します。
5. パッケージ名を入力し送信したら、パッケージが作成されます。
   ※説明欄の入力は任意です。 
   ※OCR エンジンの設定はStudioで行いますため、省略します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/d210121d-54bf-d423-51ad-6b58da2420ed.png)

## パイプラインの実行

次は、パイプラインを使って、ラベリングしたデータでモデルをトレーニングします。

**手順**：
1. AI Centerプロジェクトの**パイプライン**を選択して、右の**新規作成**をクリックします。
2. パイプラインの種類に**トレーニングの実行**を選択します。
3. パッケージを選択に**先程作成したパッケージ**(例:DU_InvoicesJapan)を選択します。
4. パッケージのメジャーバージョンとパッケージマイナーバージョンに最新バージョンを選択します。
5. 入力データセットを選択に **<作成したデータセット名>/export/<ラベリングしたフォルダ名>** を選択します。
6. **GPUを有効化**をチェックして、**作成**ボタンをクリックします。
7. パイプラインの一覧に作成したパッケージが表示されます。ステータスを**成功**になるまで待ちましょう。

参照画面(パイプラインの作成)：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/e6099316-b134-1f78-80c6-e65cd2289abe.png)

参照画面(成功したパイプライン)：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/24f30e4c-ea48-0a01-3195-c68654d1dbe5.png)


## ML スキルの作成

次は、トレーニング済のML パッケージを利用して、ML スキルを作成します。

**手順**：
1. AI Centerプロジェクトの**ML スキル**を選択して、右の**新規作成**をクリックします。
2. 名前を入力して、パッケージを選択に**先程作成したパッケージ**を選択します。
3. パッケージのメジャーバージョンとパッケージマイナーバージョンに**最新バージョン**を選択します。
4. **作成**ボタンをクリックします。

参照画面：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/8b905796-0a9f-a435-e259-b4d72bfe8ca5.png)


## ML スキルのEndpointの作成

UiPath Studioでモデルを使うため、ML スキルのEndpointを設定します。

**手順**：
1. ML スキルの一覧に**先程作成したMLスキル**をクリックします。
   ※ステータスを利用可能になるまで10 ~ 15分 かかります。
2. 右上の**→ 現在のデプロイを変更**をクリックします。
3. **ML スキルを公開**トグルを**ON**にして、**確認**ボタンをクリックします。
4. ML スキルのステータスが**利用可能**になったら、もう一度 ML スキルをクリックし、urlが作成されたかを確認します。

参照画面(現在のデプロイを変更):
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/7a85e2f4-140a-06d3-1f94-9f32396708dc.png)

参照画面(MLスキルのURL確認):
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/190c0f29-8922-d0f7-dfb2-d29e5388e532.png)

# 4. 再トレーニング済AIモデルを利用します

上記の**3. 請求書モデルの再トレーニング**で、30枚<sup>補足</sup>のドキュメントをラベリングして、ラベリングしたデータセットを利用してAIモデルを再トレーニングしました。

これから、[第5回 基礎編 テンプレートを使って日本語請求書からデータ抽出しよう](https://qiita.com/utanesuke/items/1cac422f8e4b2ecee26e)で作成してワークフローをベースにして、再トレーニングしたAIモデルを利用して、ドキュメントを処理します。

再トレーニングしたAIモデルとUiPathの用意したデフォルトの請求書モデルの違いがエンドポイントですので、**Config.xlsx**を開いて、Settingsシートでの**InvoicesEndpoint**を変更する必要があります。
- 変更前：https://du.uipath.com/ie/invoices_japan
- 変更後：上記[ML スキルのEndpointの作成](#ml-スキルのendpointの作成)で取得したURL

それ以外の修正は不要です。実行して、デフォルトの請求書モデルの結果と比較してみてください。
MLスキルのストリーミングログ画面で、該当MLスキルが呼ばれた際のログが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/60876121-4422-ed16-7fbb-5b4f8e4ce992.png)

:::note info
**補足：** 今回のトレーニング用のドキュメントが30枚しかなく、トレーニングデータとしては不足しています。実際の業務で、以下の指標を参照して、トレーニング用ドキュメントを準備してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/7ee603f6-5fad-cbd3-a475-ffa13118aad2.png)
:::

# 5. 検証済データを利用してAIモデルの継続改善

ローカルに保存していた検証済データをAI Centerにアップロードし再教育するため、検証済データを圧縮します。

手動でラベル付けした元のデータセットに検証済のデータを追加する必要があることです。これにより、時間の経過とともにサイズが増大する単一のトレーニング データセットを常に得られます。0 (ゼロ) マイナー バージョン (UiPath がリリースした、すぐに使えるバージョン) の ML パッケージでトレーニングを実施することが必要です。


**手順：**
1. 実行した後、/Data/InvoicesTraining フォルダーを開きます。
2. documents,metadataとpredictionsフォルダーをzipとして圧縮します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/8d576447-01f0-eac0-4823-6e12ee75bf61.png)

次は、新しいデータ ラベル付けセッションを作ります。

**手順：**
1. AI Center > データ ラベル付けにアクセスし、**UiPath Document Understanding**を選択します。
2. 新しいデータ ラベル付けセッションを作成します。関連設定は以下の図の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/3181effe-b6c5-445e-bcba-cce778d27723.png)

最後に、ダウンロードしたスキーマと圧縮した検証済データをインポートします。
**手順：**
1. 作成したデータのラベル付けセッションをクリックして、Document Managerにて開きます。
1. [スキーマフィールドをダウンロード](#スキーマフィールドをダウンロード)でダウンロードしたスキーマをインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/00322a0b-9199-9b20-a15d-02f152b7ab99.png)
1. 圧縮した検証済データをインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/ef0d9db5-d89d-4332-3a68-ec68a3c4fcae.png)
1. スキーマ及び検証済データのインポートが完了したら、以下のように修正なところがあれば修正します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/69197a64-8800-a8bd-17a3-8b2287c0f82f.png)
1. 最初に手動でラベル付けした元のデータセットもインポートをします。

次は、[ファイルをエクスポート](#ファイルをエクスポート)及び[請求書モデルの再トレーニング](#3-請求書モデルの再トレーニング)での操作手順を参照して、以下の処理をします。
- データーセットにエクスポートします。
- AI Center のパイプラインで、トレーニングします。（0 (ゼロ) マイナー バージョン (UiPath がリリースした、すぐに使えるバージョン) の ML パッケージでトレーニングを実施することが必要です。）
- AI Center のMLスキルで最新パッケージを再デプロイします。
- 再デプロイしたMLスキルのエンドポイントURLを利用して、ワークフロープロジェクトでのConfig.xlsxのSettingsシートでのInvoicesEndpointを更新します。

これで段階的に検証済データを使って、再トレーニングをすれば、MLスキルを利用した抽出データの精度がどんど高くなります。

:::note warn
重要: 検証ステーションのデータの正しい使用方法は、前のモデルのバージョンを繰り返し再トレーニングすることだと誤解されていることがよくあります。
- **誤解**：X.2 を取得するために、現在のバッチを使用してパッケージ X.1 をトレーニングしているのです。そして次のバッチを使用して X.2 のトレーニングを行い、X.3 を取得します (以降同様)。これは、製品の使用方法として間違っています。
- **正解**：検証ステーションの各バッチは、最初に手動でラベル付けしたデータと同じ Document Manager セッションにインポートして、さらに大きなデータセットを作成する必要があります。そして、そのデータセットを使用して、常に ML パッケージ バージョン X.0 をトレーニングする必要があります。
:::

更に詳細な内容は以下のページをご参照ください。

https://docs.uipath.com/ja/document-understanding/automation-cloud/latest/user-guide/training-high-performing-models#8-training-using-data-from-validation-station



# 6. 最後に

第七回まで読んでいただいてありがとうございました。これまでは、利用手順を中心にして解説してきました。
今後は更に細かい仕様（例：手書き、抽出器の詳細など）を解説していきたいと思います。

# 参考情報

https://docs.uipath.com/ja/document-understanding/automation-cloud/latest/user-guide/public-endpoints