prontron - PRONunciation percepTRON

by Graham Neubig

English

prontronは日本語の未知語発音推定プログラムです。構造化パーセプトロンを日本語の発音推定に使えるのではないかと思って作ってみました。もし興味があったら使ってみてください。

ダウンロード

最新版: prontron 0.1

開発版: @github
過去のバージョン: まだ

prontronはCommon Public License v 1.0に従ってダウンロード、再配布できます。

使い方

発音推定

modelディレクトリの中のモデルを利用して発音を推定することができます。1行1単語の入力ファイルinput.txtを用意して、以下のコマンドを実行します:

$ prontron.pl model/model.dict model/model.feat < input.txt > output.txt

1行ずつ単語の発音をoutput.txtへ出力します。

モデル学習

学習は2段階で行います。まず、「サブワード・発音」の組からなる辞書を構築してから、モデルの重みを学習します。

1行1単語のtrain.wordと1行1発音のtrain.pronを作成し、アライメントプログラムを実行すると、model/model.dictに辞書が作成されます:

$ mono-align.pl train.word train.pron model/model.dict

学習が終わって、辞書ファイルに不具合が見つかったら手で直したり、エントリーを付け加えたりしても問題ありません。また、mono-align.plは単純なアライメント法を利用しているので、他のツール(例えばmpaligner)で作るとより高い精度が得られる可能性もあります。次はパーセプトロンでモデルの重みファイルmodel/model.featを作成します(時間がかかります):

$ prontron-train.pl train.word train.pron model/model.dict model/model.feat

以上です!プログラムに以下のオプションがあります(minとmaxは両プログラムで揃えなければなりません):

Both:
    -fmin  入力単位の最小文字数 (1)
    -fmax  入力単位の最大文字数 (1)
    -emin  出力単位の最小文字数 (0)
    -emax  出力単位の最大文字数 (5)
    -iters イタレーションの上限 (10)
    -word  文字ではなく、空白で区切られた単語を利用

mono-align.pl:
    -cut   最大事後確率がこれ以下だと出力しないしきい値。
           小さくすると後段の学習が遅くなるが、精度は多少
           あがるかもしれません (0.001)

prontron-train.pl only:
    -inarow  X回以上成功している学習例を一旦飛ばす
    -recheck 飛ばした学習例をX回ごとに再探索する

仕組み

Prontronは構造化パーセプトロンに基づいた識別学習を利用しています。これにより、発音推定に多くの素性を利用することができます。構造化パーセプトロンのアルゴリズムを簡単に説明すると:

発音推定の場合pf(p)f(p*)はViterbiアルゴリズムで探索します。prontronの現在の素性は4つの系列に対して素性を定義します:

単語:発音 発表
発音:はつおん はっぴょう
系列1−文字・発音:発/はつ 音/おん発/はっ 表/ぴょう
系列2−発音:はつ おんはっ ぴょう
系列3−モーラ:は つ お んは っ ぴ ょ う
系列4−音素(らしきもの):h a t u o nh a x p i xy o u

各系列に有用な情報が含まれています。例えば以下の素性は実際のデータで学習されました:

精度比較

現代日本語書き言葉均衡コーパス(BCCWJ)のことなり単語90%を学習データとして、残りの10%をテストデータとして、66%の単語の発音を正しく推定しました(雑音のある通信路モデルは62%、結合n-gramは多分もう少し上がります)。さらに、以下で詳細に書いてある通り、素性を柔軟に入れることができて、学習法を改善する余地もあるので、さらに精度が上がる見込みはあります。

開発

開発者

プロジェクトへの参加をご希望の方はneubig at gmail dot comまたは@neubigまでご連絡ください。特にバグ報告や以下のTODOリストの中の開発は大歓迎です。

TODOリスト

今後の課題として以下のものがあります:

更新歴

Version 0.1.0 (7/10/2011)