> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-wbdocs-1882.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> W&B의 Embedding Projector를 사용하면 PCA, UMAP, t-SNE와 같은 일반적인 차원 축소 알고리즘으로 다차원 임베딩을 2D 평면에 시각화할 수 있습니다.

# 객체 임베딩

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/cwyvvpJAlOQLxt4T/images/weave/embedding_projector.png?fit=max&auto=format&n=cwyvvpJAlOQLxt4T&q=85&s=cef12d7059dbbb7527e12eb7c4e09688" alt="임베딩 프로젝터" width="1846" height="1296" data-path="images/weave/embedding_projector.png" />
</Frame>

[임베딩](https://developers.google.com/machine-learning/crash-course/embeddings/video-lecture)은 숫자 목록으로 객체(사람, 이미지, 게시물, 단어 등...)를 표현하는 데 사용되며, 이를 \_벡터\_라고도 합니다. 머신 러닝 및 데이터 과학에서는 다양한 애플리케이션에서 여러 방식으로 임베딩을 생성할 수 있습니다. 이 페이지는 독자가 임베딩에 익숙하고 W\&B 내에서 이를 시각적으로 분석하는 데 관심이 있다고 가정합니다.

<div id="embedding-examples">
  ## 임베딩 예제
</div>

* [라이브 대화형 데모 리포트](https://wandb.ai/timssweeney/toy_datasets/reports/Feature-Report-W-B-Embeddings-Projector--VmlldzoxMjg2MjY4?accessToken=bo36zrgl0gref1th5nj59nrft9rc4r71s53zr2qvqlz68jwn8d8yyjdz73cqfyhq)
* [Colab 예제](https://colab.research.google.com/drive/1DaKL4lZVh3ETyYEM1oJ46ffjpGs8glXA#scrollTo=D--9i6-gXBm_).

<div id="hello-world">
  ### Hello World
</div>

W\&B에서는 `wandb.Table` 클래스를 사용해 임베딩을 로깅할 수 있습니다. 다음은 각각 5개 차원으로 구성된 3개의 임베딩 예시입니다:

```python theme={null}
import wandb

with wandb.init(project="embedding_tutorial") as run:
  embeddings = [
      # D1   D2   D3   D4   D5
      [0.2, 0.4, 0.1, 0.7, 0.5],  # 임베딩 1
      [0.3, 0.1, 0.9, 0.2, 0.7],  # 임베딩 2
      [0.4, 0.5, 0.2, 0.2, 0.1],  # 임베딩 3
  ]
  run.log(
      {"embeddings": wandb.Table(columns=["D1", "D2", "D3", "D4", "D5"], data=embeddings)}
  )
  run.finish()
```

위 코드를 실행하면 W\&B 대시보드에 데이터가 들어 있는 새 테이블이 생성됩니다. 오른쪽 상단의 패널 선택기에서 `2D Projection`을 선택하면 임베딩을 2차원으로 시각화할 수 있습니다. `Smart default`가 자동으로 선택되며, 톱니바퀴 아이콘을 클릭해 열 수 있는 설정 메뉴에서 쉽게 재정의할 수 있습니다. 이 예제에서는 사용 가능한 5개의 수치형 차원을 모두 자동으로 사용합니다.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/gvIZGkH-i0H7aNZQ/images/app_ui/weave_hello_world.png?fit=max&auto=format&n=gvIZGkH-i0H7aNZQ&q=85&s=8da79ee8346cf32a4c565845608062ff" alt="2D 프로젝션 예제" width="1611" height="708" data-path="images/app_ui/weave_hello_world.png" />
</Frame>

<div id="digits-mnist">
  ### MNIST 숫자
</div>

위 예시는 임베딩을 로깅하는 기본적인 방식을 보여주지만, 일반적으로는 훨씬 더 많은 차원과 샘플을 다루게 됩니다. [SciKit-Learn](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html)에서 제공되는 MNIST 숫자 데이터셋([UCI ML hand-written digits dataset](https://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits)[s](https://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits))을 살펴보겠습니다. 이 데이터셋에는 1797개의 레코드가 있으며, 각 레코드는 64차원입니다. 이 문제는 10개 클래스로 분류하는 사용 사례입니다. 시각화를 위해 입력 데이터를 이미지로 변환할 수도 있습니다.

```python theme={null}
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에 다시 테이블이 표시됩니다. `2D Projection`을 선택하면 임베딩 정의, 색상, 알고리즘(PCA, UMAP, t-SNE), 알고리즘 매개변수, 심지어 오버레이까지 설정할 수 있습니다(이 경우에는 포인트 위에 마우스를 올리면 이미지가 표시됩니다). 이 경우에는 모두 "smart defaults"가 적용되어 있으므로 `2D Projection`을 한 번만 클릭해도 거의 동일한 결과를 볼 수 있습니다. ([이 임베딩 튜토리얼 예제를 직접 살펴보기](https://wandb.ai/timssweeney/embedding_tutorial/runs/k6guxhum?workspace=user-timssweeney)).

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/cwyvvpJAlOQLxt4T/images/weave/embedding_projector.png?fit=max&auto=format&n=cwyvvpJAlOQLxt4T&q=85&s=cef12d7059dbbb7527e12eb7c4e09688" alt="MNIST 숫자 프로젝션" width="1846" height="1296" data-path="images/weave/embedding_projector.png" />
</Frame>

<div id="logging-options">
  ## 로깅 옵션
</div>

임베딩은 여러 형식으로 로깅할 수 있습니다.

1. **단일 임베딩 열:** 데이터가 이미 "행렬"과 비슷한 형식인 경우가 많습니다. 이 경우 단일 임베딩 열을 만들 수 있으며, 셀 값의 데이터 유형은 `list[int]`, `list[float]`, 또는 `np.ndarray`일 수 있습니다.
2. **여러 숫자 열:** 위의 두 예제에서는 이 방식을 사용해 각 차원마다 열을 하나씩 만듭니다. 현재 셀 값으로는 Python `int` 또는 `float`를 지원합니다.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/cwyvvpJAlOQLxt4T/images/weave/logging_options.png?fit=max&auto=format&n=cwyvvpJAlOQLxt4T&q=85&s=226c6fd6cc812f16ccfcdd01242e1f53" alt="단일 임베딩 열" width="422" height="301" data-path="images/weave/logging_options.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/cwyvvpJAlOQLxt4T/images/weave/logging_option_image_right.png?fit=max&auto=format&n=cwyvvpJAlOQLxt4T&q=85&s=8fe94b743399c41dcddbe44f29da9699" alt="여러 숫자 열" width="416" height="387" data-path="images/weave/logging_option_image_right.png" />
</Frame>

또한 다른 모든 테이블과 마찬가지로, 테이블을 구성하는 방법에도 여러 옵션이 있습니다.

1. `wandb.Table(dataframe=df)`를 사용해 **데이터프레임**에서 직접 생성
2. `wandb.Table(data=[...], columns=[...])`를 사용해 **데이터 목록**에서 직접 생성
3. 테이블을 **행별로 점진적으로** 작성 (코드에 루프가 있을 때 유용). `table.add_data(...)`를 사용해 테이블에 행 추가
4. 테이블에 **임베딩 열** 추가 (임베딩 형태의 예측 목록이 있을 때 유용): `table.add_col("col_name", ...)`
5. **계산된 열** 추가 (테이블의 각 행에 적용할 함수나 모델이 있을 때 유용): `table.add_computed_columns(lambda row, ndx: {"embedding": model.predict(row)})`

<div id="plotting-options">
  ## 플로팅 옵션
</div>

`2D Projection`을 선택한 후 톱니바퀴 아이콘을 클릭하면 렌더링 설정을 편집할 수 있습니다. 원하는 열을 선택하는 것(위 참조) 외에도 관심 있는 알고리즘과 원하는 매개변수를 선택할 수 있습니다. 아래에는 각각 UMAP과 t-SNE의 매개변수가 나와 있습니다.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/cwyvvpJAlOQLxt4T/images/weave/plotting_options_left.png?fit=max&auto=format&n=cwyvvpJAlOQLxt4T&q=85&s=7689cc86ace40419213da6d075dcf91f" alt="UMAP 매개변수" width="803" height="380" data-path="images/weave/plotting_options_left.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/cwyvvpJAlOQLxt4T/images/weave/plotting_options_right.png?fit=max&auto=format&n=cwyvvpJAlOQLxt4T&q=85&s=62218378d696033bab6b6256c5d7cecc" alt="t-SNE 매개변수" width="799" height="384" data-path="images/weave/plotting_options_right.png" />
</Frame>

<Note>
  참고: 현재 세 알고리즘 모두에 대해 1000개 행과 50개 차원의 무작위 부분집합으로 다운샘플링합니다.
</Note>
