誤字脱字チェックはAIにお任せ!?文章校正AIを作ってみた【デモ付き】Tweetみなさんは、文章を書くときの誤字脱字チェック、どうしていますか?Ledge.ai編集部でも、正規表現を使い半自動で校正をしているのですが、取りこぼしもあり、後から気づくことも。ルールベースだけでは、助詞の間違いや、脱字やタイプミスなどには対応できません。ルールベースと手動ではすべての誤字をカバーしきれないので、AIをつかって日本語の校正を自動化できないかチャレンジしてみました。校正とは業界によって定義は異なりますが、誤字・脱字・タイプミス・変換間違いがないか、助詞が間違っていないかなど、文章が日本語としておかしくないかをチェックすることです。結論からいうと、ある程度検出はできているものの、誤検出も多かったです。パターンとしては、ノイズが混じっていたり、脱字してしまっているような文章が、比較的うまく検出できているようでした。今回はLedge.aiだけの文章で学習をおこなったもの。AIの精度はデータ次第なので、データを増やせば、精度向上が期待できます。※今回開発したAIは、公開デモも用意したので、是非試してみてください。公開デモも用意しましたさっそく結果からみていきましょう。誤検出もありますが、正しく検出できているものもありますね。今回学習させたデータは、Ledge.aiのすべての記事。Ledge.aiがあつかうテーマに特化したAIとなっています。デモはこちらから是非みなさんもお試しください。おおまかな仕組みを解説こちらのAI、どういう仕組みで動いているのかご説明します。日本語校正をAIにさせるためには、まず下記のデータを用意する必要があります。Network)というニューラルネットワークを使用します。こちらは時系列データを扱うことが得意なニューラルネットワークです。株価や音の波形などが時系列データに当たります。文章も、前後の並びに意味をもつ時系列データです。そのため、文章を扱う場合には、RNNを使うことが一般的。このRNNに「正しい文章」を学習させます。正確には、単語の並びになります。例としては下記のとおり。「、」の次にくるのは「明日」(以下略)こうした並びを学習した後のRNNに対して、「私」という単語を入力すると、次に来る単語の確率を予測することが可能。この場合は「は」が一番高い確率が出てきます。(そのほかの単語に対しても、確率は出てきます)「正しい単語の並び」を学習したRNNは、「正しい次の単語」を確率で出してくれます。「正しい次の単語」の確率がわかるということは、実際の入力文章の次の単語と比較をすることで、これはありえない並びなのかどうか、というチェックができます。複雑なので、図にすると下記のとおり。このような形で、単語の並びに着目し、誤字かもしれない箇所を検知していくのが大きな流れです。気になる方も多いと思うので、実際にどういったフローでAIの学習までをおこなっているかを説明します。ノイズを省くスクリーニング・ID変換などの前処理データベースから取り出したLedge.aiの文章データは、このような形。技術的なテーマもあるため、ソースコードやURLなども混じっています。そのほかには、見出しや箇条書きの表現なども。このままでは「純粋な文章」と言えないので、正規表現などを使ってノイズを排除してあげます。文章はそのままだと単語に分かれていないので、MeCabで分かち書きをし、文章が単語ごとに分割してあげます。URLやメールアドレスといった、規則性を持つ複数の文字列を、一つの文を書くだけで見つけだすことができる表記方法。大量の文章のなかから、特定の文字列を一括で検索・置換するときによく使用される。MeCab日本語用の形態素解析エンジン。入力された文章を、意味をもった単語ごとに細かく分割したり、単語ごとの品詞を特定することができる。ニューラルネットワークは、数値しか扱えないので、単語を数値に変換してあげる必要があります。今回の場合は、登場した単語にひとつひとつ、IDの数字を整数で割り振る形にしました。その後はRNNに、「このIDがきたら、次はこのID」...といった並びを学習させていきます。GPUマシンをサクっと用意して学習開始ディープラーニングで重要なのが、GPUマシンの用意。本来であれば、ディープラーニングライブラリからGPUを使用できるよう、面倒なセットアップ作業をいくつもしなければなりません。VM』を使用しました。VMとはAzureで提供されている、データサイエンスやディープラーニング開発をおこなう人向けのテンプレート。最初から、ディープラーニング向けのGPUセットアップやTensorFlow、Chainerといったライブラリが入ったクラウドマシンをすぐに使えます。Portalにログインして、下記の手順のとおりに進めます。Machines」に移動し「+追加」から新規マシンを追加。(Ubuntu)」を検索し、出てきたものをクリック。「作成」ボタンをクリックして、マシン作成へ進みます。今回選んだのは、NC6インスタンス。約3分待つだけで、開発環境ができあがりました。あとは、できあがったクラウドマシンでChainerを動かすだけ。煩わしかったGPUのセットアップなども自分でやらなくて済みました。入っていました今回は100エポックまで学習。待つこと3時間ほどで、学習済みモデルのできあがりです。以上が、AIができあがるまでの大まかな手順でした。VMのように、開発を手助けする環境が充実していきているので、皆さまも是非AI開発を試してみてはいかがでしょうか。今回、1からRNNをつかって文章校正AIを開発してみました。結果として、全自動化はやはり難しいですが、「ここは誤字かもしれない」という箇所をすばやく見つける用途としては使えそうです。様々な種類の誤字データを集め試験をしましたが、AI校正の一番の特徴は、ルールベースでは検知が難しい“助詞の間違い”を検知できる点です。今回作成したAIでは、助詞の誤用がある文章52件のうち、39箇所の助詞の誤用を正しく検知することができました。一見するとこの数字は良い印象を受けますが、問題になるのは誤検出です。割合にすると、約60%が間違った検出でした。今回はLedge.aiのデータだけで学習をおこないましたが、他のオープンデータ等を追加した同条件のモデルでは、助詞の誤検出が今回のモデルより約10%ほど改善することがわかっています。データを大量に追加したモデルでは、Googleドキュメントの誤字指摘機能による検出数を越えることも確認できました。変換間違い・タイプミスなどの誤字データに対する、「Googleドキュメント」と「データを大量に追加した開発モデル」の誤字検出数比較:Googleドキュメント13件データを大量に追加した開発モデル24件また、他社が公開している日本語校正AIでも、どうしても誤検出は発生しました。私たちが開発したモデルでは、僅差ですが、ほぼ同条件で正確な検出率(※全体の検出箇所のうち、正しく指摘できた箇所の割合)を上回ることもできました。変換間違い・タイプミスなどの誤字データに対する、「他社校正AI」と「データを大量に追加した開発モデル」の正確な検出率比較:他社校正AI51.85%データを大量に追加した開発モデル60.87%現状では誤検出も起きてしまう校正AI、やはり完璧とは言いづらいかもしれません。それでも、助詞の誤用を検知できるという点には可能性があるのではないでしょうか。こちらの校正AIの研究開発はまだ道半ばなので、今後もパートナー企業と協力しながら進める予定です。これからの研究成果の発表もお楽しみに。孟典14歳からwebプログラミングを始め、いままでに20個以上のwebサービスをリリース。現在はディープラーニングエンジニア兼ライターとして活動。システム設計から、開発、デザイン、コンテンツライティングまで一通りできるのが強み。Thuデータの価値を守る。Networksの援軍動き出す。Thuフェイクデータが本物以上の価値を持つように。データで生まれる新たな可能性。