ペルシア語の形態素解析器を作る話

タイトルの内容について,1ヶ月近く取り組んでみたので,そろそろ書いてみる.

そもそも目的は,「口承文芸コーパス」というペルシア語の口承(口伝えのお話)話を記録するという既存のコーパスがあって,それに言語情報をつけていく.が目標

で,どうして形態素解析が必要なのか?というと,

  1. 係り受け解析の段階で形態素情報が必要.というのも,動詞のmodal, tenseと名詞のaffixが形態素解析の特徴量として用いられているから,さらには,動詞のstemも特徴量として用いられているので,形態素解析のついでにstemmingも行わなくてはいけない.
  2. アラビア文字特有の表記揺れ問題があるから.一例として,動詞の直接法の接頭辞はmyで始まるが,接頭辞のあとにstemを書く時に{my, my , my_}の3種類の接頭辞とstemのつなぎ方が存在する.処理の際には3つのうちのどれかに統一しなくてはいけない.("my_"の表記が一番望ましい).統一のためには,一度,できる限りの表記揺れを考慮した形態素解析を行い,その上で統一するのが望ましい.

という,この二点が形態素解析が必要な理由だ.
一応,ペルシア語の屈折辞はそれなりに規則的なパターン(英語ほどの平易なパターンではないが)が書けるので,「一番簡単な実装から」という考えの下で,Finite State Transducer(FST)を用いた実装を行うことにする.

FSTでやるにせよ,なんにせよ,語彙辞書がなくては話にならない.そこで,現段階でもっとも規模が大きいと思われる辞書を採用する.それがperlexだ.
INRIAGForge: Alexina: Project Filelist

ただし,perlexの最大の欠点は,「何をどうしたらよいのか?まったくわからないこと」
論文で概念的な説明はされているものの,ファイルにはdocumentationが存在していない.あるのは謎の記号で表記されている大量の語彙ファイル,と何をするのかよくわからないプログラム群.(ちなみに著者に連絡をとったものの.返信はなかった)

なので,「perlexをどう使いこなすのか?」の検討を行った.

その結果,次のことがわかった.perlexとは主に二種のファイルで構成されている.

  1. ひとつはilexファイル.これは屈折辞を展開する前のstemの状態を保存しているファイル
  2. もうひとつはlexファイル.これは屈折を展開した後の語彙ファイル.とうぜん,その屈折のタグが併記されている

したがって,lexファイルをもとに辞書を構成し,形態素情報を解析すればよい.(と,いう結論にたどりつくまで,1ヶ月以上を使った)

ただ,ひとつ問題なのが,perlexには予め活用の階層(例えば動詞の1類とか)が各単語に指定されており,新規に追加しようにも,どの階層に追加するか?は不明.

今回の目的だと,口承コーパスには,当然のように新語が出現するので,新たに新語を追加しなくてはいけない.なので,新語に対応するために,perlexの屈折体系を参考に,自分で屈折辞書を作成した.ここでFSTを使用する.

なので,解析のフローは以下のような2段階のパイプラインになる.

  1. perlexの辞書を使って,解析(というか,辞書を引いて,見つかれば結果を返すだけ)
  2. perlexの辞書になければ,自作のFSTによる解析器で解析をする

となる.

なお,今回の目標の口承コーパスでは,すでに多くの単語に対して,口語:文語の対応表が作成されていたので,これを最大限に用いる.

ただ,この対応表の最大の問題点は,動詞だけはなぜか対応表が作成されていない.

なので,形態素解析はとりあえずは動詞だけを対象にすればよいことになる.

(という,結論にたどりつくまでに2ヶ月かかった.)

そろそろこの作業も終わ(るといいなあ)ので,こうご期待(期待する人なんてほとんどおらんだろうけども..)