誤字脱字チェックはAIにお任せ!?文章校正AIを作ってみた【デモ付き】

このエントリーをはてなブックマークに追加

みなさんは、文章を書くときの誤字脱字チェック、どうしていますか?

Ledge.ai編集部でも、正規表現を使い半自動で校正をしているのですが、取りこぼしもあり、後から気づくことも。ルールベースだけでは、助詞の間違いや、脱字やタイプミスなどには対応できません。

ルールベースと手動ではすべての誤字をカバーしきれないので、AIをつかって日本語の校正を自動化できないかチャレンジしてみました。

校正とは
業界によって定義は異なりますが、誤字・脱字・タイプミス・変換間違いがないか、助詞が間違っていないかなど、文章が日本語としておかしくないかをチェックすることです。

結論からいうと、ある程度検出はできているものの、誤検出も多かったです。
パターンとしては、ノイズが混じっていたり、脱字してしまっているような文章が、比較的うまく検出できているようでした。

ただし、今回はLedge.aiだけの文章で学習をおこなったもの。AIの精度はデータ次第なので、データを増やせば、精度向上が期待できます。

※今回開発したAIは、公開デモも用意したので、是非試してみてください。

精度はこんなカンジ。公開デモも用意しました

さっそく結果からみていきましょう。精度はこのような形。

正しく検出できた例

誤って検出している例

誤検出もありますが、正しく検出できているものもありますね。

今回学習させたデータは、Ledge.aiのすべての記事。
ですので、Ledge.aiがあつかうテーマに特化したAIとなっています。

デモはこちらから

是非みなさんもお試しください。

日本語校正ってどうやるの? おおまかな仕組みを解説

こちらのAI、どういう仕組みで動いているのかご説明します。

日本語校正をAIにさせるためには、まず下記のデータを用意する必要があります。

  • 正しい文章データ:大量にあるほうが良い
  • 誤字の文章データ:こちらは少量で可

肝心のAI部分ですが、RNN(Recurrent Neural Network)というニューラルネットワークを使用します。こちらは時系列データを扱うことが得意なニューラルネットワークです。たとえば、株価や音の波形などが時系列データに当たります。

文章も、前後の並びに意味をもつ時系列データです。そのため、文章を扱う場合には、RNNを使うことが一般的。
まずは、このRNNに「正しい文章」を学習させます。正確には、単語の並びになります。
例としては下記のとおり。

  • 「私」の次にくるのは「は」
  • 「は」の次にくるのは「、」
  • 「、」の次にくるのは「明日」
  • (以下略)

こうした並びを学習した後のRNNに対して、「私」という単語を入力すると、次に来る単語の確率を予測することが可能。
この場合は「は」が一番高い確率が出てきます。(そのほかの単語に対しても、確率は出てきます)

「正しい単語の並び」を学習したRNNは、「正しい次の単語」を確率で出してくれます。
「正しい次の単語」の確率がわかるということは、実際の入力文章の次の単語と比較をすることで、これはありえない並びなのかどうか、というチェックができます。

ちょっと複雑なので、図にすると下記のとおり。

このような形で、単語の並びに着目し、誤字かもしれない箇所を検知していくのが大きな流れです。

AIができるまで・前処理〜学習

気になる方も多いと思うので、実際にどういったフローでAIの学習までをおこなっているかを説明します。

ノイズを省くスクリーニング・ID変換などの前処理

データベースから取り出したLedge.aiの文章データは、このような形。

技術的なテーマもあるため、ソースコードやURLなども混じっています。そのほかには、見出しや箇条書きの表現なども。このままでは「純粋な文章」と言えないので、正規表現などを使ってノイズを排除してあげます。

文章はそのままだと単語に分かれていないので、MeCabで分かち書きをし、文章が単語ごとに分割してあげます。

正規表現
例えばURLやメールアドレスといった、規則性を持つ複数の文字列を、一つの文を書くだけで見つけだすことができる表記方法。大量の文章のなかから、特定の文字列を一括で検索・置換するときによく使用される。
MeCab
日本語用の形態素解析エンジン。入力された文章を、意味をもった単語ごとに細かく分割したり、単語ごとの品詞を特定することができる。

