[17/08/06 23:47 更新]
char_lstm_train.pl
とchar_lstm_gen.pl
を、日本語に対応する。データとしては、私が独自に作った語録集から、私の言葉を抜き出したものを使う。(kgk_words.txt
) jfortune形式で書いているが、文字コードはUTF8である。
char_lstm_jp_train.pl
)
char_lstm_train.pl
をchar_lstm_jp_train.pl
にコピーしておく。GetOptions
の中のprefix
のデフォルトを変更。
'prefix=s' => \(my $prefix = 'lstm_jp' ),
後半のpackage main;
が始まるまでは変更なし。日本語を扱うためにEncode
を読み込み、データファイル名を変更、utf8から読み込むモードでopen。
use Encode;
my $file = "data/kgk_words.txt";
open(F, "<:utf8", $file) or die "can't open $file: $!";
変更終了。
Epoch数25で実行してみると、こんな感じ。
Epoch[0] Train-Perplexity=47.340639
Epoch[0] Time cost=23.909
Epoch[1] Train-Perplexity=7.792494
Epoch[1] Time cost=22.940
Epoch[2] Train-Perplexity=2.793955
Epoch[2] Time cost=23.278
Epoch[3] Train-Perplexity=1.909530
Epoch[3] Time cost=24.496
Epoch[4] Train-Perplexity=1.517504
Epoch[4] Time cost=24.768
Epoch[5] Train-Perplexity=1.352104
Epoch[5] Time cost=24.688
Epoch[6] Train-Perplexity=1.298741
Epoch[6] Time cost=25.410
Epoch[7] Train-Perplexity=1.250809
Epoch[7] Time cost=25.430
Update[1002]: Changed learning rate to 9.90000e-04
Epoch[8] Train-Perplexity=1.220032
Epoch[8] Time cost=25.713
Epoch[9] Train-Perplexity=1.196657
Epoch[9] Time cost=25.320
Epoch[10] Train-Perplexity=1.177160
Epoch[10] Time cost=25.646
Epoch[11] Train-Perplexity=1.164436
Epoch[11] Time cost=25.471
Epoch[12] Train-Perplexity=1.155473
Epoch[12] Time cost=25.848
Epoch[13] Train-Perplexity=1.144101
Epoch[13] Time cost=25.378
Epoch[14] Train-Perplexity=1.138491
Epoch[14] Time cost=25.923
Epoch[15] Train-Perplexity=1.130483
Epoch[15] Time cost=25.770
Update[2002]: Changed learning rate to 9.80100e-04
Epoch[16] Train-Perplexity=1.127876
Epoch[16] Time cost=25.559
Epoch[17] Train-Perplexity=1.120702
Epoch[17] Time cost=25.630
Epoch[18] Train-Perplexity=1.116583
Epoch[18] Time cost=25.716
Epoch[19] Train-Perplexity=1.112624
Epoch[19] Time cost=25.740
Epoch[20] Train-Perplexity=1.110295
Epoch[20] Time cost=26.084
Epoch[21] Train-Perplexity=1.107469
Epoch[21] Time cost=26.497
Epoch[22] Train-Perplexity=1.104525
Epoch[22] Time cost=27.531
Epoch[23] Train-Perplexity=1.101416
Epoch[23] Time cost=25.648
Epoch[24] Train-Perplexity=1.100197
Epoch[24] Time cost=25.917
Saved checkpoint to "lstm_jp-0025.params"
char_lstm_jp_gen.pl
)
char_lstm_gen.pl
を改造。
まず、GetOptions
の中で、prefix
のデフォルトをchar_lstm_jp_train.pl
に合わせておく。
'prefix=s' => \(my $prefix = 'lstm_jp' ),
最後のsub sample
の中の出力部分、
print "$reverse_vocab{$next_char}";
を、日本語用に変更。
print encode_utf8($reverse_vocab{$next_char});
以上。
実行結果はこんな感じ。
いかない。
うまくいかない。
%%
人生にゴれでったるも%%
感出なりも的と見は、型を見て、走り出す。
%
明日はどっちだ?
明後日の方向だ!
%%
人は生まれて 人は育ち 人を愛して やがて死ぬ
いうなれば それだけのこと
%%
今日は昨日を後iって基しい情報としいいの判断はその恵め
%
ある研究者はそれを丸いと言い、別の研究者はそれを丸いと言い、別の研究者はそれを四角いと言う。
それが実
日本語的におかしい部分とコピペ的な部分が混在してる感じ。
[次の「日本語の単語レベル学習と文章生成」へ] [「英語の単語レベル学習と文章生成」に戻る] [「PerlとMXNetで文章生成」に戻る] [「あえてのPerl」に戻る]