メインコンテンツへスキップ
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 の ダッシュボード に データ を含む新しい テーブル が表示されます。右上の パネル セレクターから 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 に テーブル が表示されます。 2D Projection を選択することで、embedding の定義、色付け、アルゴリズム(PCA、UMAP、t-SNE)、アルゴリズム パラメータ 、さらにはオーバーレイ(この例ではポイントをホバーしたときに画像を表示する)を 設定 できます。この特定のケースでは、これらはすべて「スマートなデフォルト設定」になっており、 2D Projection を 1 回クリックするだけで、これに近いものが表示されるはずです。( この embedding チュートリアルの例を操作する )。
MNIST digits projection

ログ記録のオプション

embeddings はいくつかの異なる形式で ログ に記録できます。
  1. 単一の Embedding 列: データがすでに「行列」のような形式になっている場合が多いです。この場合、単一の embedding 列を作成できます。セルのデータの型は list[int]list[float] 、または np.ndarray になります。
  2. 複数の数値列: 上記の 2 つの例では、このアプローチを使用して、各次元に対して列を作成しました。現在、セルの値として python の int または float を受け付けています。
Single embedding column
Multiple numeric columns
さらに、すべての テーブル と同様に、テーブル を構築する方法には多くのオプションがあります。
  1. wandb.Table(dataframe=df) を使用して dataframe から直接作成する
  2. wandb.Table(data=[...], columns=[...]) を使用して データリスト から直接作成する
  3. 1行ずつ増分的に テーブルを構築する(コード内にループがある場合に最適)。 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
注:現在、3つのアルゴリズムすべてにおいて、ランダムな 1000 行、50 次元の サブセット にダウンサンプリングされます。