• 카테고리

    질문 & 답변
  • 세부 분야

    자연어 처리

  • 해결 여부

    미해결

질문드립니다.

21.10.23 02:47 작성 조회수 141

0

1. BucketIterator 함수가 배치사이즈별로 train, label을 분리해준다고 이해했는데 그 결과가 train_iter에 text[0],[1] 두개의 인덱스가 맞나요?

2.permute 는 각 차원의 위치를 바꿔는 역할을 하는데 permute(1, 0, 2) 0 ,1 ,2 가 각각 어던 차원을 의미하나요?

 

3.embedding_length = 300으로 주셨는데 입력값은 마음대로 조정할 수 있는건가요?\

 

4.Attention모델에서 인코더 마지막 히든스테이트 값이 디코더 시작부분으로 초기화 된다고 하셨는데 (제가 잘 이해한건지 모르겠네요)  attn_weights = torch.bmm(lstm_output, hidden.unsqueeze(2)).squeeze(2) 에서 final_state는 디코더 첫번째 히든스테이트인가요? 상위 코드는 어텐션 스코어를 구해주는 코드인가요?

 

답변이 안될까요~

답변 1

답변을 작성해보세요.

0

안녕하세요, Justin 입니다.

늦게 답변드려 죄송합니다.

 

1. train, label이 아닌, text, label로 분리합니다. 같은 실습 코드 내 train_model 함수를 참고해보시면, batch.text[0], batch.label 값 각각이 X, y 에 해당됩니다.

 

2. permute는 벡터의 차원 순서를 재배치합니다.

예를 들어, permute(1, 0, 2)의 경우, 기존 벡터 차원이 [32, 16, 100] 에 적용하였을 때,
[16, 32, 100] 으로 변경됩니다.

>>> x = torch.randn(2, 3, 5)
>>> x.size()
torch.Size([2, 3, 5])
>>> torch.permute(x, (2, 0, 1)).size()
torch.Size([5, 2, 3])

3. 네, 임베딩 벡터의 크기는 분석가 마음대로 조정할 수 있습니다.

4. final_state 값은 인코더의 히든스테이트 값 중 마지막 위치에 해당되는 벡터이므로, 이를 이용하여 디코더의 히든스테이트 값 중 첫 번째 위치로 지정합니다.

 

감사합니다.