文法誤り訂正の可視化ツールを作ってみた

本記事は,GEC (Grammatical Error Correction) Advent Calendar 2021 の22日目の記事です.

はじめに

Gold / システム出力に含まれる訂正としてどんなものがあるか,実例をボーッと眺めたいと思う時がありませんか?今はなくてもそのうちあるかもしれません.そんなときに役立つツールを作りたいということで,作ってみたという話です.GECのアドカレが始まってから思いついて,一人ハッカソン的なノリでやってみました.今までこういうツールはないと思ってやっていますが,もし存在すればこの企画が潰れます(あれば教えてください...).

Web開発的な記事になりますが,技術的な話はほぼしません.結果として何ができたかを報告するような内容になります.

できたツールは以下に公開しています(こういう開発はほとんどしたことがないので,ありえない実装をやってるかもしれませんが,ご容赦ください...).

github.com

何ができればいいのか

誤り訂正の様子を原文と共にハイライトしたいです.M2形式は確かに素晴らしいですが,人間にとってはスパンの認識が厳しく,ボーッと眺めるには頭を使います.そこで,原文の間にいい感じに割り込むようにして訂正情報を表示したいと思いました.さらに,ハイライトする誤りを,誤りタイプや置換・挿入・削除の分類で絞り込みたいです.

何ができたか

以下のような見た目のものができました.訂正情報を赤(オレンジ?)でハイライトし,誤りタイプも併記します.また,チェックボックスによって誤りタイプの絞り込みができます.例えば,誤りタイプM:DETのみを見たい場合は,MDETのみにチェックを入れます.

f:id:gotutiyan:20211222003325g:plain

使い方

冒頭に掲載したリポジトリのREADME を見ていただければ話が早いですが,原文と訂正文のファイル,もしくはM2形式のファイルを入力として,プログラムを走らせるだけです.実行したらローカルにサーバが立つので,ブラウザで見にいけば可視化したものが閲覧できます.

python run.py --orig <orig file> --cor <corrected file>
# もしくは
python run.py --m2 <m2 file>

# 実行したら,http://127.0.0.1:5000/を見にいきましょう

原文と訂正文のファイルを入力とした場合,ERRANTによって訂正のスパンを獲得します.M2形式のファイルを入力とした場合は,訂正のスパンや誤りタイプはM2形式が示すものに従います.M2を入力とする場合は--ref_idオプションでアノテータIDも指定できます.デフォルトは0です.逆に言うと,マルチリファレンスを同時に可視化することはできません,

先に述べたように,本ツールは誤りタイプで絞り込む機能があります.誤りタイプとしては基本的にERRANTの定義を想定しており,置換・挿入・削除と,品詞が関係するもの(VERBとかNOUNとか)を別々に指定できるようにしています.そのため,チェックボックスを2つのブロックに分けています.一方で,M2形式のファイルを入力とする場合,誤りタイプの定義が異なる場合があります.例えば,CoNLL-2014のアノテーションは誤りタイプの定義が異なりますし,置換・挿入・削除は明示的に付与されません.このような場合,チェックボックスは片方のブロックのみ用いられます(ちょっと色々な理由からこうなっています.これを書きながら,別に分ける必要もない気がしてきました).

展望

今後も開発するか分かりませんが,ひとまず僕が欲しい機能は実装できたと思います.M2形式を入力に受け付けるおかげで,任意の言語を入力に受け付ける点が結構良いなと思っています(対象言語の訂正情報がM2形式に従う仕様であれば).ロクにテストをしていないせいでバグがあるかもしれないので,そこは一応今後もチェックしたいと思います.

あとできたらいいなと思うのは,2つの訂正情報について比較するようなことですね.システムAとシステムBの出力があったときに,Aはこんな訂正をたくさんしているけどBはしてないね,みたいなことが分かりやすく比較できれば,GECの分析において一役買うのではないかと思っています.同様の比較はシステム出力と参照文に対しても適用可能で,そうするとエラー分析が容易になる気がします.

おわりに

ということで,今回は訂正の可視化ツールを作ってみました.