【UiPath】Communications Miningのモデルトレーニング方法

# はじめに
アドベントカレンダー8日目の記事です。

https://qiita.com/advent-calendar/2023/uipath

Communications Miningについて書こうと思います。

Communications Miningは、AIの1つである自然言語処理（NLP）を用いたUiPathの製品で、メールやチケットなど自然言語で書かれたコミュニケーションデータからビジネス上の洞察を発見するものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/2f40aaae-767a-02e8-7cfe-d30b92d552e7.png)

製品の概要や検証してみた感想等については、UiPath Friends Festival 2023で喋っているので、Youtubeのアーカイブをご覧ください。

https://www.youtube.com/watch?v=nNtXLFh2KW0

元々はRe:inferという製品でしたが、2022年にUiPathが買収し、UiPath製品群に取り入れたものになります。
グローバルでは、バージョン2022.10よりCommunications Miningとしてリリースされました。一方で日本向けのリリースに関するアナウンスはありませんでしたが、2023年11月15日に日本向けにリリースされたことが正式にアナウンスされました。

:::note warn
Communications Miningの製品自体の日本語翻訳は未対応です。ドキュメント、アカデミーも日本語翻訳はしばらく待つ必要があります。また、使用可能なリージョンはEUのみとなります。
日本向けのリリースのアナウンスですが、Communications MiningのNLPモデルに日本語をインプットできるという意味みたいです。そもそも多言語対応モデルのためアナウンス前から日本語インプットは可能でしたが…
:::

今回の記事ではCommunications Miningの使い始めの部分（MLモデルのトレーニング）にフォーカスします。


# つかうもの
※クラウド環境は2023年12月時点のもの
Automation Cloud(Communications Mining) Enterprise版


# ステップ1. トレーニングデータ投入
まずはCommunications Miningにてプロジェクトを作成します。デフォルトでプロジェクト（DefaultProject）が1つ作成されていますが、このプロジェクトはAutomation Cloudのすべてのユーザと共有されます。Communications Miningで使用するデータはメールなど業務上の機密を含んでいることが多いと思うので、DefaultProjectは使用せず、業務毎に新規プロジェクトを作成することをお勧めします。

プロジェクトは以下の通り作成します。 **導線が非常に分かりにくいので改善お願いします！！**
Administrationメニュー（歯車のアイコン） > Manage Accessタブ > All projectsをクリックし、「+New」ボタン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/e7235b62-6fd9-5c2a-0589-a75e5f79dccc.png)

次にデータセット（Dataset）を作成します。データセット1つにつき、MLモデルが1つ作成されます。日本語認識の場合は「Model family」は「Multilingual」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/83ebf9b9-dd39-79c6-3e68-470c7912efa2.png)

さらに次はソース（Source）を作成します。ソースはMLモデルに投入するトレーニングデータと同義です。1つのデータセットに複数のソースを関連付け（データ投入）することが可能なので、ラベル別のトレーニングデータ単位でソースを作成しても構いません。日本語認識の場合は「Language」は「Multilingual」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/adfcd515-f615-c716-22b1-e7f7bba52ef5.png)

最後にソース対して、トレーニングデータをアップロードします。データはCSVファイルとなります（API接続でデータを取り込むことも可能です）。必要な列は以下の通りです。

<dl>
  <dt>必須項目</dt>
  <dd>ID：　一意になるキー項目</dd>
  <dd>タイムスタンプ：　メールだと受信日時などに相当するもの</dd>
  <dd>メッセージ：　メールだと本文に相当するもの</dd>
  <dt>任意項目</dt>
  <dd>（メールの場合）件名</dd>
  <dd>（メールの場合）送信元</dd>
  <dd>（メールの場合）宛先</dd>
</dl>
など

CSVファイルを指定すると自動的にフォーマットを読み取り、列のマッピングを行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/6bf34d78-8d17-eb9c-b233-303493c3f7b0.png)

:::note warn
CSVのフォーマットが正しくないとエラーが出ます。特にExcelでCSVファイルを修正した場合、最後1行が空列として認識されてしまうので改行を削除しないとダメです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/d174c363-9c15-ba11-5afc-da97a55a67c8.png)
:::


# ステップ2. ラベルとエンティティの定義
Settings > Labels & Entitiesからラベルとエンティティを定義します。ラベルは階層化することも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/a8d262fa-0576-433d-fc6e-ed112ea79e83.png)

トレーニング済みのものをベースに作成することもできます。期間・コストの低減が期待できますが、おそらく日本語でトレーニングしたものではないと思われるため、狙い通りの認識精度を出すのは難しいかもしれません。日本語認識をする場合は「None (train from scratch)」を選択するのがベターかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/e809c55a-eb67-ccf1-ad9c-ab829f2f8ece.png)


# ステップ3. トレーニング
:::note info
本記事内のスクリーンショットに映るメールは、すべて生成AIによって作成したトレーニングデータです。会社名など実在するものではありません。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/1aa4c3ed-7aba-f567-4e46-88b8683f80a6.png)

トレーニング前のMLモデルは未だ予測をしませんので、投入したトレーニングデータに対して、手動でラベリングとエンティティ抽出を行ってあげます。

ラベルは＋マークをクリックし、適切なラベルを与えてあげます。
エンティティは文字を範囲選択し、適切なエンティティを割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/27621e58-449f-2208-b6c9-559b8f6885e1.png)

いくつかのトレーニングデータでラベリングを行っていくと、MLモデルが自動的に学習をはじめます。画面右上の「Updating」がクルクル回っているときは学習中という意味です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/6a58fee4-3f9a-c7c2-918b-440388d2da8b.png)

定義したラベル・エンティティにも寄りますが、だいたい30件くらいをラベリングすると、今度はCommunications Miningが自動的にラベルとエンティティの予想を始めてくれます。ただし、この時点の精度は期待できません。見当違いの予測をすることも多いので、精度が上がるまで手作業で修正していきます。そのとき投入したデータが足りなくなったら、適宜追加データを投入します。
個人的な印象ですが、日本語のエンティティの場合、なかなか認識精度が上がらない気がします。下のスクショだと会社名だけトレーニングデータの量は多いですが、F1スコアが低い状態になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/60d86bb1-b14b-eb56-822b-b37f56fd7704.png)

Validationタブに現在のラベルとエンティティのスコアと精度を上げるためのアドバイスが出るので、それに従いながらスコアを上げていき、ある程度のレベルに達したら一旦のトレーニングは終了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/2495214f-0808-5d70-dd6a-6a6002ab90d9.png)

モデルは随時学習されるので、バージョンも次々と上がっていきます。現在のバージョンはModelsタブから確認できます。ピンを立てることで、テスト中・本番稼働中のバージョンを区別することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/c09a9e27-6731-3c07-9646-91c94abb88ca.png)


# おわりに
いかがでしょうか。一般的にモデルトレーニングは難しそうという印象がありますが、Communications MiningではAIに関する専門知識がなくてもトレーニングできるように工夫されています。
モデルトレーニングの流れは以上ですが、このような業務特化したAIを使った製品は、1度トレーニングしたら終わりではなく、定期的にスコアを確認し下がっていれば再トレーニングするといった運用が必要になります。
また、Communications Miningで使用されているNLPモデルは、日本語認識できるようになってはいますが、やはり日本語の部分だけ苦戦しました。この辺りも日本語トレーニング済みのラベル・エンティティが出てくることで解消していくのでしょうか。期待したいです。

次回以降は、トレーニング済みのモデルを使ってUiPath Robotと連携したオートメーションについて書こうと思います。