【UiPath】インテリジェント キーワード分類器を調べてみた

# はじめに

- 本記事では、インテリジェント キーワード分類器の挙動（仕様）を確認した際の備忘禄です。
- 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
- 製品仕様や参考画像は 23.10 バージョンのもので構成しています。

# インテリジェント キーワード分類器とは？

https://docs.uipath.com/ja/document-understanding/automation-cloud/latest/user-guide/intelligent-keyword-classifier

インテリジェント キーワード分類器は、UiPath Document Understanding の機能の一つで、特定のドキュメントファイルから学習した単語ベクトルを使用して、入力されたドキュメントの分類を実行します。

Studio 上に ***「分類スコープ」と「インテリジェントキーワード分類器」アクティビティ*** を配置・設定することで分類を実行できます。

![分類スコープ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/65607349-1519-2c12-59d7-4749ac840593.jpeg)

ドキュメントのトレーニングは「インテリジェントキーワード分類器」アクティビティの ***「学習を管理」*** のリンクよりおこなえます。

![学習を管理より学習できます.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/424b4dbe-1365-33de-8f53-dc0457b036da.jpeg)

「キーワード分類器」とは異なり、***設定値をマニュアルで修正することはできません。***
ドキュメントを読み込ませることでトレーニングをおこないます。

::: note
キーワード分類器を詳しく知りたい方は次の記事をご参照ください。
https://qiita.com/tomohiroArai/items/07a39515068c7b6e492b
:::

インテリジェントキーワード分類器は***学習結果をローカル（※）に保持します。***
※：{プロジェクトフォルダ}\DocumentProcessing\IntelligentKeywordClassifierLearningFile.json

# 学習結果はどんな内容？

***シンプルに、キーワード毎のスコアを保持しています。***
たとえば、請求書っていうドキュメントを定義して、2枚ほどOCRでサンプルを学習したときのサンプルイメージを以下に貼ります↓↓

![学習量に応じてスコアカウントが増える.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/4d249b50-c8d1-8bd9-467c-dfae90cfbf9f.jpeg)

1ファイル学習後の「請」の字のスコアが「0.75」
2ファイル学習後が「1.5」

1回の学習で得られるスコアについては、手元の結果を見る限り、***確度が高いものが0.7～0.8、低いものだと0.2くらいまで下がります。***

***学習する度に、このスコアはキーワード単位で加算されていきます。***
（上の請求書の例でいえば、100ファイル学習したらスコアは75とかになります。（おそらく））

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/1a230648-7b45-0179-3bb8-867245ddb63f.png)

スコアは***ページ上に出現するのが早い、また出現回数が多い***ものが高くなる（「サブタイトルです。テストです。」という文章の学習結果で「サ」の次が「ト」になっているが、これは「ト」の出現回数が2回のため。「す」も同様。）

# スコアは高ければ高いほどよいのか？

***いいえ！！（答えはNOです）***

![4_請の学習後.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/478a3639-cd12-a323-f7a7-81d20e549c38.jpeg)

タイトルに「請求書」や「請」といった文字を含んで学習した***ドキュメント種類：『請求書』は「サ」の文字のスコアが「1.92」です。
これに対して、ドキュメント種類：『タイトルなし』の「サ」の文字スコアは「0.75」です。***
「請」の字を含まないドキュメントを入力した場合、スコアが優先されるとしたら、ドキュメント種類：『請求書』に分類されるはずですが、正しく『タイトルなし』に分類されます！

::: note
スコアより、***最初に一致したキーワードの順位が高い***ものが優先される
:::

# スコアは低くても、学習されていれば分類されるのか？

***おそらくいいえ！（答えはNOです）***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/c53bff55-c00a-613e-73ec-cf74b4f0352b.png)

『値無関係』というドキュメント種類をつくり、「test」というキーワードを含めて学習させます。***「test」は最低スコアの「0.18」で学習された状態です。***
ここに対して「hogehoge test」という文字を含んだドキュメントを入力します。
すると、「ClassificationResult[0] { }」で分類されないのです！
だがしかし、***「ほげほげテストです。 これでどうなる？？ test」で入力すると分類されるのです！！***
そこで、どのドキュメントにも「テスト」というキーワードは学習させているため、「テスト」で入力してみると分類されないのです！

::: note warn
実際のユースケースでは問題ないとおもいますが、入力ファイルに含まれる***文字数（キーワード数）が10個未満だと学習済みでも分類されない可能性があります。***
:::

# 学習スコア・順位ともに高いが分類されない。。。

まず、デジタル化の結果をご確認ください。
PDFとOCRでは、キーワードの認識単位が異なります。
PDFであれば、およそ単語単位でキーワード認識されますが、OCR（CJK-OCR）では1文字ずつ結果が返却されます。
このため、***「"請","求","書"」が学習済みであっても『請求書』で入力された場合は一致しません。（分類されません）***

::: note
学習済みデータが「"請","求","書"」の様に1文字単位の場合、***「ドキュメントをデジタル化」のプロパティの「PDFにOCRを適用」に「Yes」を指定する***ことで1文字単位で比較することもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/253ab7b6-7130-9f6f-3232-341aa497de45.png)
:::

# さいごに

スコアの計算ロジックの詳細はわかりませんが、およその傾向・特徴などは上記でご理解いただけるかなとおもいます。
インテリジェントキーワード分類器をはじめて利用される方の参考になればと書かせていただきました。
以上 最後までお読みいただきありがとうございます(・ω・)ノ