コーパスと実用のサイクル (2)
昨日のエントリ(コーパスと実用のサイクル - アスペ日記)の続き。
「コーパスを使って漢字かな・かな漢字変換を作り、その間違いをコーパスに反映する」というのを具体的にどうするか。自分としては、せっかく現代日本語書き言葉均衡コーパス (BCCWJ)ができたこともあるので、これの形態素解析結果を使いたいと思っている。
コーパスの間違いをどう反映していくか。自分としては、BCCWJ からの差分をGitHub等に置いて、NLP 関係者が更新できるようにするのがいいんじゃないかと考えている。
(差分の形式は diff 以外がいいのではないかと思っている。diff を使うことには様々なメリットがあるのだが、元のテキストや前後の文脈が公開されてしまうという問題がある。タグ付けの修正は原文を変更しないので、原文の○文字目から○文字目までのタグをこういうふうに付け直す、という形式はどうだろうか)
今からすることとして、N-gram 漢字-かな変換 の C++ による書き直しを考えている。現在の Python バージョンは次のような問題点がある。
- 遅い。少し長い文章だと、数秒間かかる。
- データ容量が大きい。4-gram のデータで、N-gram スコアを 1バイトにしても、全部合わせると 60MB ある。
- そのままでは IME として使えない。
C++ で書き直すことにより、速度はチューニングが可能になるし、データ容量も
http://nlp.cs.berkeley.edu/pubs/Pauls-Klein_2011_LM_paper.pdfを参考に多少圧縮することは可能だろう。
しかし、書き換えたとしても、今のデータで IME として使うには次のような理由から厳しいものがある。
- 現在使っている N-gram データには、自立語かどうかという情報がない。そのため、IME文節の区切りができない(IME文節:一つの自立語とそれに続く付属語のつながり。きまぐれ日記: IMEにおける「文節」とは何ぞや参照)。これができないと、一般ユーザには使ってもらえない(以前に、自分でも使いたくない)。
- 単語数が少ない。良い IME に必要なもの 3つ - アスペ日記でも書いたが、「マホトーン」も「メンタンピン」も変換できないような IME では厳しい。
共起情報がないことは、N-gram 変換をベースにするならそれほど大きな問題にはならない。「猫を飼いたい」といった頻出のつながりは自動的にうまくいくので。
文節情報については、BCCWJ から自立語かどうかの情報を残して N-gram を作り直せば問題ない。しかし、単語の不足は大きな問題だ。
単語についても、UniDicからの差分を GitHub で管理するなどできればと思う。しかし、単語の収集というのはそれほど簡単ではない。例えば Google が持っている単語リストをもらって、ノイズを取り除く・読みを修正するなどして洗練させていく代わりに使用させてもらうといったことはできないだろうか。