ご質問ありがとうございます。
質問1
次seq2seqオリジナルペーパーを参照してください。私は公式のコード例は、紙、上記のように入力文を逆に考える (要旨で) Note that the LSTM reads the input sentence in reverse, because doing so introduces many short term dependencies in the data that make the optimization problem much easier.
we found that reversing the order of the words in all source sentences (but not target sentences) improved the LSTM’s performance markedly
https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf
: 彼らはことを示唆しています。
質問2
しかし、その後、あなたがeys
でデコーダに潜伏表現を置きます。しかしeys
は
Yes.Thisコードは、トレーニング時間に使用されているフランスのフレーズのcontinuos表現であるので、我々は(金単語を)文をターゲット知っています。
hx, cx, _ = self.the encoder(None, None, exs)
_, _, os = self.decoder(hx, cx, eys)
テスト時には、あなたはdef translate(self, xs, max_length=100):
を使用する必要があります。 このメソッドは、ソース文xs
からの文を予測するために使用できます。各ループについて
result = []
for i in range(max_length):
eys = self.embed_y(ys)
eys = F.split_axis(eys, batch, 0)
h, c, ys = self.decoder(h, c, eys)
cys = F.concat(ys, axis=0)
wy = self.W(cys)
ys = self.xp.argmax(wy.data, axis=1).astype('i')
result.append(ys)
、ソース文ベクトルと前の単語ys
で単語を予測します。私はこの部分は、以下の通りであるべきだと思う
質問3 質問4
: ys_in = [F.concat([bos, y], axis=0) for y in ys]
は、(文の開始)の両方のための公式のコード使用eos
を と。
最後の質問
私は文章を翻訳するのではなく、潜在空間へのマッピングのフレーズのためのオートエンコーダを構築したくない場合は、私は何をすべき?
あなたがオートエンコーダを構築したい場合は、
ys_in = [F.concat([eos, y], axis=0) for y in ys]
両方で
- この行を削除
xs = [x[::-1] for x in xs]
- 使用
bos
の代わりeos
ではなくbos
の使用eos
かどうか罰金です。 この行を削除するだけです。xs = [x[::-1] for x in xs]
は、自動エンコーダーです。 あなたがbos
を使用する場合は、次のように変更してください:
UNK = 0
EOS = 1
BOS = 2
47:eos = self.xp.array([EOS], 'i')
48: ys_in = [F.concat([eos, y], axis=0) for y in ys]
=>
bos = self.xp.array([BOS], 'i')
ys_in = [F.concat([bos, y], axis=0) for y in ys]
79: ys = self.xp.full(batch, EOS, 'i')
=>
ys = self.xp.full(batch, BOS, 'i')
def load_vocabulary(path):
with open(path) as f:
# +2 for UNK and EOS
word_ids = {line.strip(): i + 3 for i, line in enumerate(f)}
word_ids['<UNK>'] = 0
word_ids['<EOS>'] = 1
word_ids['<BOS>'] = 2
return word_ids
あなたは、さらに質問がある場合は、もう一度私に聞いてください。