1

NMT과 같이 시퀀스 인코더 디코더 모델 시퀀스가있는 chat-bot을 구축 중입니다. 주어진 데이터로부터 나는 그들이 훈련 할 때 디코더 출력을 인코더 셀 상태와 함께 디코더 입력으로 공급한다는 것을 이해할 수 있습니다. 실제로 실시간으로 챠트 봇을 배치 할 때, 그 시간 이후에 디코더에 무엇을 입력해야하는지 예측할 수있는 출력이 무엇인지 알 수 없습니다. 누군가 제발 나를 도와 줄 수 있습니까?Chatbots 용 Seq2Seq 모델

+0

나는 또한 https://github.com/tensorflow/nmt를 따르고 있으며, 같은 문제가 해결 방법을 찾을 수 있습니까 ?? – jignasha

답변

0

정확히 대답은 Neural Machine Translation model (NMT)에서 가져 오는 빌딩 블록과 자신의 것으로 대체 할 건물 블록에 달려 있습니다. 그래프 구조는 NMT에서와 똑같다고 가정합니다.

그렇다면 추론 할 때 디코더에 0 벡터 만 입력하면됩니다.


내부 상세는 : NMT 디코더의 다음 입력을 결정 Helper 불리는 엔티티를 사용하여 (tf.contrib.seq2seq.Helper 설명서 참조).

특히 tf.contrib.seq2seq.BasicDecoder은 단계를 수행 할 때 도우미에만 의존합니다. next_inputs은 후속 셀에 입력되는 값이 정확하게 Helper.next_inputs()의 반환 값입니다.

  • tf.contrib.seq2seq.TrainingHelper

    (보통 진실 연삭) 다음 디코더 입력을 반환 예컨대 Helper 인터페이스의 다른 구현있다. 이 도우미는 the tutorial에 표시된대로 교육에 사용됩니다.
  • tf.contrib.seq2seq.GreedyEmbeddingHelper은 입력을 버리고 이전 출력에서 ​​argmax 샘플링 된 토큰을 반환합니다. NMT는 sampling_temperature 하이퍼 - 파라미터가 0 일 때 추론에서이 도우미를 사용한다.
  • tf.contrib.seq2seq.SampleEmbeddingHelper은 동일하지만, categorical (a.k.a. generalized Bernoulli) 분포에 따라 토큰을 샘플링한다. NMT는 sampling_temperature > 0 일 때 추측에이 도우미를 사용합니다.
  • ...

코드 BaseModel._build_decoder 방법이다. GreedyEmbeddingHelperSampleEmbeddingHelper은 디코더 입력이 무엇인지 신경 쓰지 않습니다. 사실 아무것도 먹을 수는 없지만 제로 텐서가 표준 선택입니다.