Help us understand the problem. What is going on with this article?

Slearp + mpaligner で発音推定

ちゃお……†

動機

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

yukinoi
自然言語処理とかPythonについて書きます。
http://ikegami-yukino.github.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした