はじめに
こんにちは、しゅんです。いつも記事を読んでいただきありがとうございます。今回は、Apple が先日公開した埋め込み(embedding)可視化ツール Embedding Atlas を試してみたレポートです。
公式 README:Embedding Atlas
Embedding Atlas is a tool that provides interactive visualizations for large embeddings. It allows you to visualize, cross-filter, and search embeddings and metadata.
Features
-
🏷️ Automatic data clustering & labeling
Interactively visualize and navigate overall data structure. -
🫧 Kernel density estimation & density contours
Easily explore and distinguish between dense regions of data and outliers. -
🧊 Order-independent transparency
Ensure clear, accurate rendering of overlapping points. -
🔍 Real-time search & nearest neighbors
Find similar data to a given query or existing data point. -
🚀 WebGPU implementation (with WebGL 2 fallback)
Fast, smooth performance (up to few million points) with modern rendering stack. -
📊 Multi-coordinated views for metadata exploration
Interactively link and filter data across metadata columns.
Embedding Atlasとは?
Embedding Atlas は、高次元ベクトルデータ(埋め込み)をブラウザで対話的に可視化できるツールです。
Apple の研究チームが arXiv で論文発表もしており、WebGPU の高速レンダリングに加えて、クラスタリングや密度推定、Nearest Neighbors 検索、複数ビュー連動などの分析機能をワンストップで提供します。
公式の使い方ドキュメント
インストールと起動
1. Python CLI
pip install embedding-atlas
embedding-atlas your_data.parquet
Parquet 形式のテーブル(行:埋め込みベクトル+メタデータ)を指定するだけで、ブラウザ GUI が立ち上がります。
2. Jupyter ウィジェット
from embedding_atlas.widget import EmbeddingAtlasWidget
EmbeddingAtlasWidget(df, x="proj_x", y="proj_y", text="label")
Notebook 内に埋め込みビューが埋め込まれます。
3. Web コンポーネント(npm)
npm install embedding-atlas
React/Svelte などに <EmbeddingAtlas …/>
として組み込めます。
サンプル1:Iris データでお試し
まずは手軽な Iris データセット(150 サンプル、4 次元)で動作確認。
Iris → UMAP → Parquet 変換
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import umap
# ① Iris データを読み込む
data = load_iris()
X = data.data # (150,4)
# ② DataFrame 作成 + ラベル
df = pd.DataFrame(X, columns=[f"x{i}" for i in range(4)])
df["label"] = pd.Categorical.from_codes(data.target, data.target_names)
# ③ UMAP で 2D 投影
reducer = umap.UMAP(n_neighbors=15, min_dist=0.1, random_state=42)
proj = reducer.fit_transform(X) # (150,2)
df["proj_x"], df["proj_y"] = proj[:,0], proj[:,1]
# ④ Parquet 出力
df.to_parquet("iris_with_proj.parquet", index=False)
print("✅ iris_with_proj.parquet を出力しました")
Embedding Atlas で可視化
embedding-atlas iris_with_proj.parquet \
--x proj_x --y proj_y --text label
Appleが前日新たな新しい埋め込み探索ツールを公開した。早速試してみました。かなり面白かったです
— SYUN@SGD人間 (@syun88AI) July 12, 2025
irisとdigits軽く試して可視化しました。大規模データセットダウンロードしてチャレンジ中#apple pic.twitter.com/sIfqZ7RK8E
Iris の 3 品種がきれいにクラスタリングされました。
サンプル2:Kaggle “NeurIPS – Ariel Data Challenge 2025” データ
1,100 惑星規模のスペクトルデータを可視化。
前処理+UMAP 変換スクリプト
#!/usr/bin/env python3
# make_NeurIPS_Ariel_Data_2025.py
import os
import pandas as pd
import umap
# ファイルパス
STAR_INFO = "/Volumes/data/kaggle_dataset/ariel-data-challenge-2025/train_star_info.csv"
WAVELENGTHS = "/Volumes/data/kaggle_dataset/ariel-data-challenge-2025/wavelengths.csv"
TRAIN_CSV = "/Volumes/data/kaggle_dataset/ariel-data-challenge-2025/train.csv"
OUT_PQ = "ariel_embeddings.parquet"
# メタデータ読み込み
star_info = pd.read_csv(STAR_INFO, index_col="planet_id")
# wavelengths.csv の先頭行を波長配列として取得
wl_df = pd.read_csv(WAVELENGTHS)
wavelengths = wl_df.iloc[0].values # (283,)
# train.csv 読み込み
train = pd.read_csv(TRAIN_CSV, index_col="planet_id")
flux_cols = train.columns.tolist() # 全 283 列
X = train[flux_cols].values # (1100,283)
# UMAP 投影
reducer = umap.UMAP(n_neighbors=20, min_dist=0.1, random_state=42)
proj = reducer.fit_transform(X) # (1100,2)
# DataFrame 結合
col_names = [f"flux_{w:.3f}" for w in wavelengths]
df = pd.DataFrame(X, columns=col_names, index=train.index)
df = df.join(star_info, how="left")
df["proj_x"], df["proj_y"] = proj[:,0], proj[:,1]
# Parquet 出力
df.to_parquet(OUT_PQ)
print(f"✅ {OUT_PQ} を出力しました (shape={df.shape})")
可視化
embedding-atlas ariel_embeddings.parquet \
--x proj_x --y proj_y --text planet_id
NeurIPS - Ariel Data Challenge 2025のデータセットも可視化できた pic.twitter.com/C1ZvZjh9TP
— SYUN@SGD人間 (@syun88AI) July 12, 2025
サンプル3:CHB-MIT EEG データ(44セッション & ウィンドウ分割)
(次回の記事にします)
まとめ
Embedding Atlas は「行=埋め込み+メタデータ」の Parquet さえ用意できれば、
– 数百万点でも高速に描画
– 自動クラスタリング/密度推定/最近傍探索
– メタデータ連携ビューでフィルタ&カラー
がノーコードに近いレベルで使えます。
データサイエンスや研究、ダッシュボードへの組み込みなど、多彩な用途でぜひお試しください!