데이터 샘플링

  • 단순히 "데이터 줄이기"가 아니라 데이터 분포를 재조정하여 모델이 학습해야 할 목표 분포를 만드는 과정

자동완성에서 실제로 쓰이는 샘플링 기법들

1. Subsampling

  • 과다 등장 쿼리/토큰의 등장 확률 제어
  • 단순히 “빈도가 높은 쿼리를 일정 비율로 줄이기”가 아니라, 아래 두 가지 문제를 해결하기 위한 확률적 다운샘플링
    • Zipf's Law로 인해 상위 몇백 개 쿼리가 전체 데이터의 50% 이상 차지하는 문제 해결
    • Transformer 학습 시 loss가 특정 패턴에 과도하게 최적화되는 것 방지
  • 결과
    • 데이터 다양성 증대
    • 상위 쿼리 편향 감소
    • 모델이 "날씨", "뉴스", "유튜브" 같은 패턴만 배우는 문제 완화
예)
- “날씨”가 하루 50만 번 → 50만 개 모두 사용 X
- 확률 0.01로 줄여서 약 5천 개만 학습

2. Weighted Time Sampling(Temporal Decay Sampling)

  • 자동완성은 트렌드 민감도가 매우 높기 때문에 단순 시간 가중치가 아니라, 대부분 지수 감쇠(Exponential Decay) 기법을 사용
  • 특징
    • 최근 검색 데이터는 거의 100% 유지
    • 오래된 데이터는 자동으로 가중치 감소
    • 일간/주간 트렌드 반영이 매우 빠름
  • 실제 구현은 연속적인 decay curve 형태로 시간별 sampling weight가 달라짐

3. Frequency-Aware Balanced Sampling(구간 기반 균형 샘플링)

  • Zipf 분포를 flatten 하기 위해 쿼리 빈도 로그를 구간(bin) 으로 나누고, 각 구간별 target distribution을 맞추는 방식
  • 자동완성 모델의 목표: “다양한 패턴 + 충분한 희귀 패턴 + 과다 패턴 억제”
    • 다양성을 확보하기 위해 인기 검색어/드문 검색어 구간을 만들어 균형 있게 샘플링
  • rare query oversampling 시 노이즈 비율이 증가할 수 있어서,
    • 정제된 rare bucket만 100% 사용하고 raw 로그 rare bucket은 일부만 retention 하기도 함
검색어 종류샘플링 비율
상위 인기 1~1001%
중간 인기 101~10,00010%
드문 검색어100%

4. Negative Sampling (Contextual Negative Mining)

  • 단순 랜덤 샘플링이 아니라, 문맥적으로 "헷갈릴 만한" 잘못된 후보를 생성하는 것이 핵심

(1) 유형

  • Random negative

    • 가장 기본적인 수준
    • "치킨" → "축구" 같은 무관 negative
  • Hard negative

    • 최근 모델들은 “문맥은 비슷하지만 자연스럽지 않은 continuation”을 생성한다
"치킨" → "치킨 가격"은 긍정
"치킨" → "치킨 반지름"은 hard negative 
  • In-batch negative
    • Transformer 학습에서 가장 많이 씀
    • batch 내 다른 라벨을 negative로 재사용
    • 학습 효율 ↑, 메모리 효율 ↑

(2) 목적

  • 모델이 자연스러운 다음 검색어를 구분하게 됨
  • perplexity 개선
  • 자동완성 품질 상승

5. Query Session Based Sampling (사용자 의도 단위 샘플링)

  • 단순히 “세션을 묶어서 함께 샘플링”이 아니라, 사용자 의도 전환(Intent shift)을 기준으로 세그먼트 분리 후 샘플링하는 방식

(1) 세션 분리 기준

  • 시간 기반: 30분 inactivity
  • intent 기반: 검색어 embedding cosine similarity가 threshold 이하일 때 split
  • action 기반: 클릭/스크롤 등 사용자 행동

(2) 이유

  • 자동완성은 “사용자가 다음에 무엇을 검색할까?” 를 예측하는 task이기 때문에 세션 기반 데이터는 strong supervision signal을 줌
[치킨] → [치킨 배달] → [배달 시간]

6. Deduplication Sampling (중복 제어 + Noise Reduction)

  • 단순 중복 제거가 아니라 아래 단계로 구성됨

(1) Exact deduplication

  • 동일한 쿼리는 user-level / global-level로 중복 제거

(2) Fuzzy deduplication

  • 오타나 경미한 철자 차이가 있는 쿼리를 묶어서 처리
    • 예: “아이폰배터리” / “아이폰 베터리” / “iphone battery”
  • Levenshtein distance 기반 또는 embedding distance 기반으로 병합

(3) Spam/automation detection

  • 의도적으로 반복되는 자동화 트래픽 제거
  • 안티 스팸 모듈과 연동
  • 이 단계에서 품질이 확연히 좋아짐

실제 자동 완성 모델 학습 파이프라인에서의 샘플링 흐름

  • 전체 쿼리 로그 → 깨끗하게 정제(Cleaning) → 샘플링 → 모델 학습
(원본 쿼리 로그: 5억~20억 건)
   ↓
1) Cleaning
   - 스팸/자동화 필터링
   - 인코딩/오타 normalization
   - fuzzy deduplication
   ↓
2) Frequency-based Subsampling
   - Zipf 상위 쿼리 다운샘플링
   - 각 bucket별 target distribution 설정
   ↓
3) Temporal Weighted Sampling
   - exponential decay 적용
   - 최근 트렌드 weight 강화
   ↓
4) Negative Sampling (In-batch + Hard negative mining)
   - 자연스러운/비자연스러운 continuation 데이터 구성
   ↓
5) Session-based Sampling
   - intent shift 기준으로 세션 segmentation
   - session-aware pair 생성
   ↓
[최종 학습 데이터 ≈ 1~5백만 건 수준의 고품질 샘플]
   ↓
Transformer Decoder / BERT Decoder-Only Autocomplete Model 학습

0개의 댓글