8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UiPath (ja) Advent Calendar 2019

Day 25

【UiPath】RPA×AIを活用して個別のニーズに対応することをめざす(チャットボット、感情分析)

Last updated at Posted at 2019-12-24

#0.はじめに
はじめまして、少し傾斜の傾いた安普請のアパートの17平米に潜む3年目SEです。

UiPathにはじめて関わったのは2017年の12月で、1年目のころ。
Orchestrator(以下OC)導入プロジェクトで、バージョンはたしかUiPath2016.4~2017.1でした。

当時は詳細な導入手順、ステップバイステップ導入ガイドのようなものはなく、公式ガイドとフォーラムでAWSのEC2上にOCを構築する方法について試行錯誤していました。

其の後、プロジェクトを離脱しましたが
OCとElasticsearch/Kibanaの連携などさわる機会に恵まれました。

最近は、新人のOR黎明期にナレッジを書き溜めなかったことをすこし惜しんだり、
久しぶりにさわるUiPathの機能の変革に衝撃を受けたり、
コグニティブ・オートメーションアクティビティを触ったりするのが、UiPathとの接点です。

Ai.Computer Vision Activityのセットアップでつまづいた時の図(UiPathのバージョンが古かった)
image.png

なお本記事の類似に以下の記事が有ります。
https://qiita.com/tyoko/items/5ac66dd903b6cc8ae773

#1.本記事で書くことのあらまし

RPAに限らずAI、つまりはML領域でできることをさがすと

「①所感を感情分析して、ニュートラル~ネガティブであれば検知してアラートあげてくれると良いよね」
「②自分の選好にあうニュースをセレクトして、流してくれたら良いよね」
と普段の会話から、ニーズを発見することがあります。

RPAの利点で、マクロと異なるのはシンプルなUIゆえの引継ぎやすさと作成の容易さで、一度作成するとマクロと比べて保守もしやすい。
よって上述の要求に対してRPAはシーズになります。

全体的に、あるいは部分的にそれらを実現する方法を探る(Tipsレベルで書き留める)のが本記事の趣旨です。

ところで先日、Fintechのカンファレンスに参加したところ、2020を占う8つのトレンドのうち、
"行き過ぎたAIの是正"が2020年のトレンド候補として取り上げられていました

最近ではAI採用によるモラル低下が取り沙汰されていますが、ハイパーパーソナライゼーションによる表裏が、来年も続きそうです。

個人的には個のニーズに対応できるのがAIの美点と考えていて、
私生活でもSELFというアプリで新宿二丁目のデータを学習したユキオという人工知能エンジンとやりとりしても、ツッコミが個別具体的な様をみるとそう思います。
AIは学習次第でevilになるケースもありますが、モラルを学習できるのであればAI上司に期待できるところです。

#2.実装

##2.1. 環境準備

###2.1.1 インスタンス作成

※端末のライセンスが切れてしまったので、AWSのEC2上でCommunity版を稼働させます。

Win10の任意のAMIを選択しています。
・AMI:Microsoft Windows Server 2019 Base-2019-11-13-AutogenByAWSMP
・Instance Size:t2.micro
・total memory:1GB
・UiPath Community Edition 2019.5

作成したEC2に接続してUiPathを起動。[Activate]します。

image.png

また[Machine]接続の為、hostnameを確認します。

image.png

###2.1.2 ロボット接続

OCのデモサイトでOC側の設定をします。[MACHINES]ではさきほど確認したhostnameで設定します。

image.png

※デモサイトの新規登録の方法は⇒他の方のサイトをご参照ください。

Robotの登録についても画面上でできるのですが
Orchestrator APIに慣れるため、APIを叩いて登録します。
※その前に、[Environment]が必要とorchetrator API referenceに載っているため、[Environment]を追加します。
image.png

PostWomanを使用して、OrchestratorのAPIを叩きます。
image.png
※このときPostWomanのProxy設定をenabledにします。disableではPOST送信できないようです。
[12/25現在]robotの作成確認ができず、手動で追加しました。

クライアント側にもどります。
OC側ロボット作成時に発行された[Machine Key]をUiPath Robotに入力。

image.png

接続準備は完了です。

パッケージのダウンロードも進めておきます。
image.png

##2.2ネガティブな文体を検知し、slackに送る

アウトラインは以下です。 以下、ⅳ:に焦点を当てます。

ⅰ: 未読メールで日報が件名に入ってるものを検出
ⅱ: [所感]の文字列をアンカーに、所感の内容を取得
ⅲ: 自然言語処理解析にかけて、極性 ポジ(+) ネガ(-) ニュートラル(±)のスコアを算出
ⅳ: 基準値以上のネガ(-)スコアであれば、slackに通知

