【UiPath】バージョン「23.10」AI / Document Understanding 機能改善紹介

# はじめに

- 本記事では、UiPath バージョン 23.10 の AI / Document Understanding の機能改善を幾つかピックアップして紹介します。
- 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
- 製品仕様や参考画像は 23.10 バージョンのもので構成しています。

# 目次
今回紹介する内容は下記になります。

```
# 1）Generative Extractor（生成AIをもちいた抽出器）
# 2）Generative Classifier（生成AIをもちいた分類器）
# 3）Document Manager の「予測」機能の強化
```
（参考イメージ）
![生成AIの抽出器_アクティビティ参考.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/5c31d3d6-535a-2f22-bdb5-cebf42c85e0b.jpeg)

## 1）Generative Extractor（生成AIをもちいた抽出器）

DU系のパッケージをインストールします。（以下は本記事用のテストプロジェクトの依存パッケージ）
"UiPath.DocumentUnderstanding.Activities": "[2.4.1]",
"UiPath.DocumentUnderstanding.ML.Activities": "[1.24.0]",
"UiPath.IntelligentOCR.Activities": "[6.14.1]",

タクソノミーを定義し、「タクソノミーを読み込み」で帳票定義をロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/c08e8282-9d27-ec11-8d1d-86216988f23d.png)

::: note warn
タクソノミーを定義する前に Generative Extractor または Generative Classifier を配置しプロンプトの設定画面を起動すると、次のキャプチャの様なエラーが発生します。

![動作確認1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/acc0535e-0383-d4fa-662b-d31c2e13fbbc.jpeg)
:::

ドキュメントをデジタル化（詳細は割愛）したら、「データ抽出スコープ」を配置し、「Generative Extractor」を中に挿れます。

![生成AIの抽出器5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/98b230a3-c514-828e-6da8-f622b33b8b49.jpeg)

::: note
分類はおこなわず、抽出対象のドキュメントを直接指定する場合、「ドキュメントの種類のID」欄を設定します。
ドキュメントの種類のIDは、タクソノミーマネジャーで確認できます。（キャプチャの黄色でハイライトされている部分です）

![生成AIの抽出器6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/404b292a-0e81-ad52-4e76-10ade393e709.jpeg)
:::

「Manage Prompt」のリンクをクリックし、タクソノミーで定義した各項目の説明文を（Prompt欄に）入力します。

![生成AIの抽出器4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/3d4a9ebe-ea6f-69df-143b-125b7c72fa60.jpeg)

***たったこれだけの設定で完璧にデータ抽出ができるんです！！！***

![生成AIの抽出器3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/6741a412-dfe7-57ec-f65e-05fe45389485.jpeg)

::: note
（読み込ませた帳票イメージ）
![請求書フォーマット10_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/6b42d375-d4bf-f1ae-d4fe-c70c0bb970f8.jpeg)

（CJK-OCRの読み取り結果（ドキュメントテキスト））
![生成AIの抽出器_ドキュメントテキスト.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/894d7511-050b-db8a-0d15-19bd2539d325.jpeg)

***★☆ Prompt のコツ***
1. ***キーワードを変えてみる***（（例）「請求元の会社名」や「ベンダー名」だと取引先名称を拾ってきていたが、「製造元の会社名」に変更したら意図通りになった）
1. ***不要なものは明示する***（（例）「銀行名」のみ指定した場合、「支店名」も含んで出力された）
:::

## 2）Generative Classifier（生成AIをもちいた分類器）

「ドキュメント分類スコープ」を配置し、「Generative Classifier」を中に挿れます。

![生成AIの抽出器7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/8ddd6055-0bfe-eb94-e36e-910248d2a0fa.jpeg)

「Manage Prompt」のリンクをクリックし、分類のテスト用に準備した3つドキュメントの説明文を入力します。

![生成AIの抽出器8.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/99714bb5-8463-5b0b-725d-928becc76356.jpeg)

1番の抽出器のときと同様に請求書を読み込ませると、「invoice_japan」の分類結果が返ってきます！！

![生成AIの抽出器10.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/a0aa0191-a7b1-5624-f0ba-b101d84f1d02.jpeg)
![生成AIの抽出器9.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/2d100111-d8b6-7466-e21b-1b95c8bd32fc.jpeg)

