> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/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/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/embedding_projector.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=b15706a1387e149549edb201aa73ce84" alt="Embedding Projector" width="1846" height="1296" data-path="products/wandb/_media/embedding_projector.png" />
</Frame>

[埋め込み](https://developers.google.com/machine-learning/crash-course/embeddings/video-lecture)とは、人、画像、投稿、単語などのオブジェクトを数値のリスト (*ベクトル* と呼ばれることもあります) で表現したものです。機械学習やデータサイエンスでは、さまざまなアプリケーションで多様な手法を使用して埋め込みを生成できます。このページは、埋め込みについての基本的な知識があり、W\&B 内で埋め込みを視覚的に分析したい方を対象としています。

このガイドでは、埋め込みを W\&B にログし、Embedding Projector を使用して PCA、UMAP、t-SNE などの次元削減アルゴリズムで 2D 平面上にプロットする方法を説明します。埋め込みをこのように可視化すると、クラスターを探索したり、データポイント間の関係を調べたり、埋め込みが想定どおりの構造を取得できているかを検証したりできます。

<h2 id="embedding-examples">
  埋め込みのサンプル
</h2>

実際に試す前に、以下のリソースで Embedding Projector の動作を確認できます。

* [インタラクティブなライブデモ report](https://forge.coreweave.com/wandb/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_)

<h3 id="hello-world">
  Hello world
</h3>

この最小構成の例では、埋め込みをログしてプロジェクターで表示するのに必要な最小限のコードを紹介します。W\&B では、`wandb.Table` クラスを使用して埋め込みをログできます。次の例では、それぞれ 5 次元からなる 3 つの埋め込みを使用します。

```python theme={"system"}
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 のダッシュボードに、データを含む新しい Table が追加されます。右上のパネルセレクターから **2D Projection** を選択すると、埋め込みが 2 次元にプロットされます。W\&B は適切なデフォルト値を自動で選択しますが、歯車アイコンをクリックして開く設定メニューで上書きできます。この例では、W\&B は使用可能な 5 つの数値次元をすべて使用しています。

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/weave_hello_world.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=c1648e929a524539cfd247f6f9d022db" alt="2D 射影の例" width="1611" height="708" data-path="products/wandb/_media/weave_hello_world.png" />
</Frame>

<h3 id="digits-mnist">
  Digits MNIST
</h3>

次の例では、より高次元のデータとより豊富なオーバーレイを使用した、より実践的なワークフローを紹介します。前の例では埋め込みをログする基本的な仕組みを示しましたが、実際にはさらに多くの次元やサンプルを扱うのが一般的です。ここでは、[SciKit-Learn](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) で提供されている MNIST Digits データセット ([UCI ML hand-written digits dataset](https://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits)) を例に取り上げます。このデータセットには 1,797 件のレコードが含まれ、各レコードは 64 次元です。これは 10 クラス分類のユースケースです。入力データを画像に変換して可視化することもできます。

```python theme={"system"}
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** を選択すると、埋め込みの定義、色分け、アルゴリズム (PCA、UMAP、t-SNE) 、アルゴリズムのパラメーター、オーバーレイを設定できます。この例では、ポイントにカーソルを合わせると、W\&B によってその画像が表示されます。これらにはすべて適切なデフォルトが設定されているため、**2D Projection** を 1 回クリックするだけで同様の結果が表示されます。[この埋め込みチュートリアルの例を実際に操作してみましょう](https://forge.coreweave.com/wandb/timssweeney/embedding_tutorial/runs/k6guxhum?workspace=user-timssweeney)。

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/embedding_projector.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=b15706a1387e149549edb201aa73ce84" alt="MNIST の数字の射影" width="1846" height="1296" data-path="products/wandb/_media/embedding_projector.png" />
</Frame>

<h2 id="logging-options">
  ログのオプション
</h2>

以下のセクションでは、埋め込みデータを W\&B にログする際にサポートされるデータ構造について説明します。埋め込みは、次のいくつかの形式でログできます。

* **単一の埋め込み列:** データがすでにマトリクスのような形式になっている場合がよくあります。その場合は、単一の埋め込み列を作成できます。セルの値のデータタイプには `list[int]`、`list[float]`、`np.ndarray` のいずれかを使用できます。
* **複数の数値列:** 前述の 2 つのサンプルではこの方法を使用しており、次元ごとに列を作成しています。W\&B は、セルの値として Python の `int` または `float` を受け入れます。

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/logging_options.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=d5ab4209fba5d608a754157f4be6ee92" alt="単一の埋め込み列" width="422" height="301" data-path="products/wandb/_media/logging_options.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/logging_option_image_right.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=b8735ef1a300d9a0355846c7afea1da8" alt="複数の数値列" width="416" height="387" data-path="products/wandb/_media/logging_option_image_right.png" />
</Frame>

他の表と同様に、表はいくつかの方法で作成できます。

* `wandb.Table(dataframe=df)` を使用して、**データフレーム**から直接作成します。
* `wandb.Table(data=[...], columns=[...])` を使用して、**データのリスト**から直接作成します。
* 表を **1 行ずつ段階的に**構築します (コード内でループを使用している場合に便利です)。`table.add_data(...)` を使用して表に行を追加します。
* 表に**埋め込み列**を追加します (埋め込み形式の予測のリストがある場合に便利です): `table.add_col("col_name", ...)`。
* **計算列**を追加します (表の各行に適用したい関数やモデルがある場合に便利です): `table.add_computed_columns(lambda row, ndx: {"embedding": model.predict(row)})`。

<h2 id="plotting-options">
  プロットのオプション
</h2>

埋め込みをログした後、その射影方法とレンダリング方法を調整できます。**2D Projection** を選択したら、歯車アイコンをクリックしてレンダリング設定を編集します。対象の列の選択 (前のセクションを参照) に加えて、使用するアルゴリズムとそのパラメーターも選択できます。次の画像は、UMAP と t-SNE のパラメーターを示しています。

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/plotting_options_left.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=681cc6439ac6c33e4fb5c37c7a428275" alt="UMAP のパラメーター" width="803" height="380" data-path="products/wandb/_media/plotting_options_left.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/plotting_options_right.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=8cf09b9ea80002ee77eab9a7d2512afb" alt="t-SNE のパラメーター" width="799" height="384" data-path="products/wandb/_media/plotting_options_right.png" />
</Frame>

<Note>
  3 つのアルゴリズムのいずれでも、W\&B はデータを 1,000 行・50 次元のランダムなサブセットにダウンサンプリングします。
</Note>


## Related topics

- [サンプルコードとノートブック](/ja/products/wandb/examples.md)
