「田中コーパス」を Tanaka Corpus - EDRDG Wiki をもとに ftp://ftp.edrdg.org/pub/Nihongo/examples.utf.gz からダウンロードして
tar xvfz examples.utf.gz
less examples.utf
すると、
A: 彼女は私の子供達の世話をしてくれる。 She takes care of my children.
というのが見つかるが、https://github.com/yusugomori/small_parallel_enja/blob/master/train.ja.000#L6 では「my」が「私たち」になり「children」の情報が消えている。ひょっとしたらこういう事例が幾つか混じっているのかもしれない。
6/04_encoder_decoder_torch.py#L74 の部分が、GPU 使用時に怒られることになるので
len_source_sequences = (x.t() > 0).sum(dim=-1).cpu()
とした。GPU にオフロードしたままだとダメっぽいが何でなんだろうって気もしないでもないけど、https://github.com/pytorch/pytorch/blob/f171c78c043cdf62e3710411b9e4eb0970b5ec48/torch/nn/utils/rnn.py#L222-L223 に
lengths (Tensor or list(int)): list of sequence lengths of each batch
element (must be on the CPU if provided as a tensor).
と明記されているのだから仕方ない。
6/04_encoder_decoder_torch.py#L192-L193
ここも t
の内容がメモリ上で連続になっていないようで view
の呼び出しで怒られる。
loss = compute_loss(t.contiguous().view(-1), preds.view(-1, preds.size(-1)))
にしてみた。val_step
内の同様のコードも同じ対応をしておく。これでとりあえず訓練は進むようになる。
なお、この対策は RuntimeError: view size is not compatible with input tensor's size and stride (at least one dimension spans across two contiguous subspaces). Use .reshape(...) instead. · Issue #4 · cezannec/capsule_net_pytorch · GitHub を参考にした。これ、Hinton 先生のカプセルネットワーク (2017 年版) の PyTorch での実装だな。
なんで train_dataloader
と val_dataloader
から得た t
がメモリ上で不連続で、test_dataloader
はそうではないのかパッと見ただけでは分からないのだが、まずは torch.Tensor.is_contiguous — PyTorch 1.10.0 documentation で事実は確認できるだろうか。
K80 上で訓練は 15 分ほどで完了する。結果は以下のように残念な感じだが、本とそんなに変わらない気がするし、ゼロつく 2 の seq2seq の実装の中で一番シンプルなやつに対応すると思うので、こういう感じなんだろう。
「彼女 は ピアノ を 上手 に 試合 を し た 。」が一番マシな翻訳だな。
epoch: 30 loss: 1.937, val_loss: 3.92 > she doesn 't have any <unk> . = 彼女 に は 敵 は い な い 。 </s> < 彼女 は 何 が 悪 い い で す 。 </s> 。 </s> </s> </s> </s> </s> </s> </s> </s> > she played the piano well enough . = 彼女 は かなり うま く ピアノ を 弾 い た 。 </s> < 彼女 は ピアノ を 上手 に 試合 を し た 。 </s> </s> </s> </s> </s> </s> </s> </s> </s> > i don 't like sad movies . = 私 は 悲し い 映画 は 嫌い だ 。 </s> < 私 は は 映画 が 好き で す 。 </s> 。 </s> </s> </s> </s> </s> </s> </s> </s> </s> > i 'll be here by monday . = 月曜 日 まで に ここ に 来 て い ま す 。 </s> < ここ で ここ で は 雨 が が で ま 。 </s> </s> </s> </s> </s> </s> </s> </s> </s> > how beautiful the rising sun is ! = 朝日 は なん と 美し い の だ ろ う 。 </s> < なんて 美し い の 美し の の よう な の で しょ う 。 </s> </s> </s> </s> </s> </s> > nothing is so precious as time . = 時間 ほど 貴重 な 物 は な い 。 </s> < 何 い る ほど か も な い 。 </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> > she expressed satisfaction with her life . = 彼女 は 自分 人生 に 満足 し て い る と い っ た 。 </s> < 彼女 は 自分 の 意見 に 対 し て 死 ん で い た 。 </s> た 。 </s> </s> > they won by force of <unk> . = 彼 ら は 数 の 力 で 勝 っ た 。 </s> < 彼 ら は その 試合 に は し て い る 。 </s> </s> </s> </s> </s> </s> </s> </s> > he always takes sides with her . = 彼 は いつ も 彼女 の 見 方 を する 。 </s> < 彼 は いつ も 彼女 と と と する 。 る 。 </s> </s> </s> </s> </s> </s> </s> </s> > what a bad boy he is ! = 彼 は なん と 悪 い 子 な の だ ろ う 。 </s> < 彼 は なんて 彼 い い う の か の だ ろ う 。 </s> </s> </s> </s> </s> </s>