메인 콘텐츠로 건너뛰기
Embedding projector
Embeddings 는 사람, 이미지, 포스트, 단어 등과 같은 오브젝트를 숫자 리스트(흔히 벡터 라고 함)로 표현하는 데 사용됩니다. 기계학습 및 데이터 과학 유스 케이스에서, embeddings는 다양한 애플리케이션에 걸쳐 여러 접근 방식을 통해 생성될 수 있습니다. 이 페이지는 독자가 embeddings에 익숙하며, W&B 내에서 이를 시각적으로 분석하는 데 관심이 있다고 가정합니다.

Embedding 예시

Hello World

W&B를 사용하면 wandb.Table 클래스를 사용하여 embeddings를 로그할 수 있습니다. 각각 5개의 차원으로 구성된 3개의 embeddings 예시를 살펴보겠습니다:
import wandb

# embedding_tutorial 프로젝트로 run 초기화
with wandb.init(project="embedding_tutorial") as run:
  embeddings = [
      # D1   D2   D3   D4   D5
      [0.2, 0.4, 0.1, 0.7, 0.5],  # embedding 1
      [0.3, 0.1, 0.9, 0.2, 0.7],  # embedding 2
      [0.4, 0.5, 0.2, 0.2, 0.1],  # embedding 3
  ]
  run.log(
      {"embeddings": wandb.Table(columns=["D1", "D2", "D3", "D4", "D5"], data=embeddings)}
  )
  run.finish()
위의 코드를 실행하면 W&B 대시보드에 데이터가 포함된 새로운 Table이 생성됩니다. 우측 상단의 패널 선택기에서 2D Projection 을 선택하여 embeddings를 2차원으로 시각화할 수 있습니다. 스마트 기본값이 자동으로 선택되며, 기어 아이콘을 클릭하여 액세스하는 설정 메뉴에서 이를 쉽게 변경할 수 있습니다. 이 예시에서는 사용 가능한 5개의 숫자 차원을 모두 자동으로 사용합니다.
2D projection example

Digits MNIST

위의 예시는 embeddings를 로그하는 기본적인 메커니즘을 보여주지만, 일반적으로는 훨씬 더 많은 차원과 샘플을 다루게 됩니다. SciKit-Learn 을 통해 제공되는 MNIST Digits 데이터셋(UCI ML 수기 숫자 데이터셋)을 살펴보겠습니다. 이 데이터셋은 1797개의 레코드를 가지고 있으며, 각각 64개의 차원을 가집니다. 이 문제는 10개 클래스 분류 유스 케이스입니다. 시각화를 위해 입력 데이터를 이미지로 변환할 수도 있습니다.
import wandb
from sklearn.datasets import load_digits

with wandb.init(project="embedding_tutorial") as run:

  # 데이터셋 로드
  ds = load_digits(as_frame=True)
  df = ds.data

  # "target" 컬럼 생성
  df["target"] = ds.target.astype(str)
  cols = df.columns.tolist()
  df = df[cols[-1:] + cols[:-1]]

  # "image" 컬럼 생성
  df["image"] = df.apply(
      lambda row: wandb.Image(row[1:].values.reshape(8, 8) / 16.0), axis=1
  )
  cols = df.columns.tolist()
  df = df[cols[-1:] + cols[:-1]]

  run.log({"digits": df})
위 코드를 실행하면 다시 UI에 Table이 나타납니다. 2D Projection 을 선택하면 embedding의 정의, 색상 지정, 알고리즘(PCA, UMAP, t-SNE), 알고리즘 파라미터, 그리고 오버레이(이 경우 점 위에 마우스를 올리면 이미지를 표시)를 설정할 수 있습니다. 이 특정 사례에서는 이 모든 것이 “스마트 기본값”으로 설정되어 있어, 2D Projection 을 한 번만 클릭해도 매우 유사한 결과를 볼 수 있습니다. (이 embedding 튜토리얼 예시를 직접 확인해 보세요).
MNIST digits projection

로그 옵션

다양한 형식으로 embeddings를 로그할 수 있습니다:
  1. 단일 Embedding 컬럼: 데이터가 이미 “행렬”과 같은 형식인 경우가 많습니다. 이 경우 단일 embedding 컬럼을 생성할 수 있으며, 셀 값의 데이터 타입은 list[int], list[float] 또는 np.ndarray 가 될 수 있습니다.
  2. 다중 숫자 컬럼: 위의 두 예시에서는 이 방식을 사용하여 각 차원에 대해 컬럼을 생성했습니다. 현재 셀 값으로 파이썬 int 또는 float 을 허용합니다.
Single embedding column
Multiple numeric columns
또한, 모든 테이블과 마찬가지로 테이블을 구성하는 방법에 대해 다양한 옵션이 있습니다:
  1. wandb.Table(dataframe=df) 를 사용하여 데이터프레임에서 직접 생성
  2. wandb.Table(data=[...], columns=[...]) 를 사용하여 데이터 리스트에서 직접 생성
  3. 행 단위로 점진적으로 테이블 빌드(코드에 루프가 있는 경우 유용). table.add_data(...) 를 사용하여 테이블에 행 추가
  4. 테이블에 embedding 컬럼 추가(embeddings 형태의 예측값 리스트가 있는 경우 유용): table.add_col("col_name", ...)
  5. 계산된 컬럼 추가(테이블에 매핑하려는 함수나 모델이 있는 경우 유용): table.add_computed_columns(lambda row, ndx: {"embedding": model.predict(row)})

시각화 옵션

2D Projection 을 선택한 후, 기어 아이콘을 클릭하여 렌더링 설정을 편집할 수 있습니다. 대상 컬럼을 선택하는 것(위 내용 참조) 외에도, 원하는 알고리즘(및 해당 파라미터)을 선택할 수 있습니다. 아래에서 UMAP과 t-SNE의 파라미터를 각각 확인할 수 있습니다.
UMAP parameters
t-SNE parameters
참고: 현재 세 가지 알고리즘 모두에 대해 무작위 서브셋인 1000개의 행과 50개의 차원으로 다운샘플링합니다.