ブログ書いてます。もう4年ほどになります。
ブログ記事を1つ作るにも割と時間がかかるので、忙しくなるとブログの更新が滞ります。
写真撮って加工して文章を書いて、記事の形にしたらチェックして……。
そう、このチェックが面倒!特に文章。誤字脱字。稚拙な文章、読み返せば書き直したくなってまたチェック。この繰り返しでございます。
面倒になって勢い公開すると、あとで読み返した時に誤字脱字に気付いて凹んだり。
自分が悪いのはわかっているのですが、この煩わしさをどうにか効率化できないかと悩んでいたところで試したくなったのが人工知能。
人工知能先生なら僕の稚拙なミスもバシッと指摘いただけるはず。
そんなこと言っても人工知能なんて到底作れるものじゃあるまいし……。
あ、そういえばリクルートさんが人工知能(A3RT)を無料公開していたな……。
“文章として怪しい箇所を検知するAPI”なんて希望通りのProofreading APIなんてのがあるじゃないか……。
なんてとこからブログのための文章誤字脱字検知機能が作れないものかと試してみたのでした。
A3RT(アート)ってなんでしょ

リクルート提供のA3RT。”アート”と読むそうです。
じゃあA3RTって何?
昔Twitter頑張ってた頃に「What is Art?」と呟いたら、海外の方から多数のご意見をいただいたのを思い出しますが、そのアートとは違い答えは明確です。
A3RT(アート)は「ANALYTICS & ARTIFICIAL INTELLIGENCE API VIA RECRUIT TECHNOLOGIES」の略称です。
A3RTは機械学習のなかでもDeep Learningなどに代表される、いわば人工知能とよばれる分野のロジックをひとつのブランドで統一・整備をし、社内へ展開するためにプロジェクト化されたソリューションの総称です。 https://a3rt.recruit.co.jp
略称にしないと長くて読むのすら大変ですが、リクルートがグループ内で開発と活用を進めてきた「機械学習」「Deep Learning」にまつわるサービス群をAPIで無料提供してくれているわけです。
外向けに公開しているのは、多種多様なデータパターンを蓄積するためでしょう。サービスの向上につながりますからね。
公開されているAPIは下記。
- Listing API
リスト生成をするためのAPI - Image Influence API
画像の”影響度”を測り、多くの人に注目されやすい画像の判別に利用できるAPI - Text Classification API
Convolutional Neural Networkを利用して文章の分類を行うAPI - Text Suggest API
LSTMと呼ばれる構造の言語モデルを利用した文章の自動生成および入力補助を実現するAPI - Proofreading API
LSTMを利用して文章として怪しい箇所を検知するAPI - Talk API
Chatbotを作成するためのAPI - Image Generate API
Deep Convolutional Generative Adversarial Networks(DCGAN)の技術を用いてオリジナルの画像を生成するAPI - Image Search API
画像とテキストの相互検索API - Text Summarization API
文章要約を行うAPI - SQL Suggest API
日本語の質問文をSQLに変換するAPI - Named Entity API
Conditional Random Fields(CRF)やRecurrent Neural Network(Bidirectional LSTM)と呼ばれる機械学習手法を組み合わせることにより固有表現抽出機能を実現したAPI
この中のProofreading APIが今回の目的と合っているようなので、試してみることにしたのです。
文章として怪しい箇所を検知するAPI、その実力はいかがなものか。
A3RTのProofreading APIを使ってブログ用の文章誤字脱字検知機能を作ってみた

さて、今回作りたいのはブログ用の文章誤字脱字検知機能。
まだAPIの質もわからないので、まずは文章を入力したら、怪しい箇所を返してくれるような簡単なものを作ってみることに。
Proofreading APIはLSTMを利用して文章として怪しい箇所を検知するAPIです。
例えば、”経験や視覚を活かせる職場です”という文章に対して”経験や <<視覚>>を活かせる職場です”という形で不自然な箇所を指摘し、その怪しさ度を返します。また、文章として書き換えた方が良さそうな単語も検知をします。
今回提供するモデルでは求人系の文章を学習データとしているため、是非近いドメインの文章をインプットにして試してみてください。 https://a3rt.recruit.co.jp/product/demo/proofreadingAPI_demo2/typo_detect.html