次にアンケート用紙を読み込ませたところ、「アンケート」の分類結果が返ってきました！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/b06daaec-9b37-bef8-4ea0-50113de1a7c1.png)

（読み取らせたアンケート用紙サンプル）
![アンケート入力6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/47836a2d-f0c7-5fbd-fa0f-f2e3ab4e1419.jpeg)
![生成AIの抽出器12.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/181aab35-67e2-0bad-9fa0-9208844e234d.jpeg)

::: note warn
スコープの「分類器を設定」のチェックをONにしていない場合、どのドキュメントにも分類されず、結果が0件で返ってくるのでご注意ください。

![生成AIの分類_ここを要チェック.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/24e8d633-7c18-22d8-6a8b-537a918158a9.jpeg)

![生成AIの抽出器11.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/d05bc72b-5787-5c24-af05-aaef21cf8666.jpeg)

***分類器の設定で「アンケート」のチェックをOFFにしたところ、請求書以外の hogehoge ドキュメントに正確に分類されました！***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/3215a803-6f25-192e-81f1-6ee01b07ed14.png)
:::

## 3）Document Manager の「予測」機能の強化

ラベル付けを自動でおこなってくれる「予測」機能が強化されました。
従来の予測は ***『モデル（特化型のAI）』*** の予測結果でラベル付けをおこなっていましたが、新たに ***『生成AI モデル』*** の予測と ***合わせ技（特化型＋生成AIモデル）*** の2つが加わりました。

![生成AIの抽出器13.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/4af89177-a030-0240-d591-df285ad310a2.jpeg)

合わせ技のロジックは不明（おそらく信頼度の様なスコアが裏にある）ですが、手元で4種類くらいの請求書サンプルを読ませた限り、合わせ技の『予測』が最も精度は高かったです。
具体的には、***現時点（2023/12/18）の請求書モデル（invoice_japan）は事前学習データに過不足があるのか、金額系の項目の認識が弱い傾向があります。
生成AI モデルの場合、税額や税抜き合計、割引金額などは意味合いをカラム名などから判断できているのか、補完できてるケースを幾つか確認できました。***

同様に、***現時点（2023/12/18）の請求書モデル（invoice_japan）の標準フィールドには存在しない口座系の情報についても、生成AI モデルでは学習なしで抽出できることを確認しました↓↓***

![生成AIの抽出器14.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/54aed9c7-6b66-5fe7-82dd-25e29e68fbfa.jpeg)

::: note warn
来年、一般向けにリリースされる頃、どこまで改善されるかは未知数ですが、現時点（2023/12/18）では生成AI モデルの予測結果（精度）は安定しません。

***（良い例：標準フィールドの抽出項目数15 うち正解が10項目）※なお、合わせ技だと抽出項目数16 うち正解が13項目 誤った3項目は特化型モデルでは抽出しなかった Payment Address や Shipping　Charges とそもそも本帳票には居ない請求日です。***
![請求書フォーマット150_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/68152b31-8a2a-baa4-f38e-b9eceb01c5d0.jpeg)

***（悪い例：標準フィールドの抽出項目数5 うち正解が4項目）※なお、合わせ技だと抽出項目数8 うち正解が7項目***
![請求書フォーマット110_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/bfedca0c-2a2b-f992-51da-12aa68be31d5.jpeg)

（明細の例：表を解析して最小粒度の明細行のみ抽出した？）
![生成AIの抽出器15.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/767f578a-20fc-385e-fddd-79800a831d10.jpeg)

Document Manager 上、生成AI モデルで抽出する際の Prompt の入力画面が見当たらない。（ガイドをみても確認できない）このため、予測結果のチューニング方法は不明です。
https://docs.uipath.com/ja/document-understanding/automation-cloud/latest/user-guide/document-manager#predict%2Fprelabelling
:::

# さいごに
生成AI モデルの抽出結果は予想に反して、同じ条件下では私が見た限り動作は変わりませんでした。
期待結果が得られない項目（フィールド）はあるものの、もっとも危惧した結果が"都度変わる"リスクはなさそうです。
従来の特化型AIとランニングコストでどの程度の差が出るかは今後調べていきますが、精度が特化型と同程度まで向上した場合は導入コストが低い分メリットが大きくなりそうな良い機能です☀　今後に期待！！