ii):は社内ポリシーの関係で、UiPathでさくっと実現するには厳しく。GASで雰囲気だけ参考に。
※Googleアカウントの2段階認証の設定が外れていると、アプリパスワードが発行できず、
gmailのアクティビティが使用できない。
代替として、GASでGSSに文章を溜めることを考えましたが、(12/25現在)未試行。

件名マッチング
function Function(){
  // 件名のマッチング
var regBiz = new RegExp('*日報' + '.*?')

  // 最大スレッド数
  var MAX_THREADS = 30;// 
 
  var cnt = 0;  
// 受信トレイのメッセージを取得する  
var threads = GmailApp.getInboxThreads(0, MAX_THREADS);  
Logger.log("len="+threads.length); 
for (var i = 0; i < threads.length; i++) 
{    var thread = threads[i];  
 var subject = thread.getFirstMessageSubject();   
      if (!subject.match(regBiz)) 
        continue;   
      // スレッド内のメッセージを取得する   
        var messages = thread.getMessages();    
        var msg = messages[messages.length - 1];   
      // 未読のメッセージのみ処理する    
        if (!msg.isUnread()) continue;    
          msg.markRead(); // 既読にする    
         // ネットから情報を取得する   
         try {      // JSONデータを受信    
           var text = UrlFetchApp.fetch(apiURI).getContentText();     
           var obj = JSON.parse(text);     
           // 値を取り出す      
           var title = obj["title"];    
           var desc = obj["description"]["text"];   

ⅲ: UiPathでは以下のアクティビティがよさそうです。
image.png

あるいはSatnfordのNLPアクティビティが使えるので、
以下のコードを書かなくとも実装が可能です。

NLP
package test;
import java.util.List;
import java.util.Properties;

import edu.stanford.nlp.ling.CoreAnnotations.NamedEntityTagAnnotation;
import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation;
import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation;
import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;

/**
 *  ner sammple
 *
 */
public class NERSample {
    public static void main(String[] args) {
        String text = "I ask everyone to not rush to judgment and allow the investigation to be completed,"
                + " Orange County Sheriff Jerry Demings said at a news conference in Orlando.";

        Properties properties = new Properties();
        properties.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner");
        StanfordCoreNLP coreNLP = new StanfordCoreNLP(properties);
        Annotation annotation = new Annotation(text);
        coreNLP.annotate(annotation);
        List<CoreLabel> labels = annotation.get(TokensAnnotation.class);
        for (CoreLabel label : labels) {
            System.out.println(label.get(TextAnnotation.class) + "\t"
                    + label.get(NamedEntityTagAnnotation.class));
        }
    }
}

ⅳ:slackに通知の準備として、下記の[Bot User OAuth Access Token]を控えます。[Client ID]やその他もろもろのTokenが載っている画面ではないので注意します。
https://docs.uipath.com/studio/lang-ja/docs/enabling-gmail-for-email-activities

image.png

UiPath⇒Slackの通知に、Paul SealさんのSlackBotMessagesを使用します。

image.png

Send Slack messageアクティビティのパラメータは最低限Token([Bot User OAuth Access Token]持たせる)とchannel or mailaddress & Messageの入力が必要のようです。
image.png

image.png

slackからRobotを起動するには、
POST https://platform.uipath.com/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs
を改良すればよさそうで、outgoingwebhookを使用し、
slack⇒OC⇒slackの流れが実現できそうですが、今回はここまでにします。

#あとがき

UiPathの機能は驚くほど柔軟なので、
slackからOrchestratorを呼ぶ手順が充実することで、チャットアプリとRPAとの連携のように、個人の用途にあったRobotがより浸透するというのが本記事試みての実感でした。

#参考
[1]https://www.cresco.co.jp/blog/entry/11387/
[2]https://qiita.com/hiroeis/items/c48c23f09010467b8b90
[3]https://dev.classmethod.jp/cloud/aws/analysis-sentiment-using-analysis-jobs-on-amazon-comprehend/
[4]http://arakilab.media.eng.hokudai.ac.jp/~ptaszynski/data/2011.02.24_HRC-Symposium.pdf
[5]https://gallery.uipath.com/packages/UiPathTeam.SendSlackMessage.Activities/
[6]https://docs.uipath.com/activities/lang-ja/docs/google-vision-text-detection
[https://gendai.ismedia.jp/articles/-/65769?page=4]
[7]https://www.businessinsider.jp/post-200122
[8]https://stories.mlh.io/make-robots-automate-your-life-or-at-least-your-email-d728342257e4
[9]https://docs.uipath.com/studio/lang-ja/docs/enabling-gmail-for-email-activities
[10]https://qiita.com/toshiyuki_tsutsui/items/604f92dbe6e20a18a17e
[11]https://uipath-ai-expo.jp/
[12]https://qiita.com/miriwo/items/11b717dfc501b5b4e286

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?