作ってから気付いたわけですが、「求人系の文章を学習データとしている」そうです。思いっきり異なる分野ですね。
説明書読まないタイプです、はい。
使い方は簡単で、API利用のためのAPI KEYを発行してもらうだけ。
しかも必要な情報はE-mailアドレスのみです。簡単。
<?php
$post_flag = false;
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$post_flag = true;
$url = "https://api.a3rt.recruit-tech.co.jp/proofreading/v2/typo";
$apikey = "API KEY";
$sentence = str_replace(array("\r\n", "\r", "\n", " ", " "), "", @$_POST['text']); //入力文章
$sensitivity = @$_POST['sensitivity']; //チェック感度(low、medium、high)
$postdata = array(
"apikey" => $apikey,
"sentence" => $sentence,
"sensitivity" => $sensitivity
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$curl = curl_exec($ch);
curl_close($ch);
$results = json_decode($curl, true);
/**
* エラー箇所にスタイル適用
*/
$alerts = @$results["alerts"] ?: '';
$checked_sentence = htmlspecialchars($results['checkedSentence'], ENT_QUOTES);
$checked_sentence = str_replace(array('<<'), '<span class="error">', $checked_sentence);
$checked_sentence = str_replace(array('>>'), '</span>', $checked_sentence);
/**
* 誤字スコアからコメント生成
*/
function get_alert_text ($score) {
$text = '';
if ($score > 0.7) {
$text = "誤字の可能性: 大";
}
elseif ($score > 0.3) {
$text = "誤字の可能性: 中";
}
else {
$text = "誤字の可能性: 小";
}
return $text;
}
/**
* ステータスコードからコメント生成
*/
$status_code = array(
"0" => "正常応答(指摘なし)",
"1" => "正常応答(指摘あり)",
"1000" => "APIキー未指定",
"1001" => "APIキーが見つからない",
"1002" => "退会済み",
"1003" => "アカウント未承認",
"1010" => "サーバが見つからない",
"1011" => "サーバ設定エラー",
"1030" => "アクセス拒否",
"1400" => "リクエストパラメータが不正",
"1400" => "リクエストパラメータが不正 (sentenceがUTF-8でない)",
"1404" => "指定したオブジェクト見つからない",
"1405" => "メソッドが正しくない",
"1413" => "リクエストパラメータの値が長すぎる",
"1500" => "サーバ処理中に想定外のエラーが発生",
);
}

APIページに丁寧なリファレンスがあるので利用も簡単。
PHPでcURL関数を使ってAPIを叩いてみました。上記の他にはフォームを作ればOK。
実際に作った文章誤字脱字検知フォームがこちら
さて、実際に使ってみた結果のスクショが上記画像。
結論としては、実用ではNG。チェック感度がlowでも、固有名詞なんかで度々誤字の可能性大との指摘がでます。
色々試していると、脱字なんかも通っちゃったり。
まあ、そう簡単にいくものではないのは承知の上ですが。
まとめ
リクルート提供のA3RT。
「機械学習」「Deep Learning」にまつわるサービス群のAPIですが、実用となるとまだまだ厳しい面がありそうです(Proofreading API以外のAPIは試していませんが……)。
リクルート社内では誤字脱字をProofreading APIでチェックして工数を大きく減らしている……なんて噂も耳にするので、当然ながら公開しているものと社内利用のものでは質に差があるのでしょうね。
ブログ記事の校正が自動でおこなわれるという夢はいつになることやら(笑)


コメント
突然失礼いたします。
HTMLの記述はどのような記述になっているのでしょうか。
https://islog.jp/proofreading/
こちらのソースを確認いただければと思います。