ちゃお……†
動機
MeCabの辞書に英語など外国語を入れると辞書のボリュームが膨大になって辞書のコンパイルに時間がかかるようになってしまいます。
その逆に、新語の発音推定 (読み推定) がしたいという需要もあります。
また、発音推定ができれば一昨年ごろに流行ったコンピュータで575判定するプログラムへの英語対応もできるようになります。
そこで今回は発音推定の一手段を紹介したいと思います。
アルファベット単語と読みのペアを抽出
UniDicからアルファベット単語と読みのペアを抽出します。
抽出用スクリプトはこちら↓
https://gist.github.com/ikegami-yukino/40a10a0e9611450b0c2a07ceb94b4b4c
アラインメント
ここでは mpaligner を使います。
自動読み推定(発音推定)のための文字列アライメントツールです.多対多のアライメントを提供します.部分的にアライメントの正解を与える部分的アノテーションやある特定の表記と読みの対応付けを他の対応付けよりも有利にしたり禁止したりできます.また,特殊な表記と読みの対応付け(AAA,トリプルエーなど)を検出する機能があります.
https://osdn.jp/projects/mpaligner/
まずはコンパイルします。
$ wget -O mpaligner_0.97.tar.gz "https://osdn.jp/frs/redir.php?m=jaist&f=%2Fmpaligner%2F55255%2Fmpaligner_0.97.tar.gz"
$ tar xzf mpaligner_0.97.tar.gz
$ cd mpaligner_0.97
$ make
次に アルファベット<TAB>読み
形式のデータをアラインメントします。
$ head -n 10 result.tsv
aachen アーヘン
aaliyah アリーヤ
aardsma アーズマ
aardwolf アードウルフ
aashram アシュラム
abaca アバカ
abacavir アバカビル
abahn アバン
abandoned アバンダンド
abbazia アバッツィア
$ cat ../result.tsv | perl script/separate_for_char.pl utf8 > test.char_unit
$ ./mpaligner -i test.char_unit
すると、test.char_unit.align
というファイルができます。
発音推定
発音推定は Slearp を使います。Slearp は、アラインメント後のデータを学習データとして発音推定モデルを構築し,それを使って発音推定を行うことができます。
なお、Macだとそのままコンパイルできなかったので、ここでは Makefile
を少しいじってます。
$ wget -o slearp_0.96.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fslearp%2F61966%2Fslearp_0.96.tar.gz'
$ tar -xf slearp_0.96.tar.gz
$ cd slearp_0.96_noParallel
$ sed -i -e 's/$(HED)//g' Makefile
$ make
コンパイルできたら、先ほどのtest.char_unit.align
から発音推定モデルを作ります。
$ ./slearp -t test.char_unit.align
すると、test.char_unit.align.ssmcw.ploss.C1000.b0.01.initVar1.trainNbest5.beam50.Context.Chain.11cngram.Joint.6jngram.sc0.11
みたいな名前のファイルと test.char_unit.align.ssmcw.ploss.C1000.b0.01.initVar1.trainNbest5.beam50.Context.Chain.11cngram.Joint.6jngram.sc0.rule
みたいな名前のファイルができます。前者は読み推定モデルファイルで、後者はルールファイルです。読み推定するときは、この2つのファイルを使います。
$ cat unlabeled.txt
c a l i g a r i
b u c k - t i c k
g l a y
$ slearp -r {モデルファイル} -rr {ルールファイル} -e unlabeled.txt
set options are showed in the follows.
-r: {モデルファイル}
-rr: {ルールファイル}
-e: unlabeled.txt
Start to read conversion rule.
Start to read model.
Start to evaluate model.
c:a|l:i|g:a|r:i| カ|リ|ガ|リ|
b:u|c|k|-|t|i|c|k| バ|ッ|ク|_|テ|ィ|ッ|ク|
g|l:a|y| グ|レ|ー|
1文字ごとにスペースを挿入したファイルを与えると推定結果が出力されます。