추가적으로 개선할 사항 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

1. 방안

a. 클러스터링 단계와 결합

  • 소규모 노이즈 클러스터 처리
    • HDBSCAN에서 label = –1(노이즈)인 이미지는 별도 softmax 할당으로만 처리하거나,
    • 인접 클러스터와 병합해 대표 태그 선정에 활용

b. 클러스터 내 대표 태그 선정 단계와 결합

  • Prototype 안정화 (평균/중간값)
    • 프롬프트별 4개 임베딩 중 max 대신 mean 또는 median 사용 → 잡음 감소
  • 분산 기반 가중치
    • 각 태그별로 프롬프트 임베딩 간 variance를 계산해,
      • 분산 작을수록(=일관성 높을수록) T_j에 추가 점수 부여
  • 동적 τ 설정
    • 클러스터 내 모든 유사도 분포의 평균±σ 또는 백분위수 기반으로 τ 자동 산출#

c. 이미지별 할당 & “기타” 처리 단계와 결합

  • Softmax 온도 조절
    • probs = (sims/temperature).softmax(dim=-1) 로 분포 샤프닝 → confidence 조절
  • Calibration (평균 보정)
    • sims = sims – sims.mean() 해주면 모달 갭 편향 완화
  • 동적 confidence_threshold 설정
    • 전체 이미지의 softmax max 분포를 보고 (예: 75번째 백분위수) 기준치 자동 산출

d. Cross-Encoder 재랭킹 (선택적)

  • 1차로 뽑힌 상위 5개 태그에 대해,
    • cross-encoder (이미지 + 각 태그 텍스트) 를 돌려 최종 1순위 재랭킹
    • (단, 추가 모델 inference 비용이 수용 가능할 때 사용)

2. 도입 예시

a. 이미지 클러스터링

  • 목적: 비슷한 이미지끼리 그룹화하여, 같은 클러스터 내에서 일관된 태그를 뽑아 노이즈 감소

  • 방법 예시

    # image_feats: (N, D) tensor
    import hdbscan
    clusterer = hdbscan.HDBSCAN(min_cluster_size=10, metric='cosine')
    labels = clusterer.fit_predict(image_feats.cpu().numpy())  # -1: 노이즈
    
    • min_cluster_size, metric 등을 튜닝해 적절한 군집 수와 품질 확보

b. 클러스터 내 대표 태그 선정

  • 점수 계산

    • 각 클러스터 C, 태그 후보 j에 대해
      1. 유사도 합산:

        $S_j = \sum_{i\in C} \cos(f_i, p_j)$

      2. 강한 자신감 보너스: 특정 Threshold ($\tau$) 초과의 유사도를 가지는 태그가 있으면 가중치 부여

        $B_j = w;\bigl|{i\in C \mid \cos(f_i, p_j) > \tau}\bigr|$

      3. 총합:

        $T_j = S_j + B_j$

  • 대표 5개 태그:

    • $T_j$ 기준 상위 5개 태그 추출
    • 노이즈 클러스터(label=-1)는 ‘기타’ 처리

c. 이미지별 최종 할당 & “기타” 처리

  • Softmax 기반 할당

    # img_feat: (D,), candidate_text_feats: (5, D)
    sims  = img_feat @ candidate_text_feats.T           # (5,)
    probs = sims.softmax(dim=-1)                        # (5,)
    pred  = probs.argmax()                              # 0~4 인덱스
    conf  = probs.max().item()                          # 최고 확신도
    
  • “기타” 분류

    • conf < confidence_threshold (예: 0.2) 이면 → “기타” 로 분류
    • 그렇지 않으면 pred 인덱스에 해당하는 태그 할당