2017-11-09 16 views
0

親愛なるチェイナコミュニティ、NStepLSTMとSeq2Seqモデル

私は(フランス語翻訳英語)seq2seqofficial exampleNStepLSTMのロジック使用量を苦労することはできません。私の知る限りxsを理解することができますよう

  1. def __call__(self, xs, ys): xs = [x[::-1] for x in xs] #Reverse x英語のフレーズとysはフランスのフレーズです。なぜあなたは英語のフレーズを逆転させるのですか?

  2. どのようにネットワークをトレーニングしますか? xsysを連続したスペースに埋め込み、exsをエンコーダに供給して、英語のフレーズの潜在的表現を取得します。しかし、潜在的な表現をeysというデコーダに入れます。しかし、eysは、フランス語のフレーズを連続的に表現しています。テストステージのデコーダでは、結果として得られるフランス語のフレーズを知ることができません。どのようにネットワークを適用できますか?

    hx, cx, _ = self.the encoder(None, None, exs) _, _, os = self.decoder(hx, cx, eys)

  3. ys_in = [F.concat([eos, y], axis=0) for y in ys]我々は最初にend of sequenceを置く理由は?

  4. ys = self.xp.full(batch, EOS, 'i')def translateのように、end of sequenceの配列をデコーダに配置する理由は何ですか?

文章を翻訳するのではなく、フレーズを潜在空間にマッピングするための自動エンコーダーを作成する場合はどうすればよいですか?

答えて

1

ご質問ありがとうございます。

質問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]

両方で

  1. この行を削除xs = [x[::-1] for x in xs]
  2. 使用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 
    

    あなたは、さらに質問がある場合は、もう一度私に聞いてください。

関連する問題