スポンサードリンク



こんにちは。sinyです。

今回はリクルートテクノロジーズが公開しているA3RTのproofreadingというAPIを使ったAIデモアプリをDjangoで実装してみました。

 

Proofreading APIとは?

以下、概要を引用します。

Proofreading APIはLSTMを利用して文章として怪しい箇所を検知するAPIです。
例えば、"経験や資格や活かせる職場です"という文章に対して"経験や資格<<<や>>活かせる職場です"という形で不自然な箇所を指摘し、その怪しさ度を返します。また、文章として書き換えた方が良さそうな単語も検知をします。

 

まずはどんな感じのデモアプリが出来上がるかこちらをどうぞ。

API KYEの取得

まず、こちらのページからAPIキーを発行します。

リンク先ページに飛んだら以下のボタンからAPIキーを取得しましょう。

APIの使い方

まず最初にproofreadingの使い方を簡単に説明します。

以下のエンドポイントに解析したい文章情報をHTTPSリクエストとして投げると、文章としておかしい部分を判定して結果を返してくれます。

エンドポイントhttps://api.a3rt.recruit-tech.co.jp/proofreading/v2/typo

メソッドはメソッドはGET/POSTの2つが対応しています。

リクエスト時に以下のパラメータが必須になっています。

必須のパラメータ
  • apikey発行したキー
  • sentence:チェック対象となる文字列情報

いくつか任意のパラメータがありますが、今回は以下のパラメータを利用してみます。

任意のパラメータ
  • sensitivity:チェックの感度(low/medium/highの3つ)
    ※未指定時はmedium

とりあえずどんな感じの動きになるか、コマンドベースで確認してみます。

私の得意分野は画像処利と自然言語処理です。」という文字列をAPIで投げて戻り値を確認してみます。

「画像処」の部分が明らかに誤った文章なので、この「」の部分を誤りと判定してくれることを期待します。

以下のPythonコードでリクエストを投げて結果を取得してみます。

 

実行結果は以下のようになります。

 

いろいろと戻り値がありますが、ポイントとなる値は以下の通りです。

戻り値の概要
  • status :0(文章に異常なし)、1(文章に異常あり) 
  • inputSentence:リクエストで指定した文字列
  • normalizedSentence:チェック用に正規化された文
  • checkedSentence:チェック後の文。指摘箇所を<<>>で示してくれる。
  • alerts:文章の異常個所の情報を格納した配列
    ※alertsの中には以下の情報が格納されている。
    ーpos :指摘箇所。文の先頭からの文字数
    ーword: 指摘文字
    ーscore :指摘した単語の疑わしさを示す指標(0~1) 1に近いほど疑わしい。
    ーsuggestions: 指摘箇所を置き換える候補。より自然な文字から順にlist形式で格納。

 

 

上記の実行結果の例で説明すると、

10文字目の「」が87%の確率で疑わしく、「理→分→方」の順で正しいと思われる単語を提案してくれています。

Proofreading APIを使ったDjangoアプリの実装手順

それでは、Proofreading APIを使ってDjangoアプリを作っていきます。

Djangoの細かい説明は割愛していますので、基礎を理解できていない場合は以下の記事等を参考にしてみてください。

モジュールのインポート

まずは、必要なモジュールをインポートします。

 

django-bootstrap4はBootstrapを適用するために、django-widgets-improvedはformのclassにbootstrapのものを適用するために使います。

Djangoのプロジェクトとアプリケーションは適宜作成しておきましょう。
※今回はアプリケーション名をappとします。

settings.pyのカスタマイズ

以下の通りインポートしたモジュールとアプリケーションを追加しておきます。

 

テンプレートのパスをプロジェクトフォルダの直下に指定します。

 

日本語に変更しておきます。

 

settings.pyのカスタマイズは以上です。

URLパターンの設定

プロジェクト直下のurls.py

アプリケーション直下のurls.py

 

フォームの設定(forms.py)

 

 

2つのフォームを定義します。

1つ目は、解析する文章を入力するフォームをforms.Textareaを使って定義します。
2つ目は、チェックの感度(低、中、高)をリスト形式で選択できるようにするためforms.ChoiceFieldを使ってフォームを定義します。

 

utils.pyの作成(リクエストを投げる部品)

 

 

Apiクラスを定義して2つのメソッドを定義しています。

  • getメソッド
    フォームから解析文章とチェック感度のパラメータを受け取りリクエストを投げ、解析結果を戻します。
  • __trans_wordメソッド
    APIから返ってきた指摘箇所「<<指摘文字>>」の部分をハイライト表示させるためのhtmlタグを設定するメソッド
    指摘文字に以下のようなタグを設定してくれます。

    <span class="mark font-weight-bold text-danger" style="background-color:yellow">指摘文字</span>

 

※上記の__trans_wordメソッドなどは以下の記事がとても参考になりました。
※本記事内でもいくつかのコードを引用させて頂いております。

 

ビューの設定(views.py)

 

 

demo関数内でutils.Api()クラスからインスタンスを生成します。

 

フォームから解析文章(textone)とチェック感度(sensitivity)の値を以下の部分で取得します。

 

api.getメソッドの引数に解析文章とチェック感度を与えてProofreading APIを使ってリクエストを投げます。
解析結果と提案内容が返ってくるのでそれぞれrets,suggestions変数に格納しておきます。

 

後は、取得した情報をテンプレートに返すだけです。

 

テンプレートの作成

 

base.html

普通のHTMLなので特段難しい点はないかと思います。

demo.html

 

ベーステンプレート(base.html)とbootstrap4、widget_tweaksを利用するために以下を設定します。

 

form.<フォーム名称>.labelでforms.pyで定義したフォームのラベル情報を表示します。

 

以下はwidget_tweaksの機能で、form.<フォーム名称>|add_class:"form-control"}のように書くと、指定したフォームにCSSクラスを設定してくれます。

 

htmlタグを含む情報をWEBページに反映させるためにsafeを使っています。

 

指摘文字に対する提案内容を表示させる部分です。

 

忘れずにマイグレーション(python manage.py migrate)しておきましょう。

 

http://127.0.0.1:8000/app/demo/ にアクセスすると以下のような画面が表示されます。
解析したい文章を入力し、チェックの厳密さを選択後に「実行」ボタンを押します。

以下のような解析結果が表示されます。
誤っていると思われる部分を背景黄色、赤文字でハイライト表示してくれます。
また、指摘文字に対するより正解と思われる候補を3つ提示してくれます。

 

まとめ

今回は、リクルートテクノロジーズが公開しているA3RTのproofreadingを使って簡単なAI機能を持ったWEBアプリケーションをDjangoで構築しました。

AIのロジック自体は準備されているAPIを利用するだけなので、比較的簡単にWEBアプリを構築することができました。
その他、実際に利用してみた所感は以下の通りです。

  • 明らかに間違っている変換ミスなどはしっかり検知してくれるが、すべての誤りを検知してくれるわけではないので、APIの仕様をしっかり理解したうえで利用する必要がある。
  • 複数単語の組み合わせとして考えると意味がちょっとおかしいが、それぞれの単語として意味が通じているようなケースではエラーとして指摘してくれないケースが多かった。
  • より望ましい候補を提案してくれる機能の精度はそこまで高くない印象を受けた。(自分で見て考えたほうが正確だし早い)

 

 

 

おすすめの記事