글 수 220
https://github.com/haven-jeon/ko_en_neural_machine_translation/blob/master/model.py
저도 많이 헷갈렸는데 위의 코드를 보니까 확실히 이해가 되네요. 디코더의 임베딩 출력을 바로 사용하는 것이 아니라 Fully Connected Layer와 Softmax를 붙여서 원핫인코딩으로 출력이 나오게 하더라구요. 그래서 임베딩 할때 사용한 단어사전이 원핫인코딩으로 되어 있기때문에 어떤 단어인지 알 수가 있습니다.
학습할때는 디코딩 입력을 디코딩 출력에서 가져오지 않고 데이터의 출력 문장을 임베딩하여 사용합니다. 그리고 학습후 테스트 할때는 디코딩의 출력인 원핫인코딩의 단어를 다시 임베딩한 후 디코딩의 입력으로 넣습니다.
def calulation()이 테스트 수행을 하는 함수이니 여기를 자세히 분석해보시면 될 것 같습니다.
데이터 입출력을 간단하게 정리하면 다음과 같습니다.
< 학습시 >
인코딩 입력 : 입력 단어 임베딩 (ABC)
디코딩 입력 : 출력 단어 임베딩 (<go>WXYZ)
디코딩 출력 : 출력 단어 원핫인코딩 (WXYZ<eos>)
< 테스트시 >
인코딩 입력 : 입력 단어 임베딩 (ABC)
디코딩 입력 : 디코딩 출력인 원핫인코딩을 다시 임베딩 (<go>WXYZ)
디코딩 출력 : 출력 단어 원핫인코딩 (WXYZ<eos>)
와우!!! 정말 감사드립니다 ㅎㅎ