← 문제 목록/Masked Mean Pooling
문제 해설

Masked Mean Pooling

신경망 · easy

preview

Masked Mean Pooling

bag-of-embeddings-v1 는 모든 토큰을 평균했지만, 실제 Transformer 배치는 padding-mask-v1 로 pad 위치를 표시함. pad 는 평균에서 제외 해야 문장 임베딩이 정확해짐 (Sentence-BERT 의 "mean pooling" 도 동일).

pool(x,m)b=lmb,lxb,l,:lmb,l\text{pool}(x, m)_b = \frac{\sum_{l} m_{b,l} \cdot x_{b,l,:}}{\sum_l m_{b,l}}

  • x: shape (B, L, d) — 토큰별 벡터.
  • mask: shape (B, L) bool — True = 실제 토큰, False = pad.
  • 반환: (B, d).

구현 힌트

m = mask[..., None].astype(float)       # (B, L, 1)
num = (x * m).sum(axis=1)                # (B, d)
den = m.sum(axis=1).clip(min=1e-9)       # (B, 1)
return num / den

0 으로 나눗셈 방지 위해 clip(min=eps) 를 쓰거나, 호출측에서 전부 pad 인 배치는 없다고 가정하세요.

테스트 케이스

#이름검증
1shape (B, d)
2mask 전부 True → 평범한 mean
3pad 제외됨pad 값 바뀌어도 출력 불변
4수식 일치numerator/denominator ref
5서로 다른 유효 길이올바른 분모
코드 작성
Loading...
실행 결과

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