2016-07-31 6 views
0

Tensorflow에서 인코더 - 디코더 모델을 실행해야합니다. 사용 가능한 API 인 basic_rnn_seq2seq(encoder_input_data, decoder_input_data, lstm_cell) 등을 사용하면 인코더 - 디코더 시스템을 생성 할 수 있습니다.Tensorflow에서 사용자 정의 seq2seq 학습 (사전 계산 된 워드 임베딩 사용) 인코더 - 디코더를 실행하는 방법은 무엇입니까?

  1. 그런 모델에 word2vec와 같은 삽입을 어떻게 입력 할 수 있습니까? 나는 이 룩업을 포함 할 수 있다는 것을 알고 있지만 API에 따라 encoder_input_data은 크기 batch_size x input_size의 2D 텐서 목록입니다. 이 설정에서 각각의 단어 임베딩을 사용하여 각 단어를 어떻게 표현할 수 있습니까? embedding_rnn_seq2seq조차 내부적으로 임베딩을 추출합니다. 미리 계산 된 단어 삽입을 입력으로주는 방법은 무엇입니까?
  2. API를 통해 비용/복잡성을 어떻게 줄일 수 있습니까?
  3. 테스트 인스턴스의 경우 해당 디코더 입력을 알 수 없습니다. 이 사건을 어떻게 처리할까요?

답변

3

첫 번째 질문 : 아마 아닐 가장 좋은 방법,하지만 내가했다 않았다 무엇인지, 교육 전에 모델을 구축 한 후 시작합니다

for v in tf.trainable_variables(): 
    if v.name == 'embedding_rnn_seq2seq/RNN/EmbeddingWrapper/embedding:0': 
    assign_op = v.assign(my_word2vec_matrix) 
    session.run(assign_op) # or `assign_op.op.run()` 

my_word2vec_matrix 모양의 vocabularysize의 X 임베딩 크기와 채워진의 행렬이다 미리 계산 된 embedding-vectors에서. 퍼지가 정말 좋다고 생각하면이 (또는 비슷한)을 사용하십시오. 그렇지 않으면 seq2seq-Model은 시간이 지남에 따라 훈련 된 임베딩을 제공합니다.

두 번째 질문 : seq2seq.py에는 python/ops/seq2seq.py에서 찾을 수있는 model_with_buckets() 호출이 있습니다. 거기에서 손실이 반환됩니다.

세 번째 질문 : 각각의 디코더 입력은 이전 타임 스탬프의 디코더 출력입니다 (즉 첫 번째 디코더 입력이 특수 GO 기호이고 두 번째 디코더 입력이 첫 번째 타임 스텝의 디코더 출력이고 세 번째 디코더 입력은 두 번째 타임 스텝의 디코더 출력입니다.)

+0

좋습니다. 그렇다면 API에서 my_word2vec_matrix는 어디에서 공급됩니까? enc_cell (embedding_attention_seq2seq에 있음)은 tf.embedding_lookup으로 대체해야하는 임베디드 행렬입니까? – user3480922

+0

embedding_rnn_seq2seq 함수를 사용하면이 작업이 자동으로 수행됩니다. 그건 그렇고, 내 스 니펫에있는 이름을 embedding_attention_seq2seq에서 embedding_rnn_seq2seq로 수정해야합니다. – friesel

+0

"자동"의미 : embedding_rnn_seq2seq는 삽입 행렬을 사용합니다. 내 assign_op은 모델에 사용 된 삽입 행렬에 사용자의 행렬을 할당합니다. – friesel