PIPED BITS

最新トピック

機械学習「A3RT」でメールの構成チェックツールを作成!

A3RT(アート)

最近「AI」「機械学習」という言葉をよく耳にします。
しかし、「作るのにどれだけ工数かかるの?」「ロジックは?」「データをどうやって収集する?」…etc
と技術の足りない私には「やりましょう!」と即答するにはハードルがとてもとても高いです。

2017年3月16日、株式会社リクルートテクノロジーズが今までリクルートグループ内に限定公開していた「A3RT(アート)」のAPIを無料公開しました。

“「活きた」AI・機会学習のノウハウ、詰めました”


公開されたAPIは6つ。

1.Listing API
リスト生成をするためのAPIです。
ユーザーの行動ログを元にアイテム間の相関リストや、各ユーザーへのレコメンドリストなどを生成することが出来ます。

2.Image Influence API
画像と画像に対応する点数を用意すると、未知の画像が自分好みかどうかを点数で把握できるモデルが作成可能です。

3.Text Classification API
Text Classification APIはConvolutional Neural Networkを利用して、文章の分類を行うAPIです。

4.Text Suggest API
Recurrent Neural NetworkやLSTMと呼ばれる構造の言語モデルを利用した、文章の自動生成および入力補助を実現するAPIです。

5.Proofreading API
Proofreading APIはLSTMを利用して文章として怪しい箇所を検知するAPIです。

6.Talk API
Talk APIはChatbotを作成するためのAPIです。

[公式HPより抜粋]
https://a3rt.recruit-tech.co.jp/product/

今回はスパイラル®とコラボレーションできそうな「Proofreading API」を利用して、メール文面の構成チェックツールを作成してみました。

【制作したもの】

<流れ>

1.API KEY発行

 各PRODUCTのページより「API KEY 発行」をクリックすると
 同意画面と「API KEY」を受け取るメールアドレスを入力する画面が表示されます。

 入力したメールアドレス宛にメールが飛ぶので、表示される説明に沿って「API KEY」をGETしてください。

2.スパイラル管理画面より、以下を作成。

(1)文面チェック履歴トランザクションDB
   チェック履歴を残すためのDBです。
   通常DBでもトランザクションDBでもどちらでも構いません。
   <フィールド項目>
   ・登録日時(登録日時)
   ・チェック文字列(テキストエリア(4096 bytes))
   ・チェック感度(セレクト / 1 : low、2 : medium、3 : high)
   
(2)文面チェックフォーム
   ※今回はサンキューページでDBへ登録された値を取得し、
   「Proofreading」を実行します。


3.「Proofreading API」呼び出し
文面チェックフォームのサンキューページで「Proofreading API」を呼び出します。

※「エンドポイント」「リクエストパラメータ」「レスポンスフィールド」の詳細は以下を参照ください。
https://a3rt.recruit-tech.co.jp/product/proofreadingAPI/

<!-- SMP_DYNAMIC_PAGE DISPLAY_ERRORS=ON NAME=SAMPLE_A3RT_THANKS -->
<?php

// エンドポイント
$url = "https://api.a3rt.recruit-tech.co.jp/proofreading/v1/typo";
// 【変更箇所】API KEY
$apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// チェック文字列
$sentence = $SPIRAL->getContextByFieldTitle("sentence");
// チェック感度
$sensitivityIndex = $SPIRAL->getContextByFieldTitle("sensitivity");
if($sensitivityIndex == 1){
    $sensitivity = "low";
}else if($sensitivityIndex == 2){
    $sensitivity = "medium";
}else{
    $sensitivity = "high";
}
// 引数
$postdata = array(
        "apikey"        => $apikey,      // APIキー
        "sentence"      => $sentence,    // チェック対象となる文を入力します
        "sensitivity"   => $sensitivity // チェック感度を3段階で指定します。highが誤字の指摘が多く、lowは少なく、mediumはその中間です。
);

// リクエスト
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$result = curl_exec($ch);
curl_close($ch);

// デコード
$resultDec = json_decode($result, true);

// 処理ステータス(画面表示の処理に使用します)
$status = $resultDec["status"];
// 指定内容を格納した配列(画面表示の処理に使用します)
$alerts= $resultDec["alerts"];

?>



4.結果を画面に表示
「Proofreading API」を実行した結果を画面に表示します。

※「エンドポイント」「リクエストパラメータ」「レスポンスフィールド」の詳細は以下を参照ください。
https://a3rt.recruit-tech.co.jp/product/proofreadingAPI/

<h1>【A3RT】文面チェックフォーム</h1>

    <div class="smp_tmpl">
        <dl class="cf">
            <dt class="title">
                入力文字列
            </dt>
            <dd class="data ">
                %val:usr:sentence%
            </dd>
        </dl>
        <dl class="cf">
            <dt class="title">
                指摘有無
            </dt>
            <dd class="data ">
                <?php
                switch ($status) {
                    case 0:
                        echo '指摘なし';
                        break;
                    case 1:
                        echo '指摘あり';
                        break;
                    default:
                        echo 'エラー('.$status.')';
                    break;
                }
                ?>
            </dd>
        </dl>
<?php
if(!empty($alerts)){
    foreach ($alerts as $key => $alert){
        $num = (int)$key + 1;
        echo '<dl class="cf"><dt class="title">指摘内容'. (int)$num.'</dt>';
        echo '<dd class="data ">';
        echo '<p class="subTitle">【指摘箇所を<<>>で示した文】</p>'.htmlspecialchars($alert["checkedSentence"]).'<br>';
        switch ($alert["alertCode"]) {
            case 0:
                $alertContent = "やや疑わしい単語です。もっと良い表現がある可能性があります。";
            break;
            case 1:
                $alertContent = "疑わしい単語です。あまり使われない表現であったり、珍しい単語である可能性があります。";
            break;
            case 2:
                $alertContent = "かなり疑わしい単語です。誤字の可能性が高いです。";
            break;
            default:
                $alertContent = "";
            break;
        }
        echo '<p class="subTitle">【指摘単語】</p>'.htmlspecialchars($alert["word"]).'<br>';
        echo '<p class="subTitle">【指摘の説明】</p>'.$alertContent.'<br>';
        echo '</dd></dl>';
    }
}?>

</div>



今回作成した構文チェックツールは以下よりお試しいただけます。

https://www.pi-pe.co.jp/regist/is?SMPFORM=lfoj-sfrbt-2129c242d1e1c0a61c7ec7204ce3815c
※個人情報を特定する情報の入力はお控えください。

【所感】

簡単に「機械学習」を体験できます!
厳しい指摘が多いため、レスポンスの「rankingScore(指摘した単語の疑わしさを示す指標です。0〜1の範囲の値をとり、1に近いほど疑わしい事を意味します。)」の値が、例えば0.8以上の結果を画面に表示する、等の対応を取ってもいいかもしれません。

今公開されるAPIでは「500文字まで」とチェック文字数の制限がありますが、
今後、ブラウザからファイルアップロードできるようになるそうですので、メール文面以外のコンテンツも構文チェックできるようになれば、使い方も広がるように感じました。

【注記】
※必要最低限の手順のみ公開しております。要件に合わせて変更してください。
※現時点の仕様を記載しております。仕様変更による動作保証はしておりません。ご了承ください。

関連記事
スパイラル® https://www.pi-pe.co.jp/spiral-series/spiral-suite/

AI分析で届けたい情報と顧客ニーズをマッチングし、アプローチを最適化 https://www.pi-pe.co.jp/miteshiru/article/pb_20170904-1/

mautic is open source marketing automation
お役立ち情報はこちら メルマガ