← 문제 목록/Masked Bag of Embeddings
문제 해설

Masked Bag of Embeddings

NLP · easy

preview

Masked Bag of Embeddings

89번 Bag of Embeddings모든 L 위치를 평균. 실제 데이터에선 문장 길이가 다르므로 padding 토큰 을 넣고 배치로 묶는데, 이걸 평균에 포함하면 잘못된 값.

Masked 평균: 유효한 위치만 평균에 참여:

sb=lmb,lEidxb,llmb,l\mathbf{s}_b = \frac{\sum_{l} m_{b,l} \, E_{\text{idx}_{b,l}}}{\sum_{l} m_{b,l}}

  • mb,l{0,1}m_{b,l} \in \{0, 1\}: 1 = 실제 토큰, 0 = padding.
  • 분모가 0 이 되는 경우 (빈 시퀀스) 방어 필요 — eps 또는 clip.

왜 중요?

  • 가변 길이 시퀀스가 실제 NLP 의 기본. "cat sat" (L=2) 와 "the cat sat on mat" (L=5) 가 같은 배치.
  • Pad 토큰 임베딩에 실제 학습 신호가 없더라도 평균에 넣으면 문장 표현이 길이에 따라 왜곡.
  • Transformer 의 attention mask 도 동일 아이디어.

과제

함수 masked_bag_of_embeddings(E, idx, mask) 를 완성하세요.

  • E shape (V, D), idx shape (B, L) 정수, mask shape (B, L) 0/1.
  • 반환: shape (B, D).
  • 힌트: emb = E[idx](B, L, D); (emb * mask[:, :, None]).sum(axis=1) / mask.sum(axis=1, keepdims=True).clip(min=1e-9).

테스트 케이스

#이름검증
1shape (B, D)
2mask 모두 1 → 89번과 동일
3일부 mask=0 → 해당 위치 기여 없음
4한 배치가 길이 다를 때 길이 상관없는 평균
5빈 시퀀스 (mask 모두 0) → NaN 없음
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.