Part-of-Speech TaggingとSpell Corrector

登録をすませたImageCLEFのデータセットをダウンロードしてみると、画像に付加されていたのは、ワードではなくXML形式で記述されたアノテーションで、TitleとかDescriptionなど自然言語で記述されていました。これからどうやってキーワードを抽出してやろうかと調査してみると、NLTKというPythonのモジュールを発見。
NLTKは、自然言語処理用のパッケージで、これを使ってTaggerを構築してみました。アルゴリズムは、Bigramでダメなら、Unigram、それでもダメならNN(Singular Noun)にしてしまえという、安直な方式。実際に実験対象の文書をTaggingしてみると、そこそこまともな結果が得られます。ウェブページからキーワードを抽出なんかする向きには、かなり多量のタグ付きコーパスTaggerを訓練しておく必要がありそうですが、画像に付加されている数行程度のアノテーションで、ボキャブラリーがだいぶ限定されていると、そこそこ良い結果が得られます。20,000ある画像各々に付いているDescriptionから、3517種の名詞が抽出され、さらにHeuristicに単数・複数をマージ、間違えて名詞に分類された記号(e.g. !!!)、数字の類(e.g. 20,00)を排除して2781種まで削減。ここで抽出された名詞をチェックしてみると、多少タイポが混じっていることに気づきました。多量にあるわけではないので、手動で修正 or 無視かなと思ってましたが、またまた便利なPythonスクリプトを発見。コードを眺めてみると、驚くほど短いコード(21行)です。短いコードですが、非常に使いでがありそうです。
使われているテクニックは、2つ。1つめは、edit distanceで、deletion, transposition, alteration, insertionを行うことで対象文字列に変化を与える。2つめは、その変化を与えた文字列が、コーパスから作成された頻度付きの辞書にマッチするかどうかをチェックし、マッチした文字列の中からより頻度の高いものを修正候補として返すという仕組み。Spelling correctionの文献によると、80〜95%のタイポは、edit distance=1なんだそうで、edit distanceの小さいものから試していけば、それほど多く調べることなくタイポを修正できるんだそうです。