Slearp + mpaligner で発音推定

  • 9
    いいね
  • 0
    コメント

ちゃお……†

動機

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文字ごとにスペースを挿入したファイルを与えると推定結果が出力されます。