ラベル 深層学習 の投稿を表示しています。 すべての投稿を表示
ラベル 深層学習 の投稿を表示しています。 すべての投稿を表示

2018年7月6日金曜日

LSTMで文章生成

私が愛してやまない Les Miserables のデータを元に文章生成してみた。
ファンティーヌが病院に入った場面から、サンプリス修道女がバルジャンを逃がすためにジャヴェールに嘘をつく場面の文章を利用。
mecabを使って分かち書きをし、ユニット層8の単語単位でepoch 1500で学習させた。
NLPが専門の友人に聞いたところ、ひらがな文字単位で学習させるのは一般的ではないとのこと。
webで検索すると、文字単位ひらがなで学習させてる記事を見かけるが、自然言語界隈ではやらないらしい。
やるとしたら、漢字まじりの文字単位とのこと。

結果

単語ごとに都度改行してるけど。
これらはデータの中にはない文章だった。
$ python lstm.py
既に
シャンマティユー
処刑
持っ

$ python lstm.py
だって
少し
変わら
ない

キャラクターの名前を先頭に与えてみる

$ python lstm.py
ジャヴェル
答え
なかっ
です

$ python lstm.py
ジャン・ヴァルジャン
はっきり
ある

$ python lstm.py
ファンティーヌ
誓って
申し

$ python lstm.py
コゼット
しっかり

楽しいいい
いい結果のみ抜粋してるので、もちろん、文章になってないような結果もある。

2018年4月25日水曜日

OpenNMTで英日翻訳できるようにする 2

この前のデータではうまくいかなかったので、他のデータで再挑戦。
コーパス:JESC 配布のもの
320万文あるし、データ量としては十二分のはず…。

preprocess.py

分割データを、とりあえずそのまま学習させる。
preprocess.pyの実行で、train.enが大きいためメモリが足りないと怒られるときがある。
-max_shard_size 1000000
を実行ファイル名の後ろにつける。
こんな感じ。
python preprocess.py -max_shard_size 1000000 -train_src data/train.en -train_tgt data/train.ja -valid_src data/val.en -valid_tgt data/val.ja -save_data data/en_ja

実行すると、dataフォルダの中に大量のtrain.ptが作成される。

train.py

うまくいくよう祈りながら実行
nohup python3 -u train.py -data data/en_ja -save_model en_ja-model > log.txt &

translate.py

学習が終わったら、動かしてみる。
前回accが29とかだったが、今回は40まで上がっている!!!

いい感じ
SENT 755: ('▁someone', '▁attacked', '▁me', '!')
PRED 755: ▁誰かが 私を 襲 った !
PRED SCORE: -9.0828

SENT 727: ('▁do', '▁it', '▁yourself', '▁from', '▁today', '▁on', '.')
PRED 727: ▁今日 から 自分で やれ
PRED SCORE: -6.6255

ちょっと惜しい
SENT 704: ('▁i', '▁can', '▁raise', '▁the', '▁child', '▁by', '▁myself', '▁without', '▁a', '▁male', '▁figure', '.')
PRED 704: ▁男 が いない と ▁一人で 育て られる
PRED SCORE: -8.9010

SENT 1374: ('▁because', '▁she', '▁can', "'", 't', '▁believe', '▁i', '▁can', "'", 't', '▁eat', '▁this', '▁pen', 'gu', 'in', '.')
PRED 1374: ▁この ペン ギ ンは 食べ られない から
PRED SCORE: -8.6270

ダメダメ
SENT 789: ('▁worst', '▁of', '▁all', ',', '▁he', '▁doesn', "'", 't', '▁have', '▁hair', '...')
PRED 789: ▁ヘ ヘ ヘ ヘ ...。
PRED SCORE: -10.1595

SENT 1569: ('▁hey', ',', '▁l', 'ud', 'l', 'ow', '!', '▁grab', '▁a', '▁light', '▁cann', 'on', '▁and', '▁get', '▁out', '▁here', '▁now', '!')
PRED 1569: ▁ライ ト キャ ノ ン !
PRED SCORE: -9.9253

特にデータのトリミング的なことはせずに、そのまま突っ込んだけど、いい感じに訳せてそうな気がする。

おまけ

遊戯王かな?
SENT 1405: ('▁i', '▁won', "'", 't', '▁let', '▁you', '!', '▁i', '▁activate', '▁a', '▁magic', '▁card', '!')
PRED 1405: ▁マジ ック カード 発動 !
PRED SCORE: -8.2402

SENT 1478: ('▁his', '▁per', 'man', 'ent', '▁trap', ',', '▁dep', 'th', '▁am', 'ul', 'et', '...')
PRED 1478: ▁永 続 トラ ップ ▁ディ ス ・ ア ミュ レット
PRED SCORE: -6.4971