さらに、ニューラルネットワークは、数値しか扱えないので、単語を数値に変換してあげる必要があります。今回の場合は、登場した単語にひとつひとつ、IDの数字を整数で割り振る形にしました。

その後はRNNに、「このIDがきたら、次はこのID」…といった並びを学習させていきます。

GPUマシンをサクっと用意して学習開始

ディープラーニングで重要なのが、GPUマシンの用意。本来であれば、ディープラーニングライブラリからGPUを使用できるよう、面倒なセットアップ作業をいくつもしなければなりません。(下手すると数日かかることも……)

今回は、素早くディープラーニング環境を用意できる、Microsoft Azureの『Data Science VM』を使用しました。

Data Science VMとは
Azureで提供されている、データサイエンスやディープラーニング開発をおこなう人向けのテンプレート。最初から、ディープラーニング向けのGPUセットアップやTensorFlow、Chainerといったライブラリが入ったクラウドマシンをすぐに使えます。

Azure Portalにログインして、下記の手順のとおりに進めます。

  1. 「Virtual Machines」に移動し「+追加」から新規マシンを追加。
  2. 「Data Science Virtual Machine for Linux (Ubuntu)」を検索し、出てきたものをクリック。
  3. 「作成」ボタンをクリックして、マシン作成へ進みます。

今回選んだのは、NC6インスタンス。約3分待つだけで、開発環境ができあがりました。
あとは、できあがったクラウドマシンでChainerを動かすだけ。煩わしかったGPUのセットアップなども自分でやらなくて済みました。
※2018年4月現在で、Chainer 3.4.0 が入っていました

今回は100エポックまで学習。待つこと3時間ほどで、学習済みモデルのできあがりです。

以上が、AIができあがるまでの大まかな手順でした。
Data Science VMのように、開発を手助けする環境が充実していきているので、皆さまも是非AI開発を試してみてはいかがでしょうか。

誤検出も多いが、助詞の誤用検知に可能性

今回、1からRNNをつかって文章校正AIを開発してみました。結果として、全自動化はやはり難しいですが、「ここは誤字かもしれない」という箇所をすばやく見つける用途としては使えそうです。

様々な種類の誤字データを集め試験をしましたが、AI校正の一番の特徴は、ルールベースでは検知が難しい“助詞の間違い”を検知できる点です。今回作成したAIでは、助詞の誤用がある文章52件のうち、39箇所の助詞の誤用を正しく検知することができました。

一見するとこの数字は良い印象を受けますが、問題になるのは誤検出です。割合にすると、約60%が間違った検出でした。

助詞の誤用がある文章52件に対しての検出結果:

 正しい検出誤った検出全体の検出数(ハイライト箇所)
助詞の誤用検出数395792

データの追加で精度向上も可能

今回はLedge.aiのデータだけで学習をおこないましたが、他のオープンデータ等を追加した同条件のモデルでは、助詞の誤検出が今回のモデルより約10%ほど改善することがわかっています。

また、データを大量に追加したモデルでは、Googleドキュメントの誤字指摘機能による検出数を越えることも確認できました。

変換間違い・タイプミスなどの誤字データに対する、「Googleドキュメント」と「データを大量に追加した開発モデル」の誤字検出数比較:

Googleドキュメント13件
データを大量に追加した開発モデル24件

また、他社が公開している日本語校正AIでも、どうしても誤検出は発生しました。私たちが開発したモデルでは、僅差ですが、ほぼ同条件で正確な検出率(※全体の検出箇所のうち、正しく指摘できた箇所の割合)を上回ることもできました。

変換間違い・タイプミスなどの誤字データに対する、「他社校正AI」と「データを大量に追加した開発モデル」の正確な検出率比較:

他社校正AI51.85%
データを大量に追加した開発モデル60.87%

 
現状では誤検出も起きてしまう校正AI、やはり完璧とは言いづらいかもしれません。それでも、助詞の誤用を検知できるという点には可能性があるのではないでしょうか。
こちらの校正AIの研究開発はまだ道半ばなので、今後もパートナー企業と協力しながら進める予定です。これからの研究成果の発表もお楽しみに。