Embedding Atlas:苹果开源的大规模向量交互可视化工具

AI 模型在处理文字、图片、用户行为时,会把这些内容转换成一长串数字——也就是"向量"(embedding)。比如一段文字可能变成 [0.23, -0.81, 0.47, ...] 这样上千个浮点数。向量越相似,代表原始内容在语义上越接近,这是现代搜索、推荐和 RAG 系统的底层基础。

但这里有个让人头疼的问题:向量根本没法直接"看"

你打印出来是一堆小数,完全看不出意义。你想知道:模型学到的两个相似概念,向量是否真的挨在一起?数据有没有明显跑偏的异常点?整体分布是否合理?——这些问题靠肉眼看数字是没有答案的。

通常的做法是用 UMAP 或 t-SNE 把向量降维到二维,再用 matplotlib 画散点图。能看,但很麻烦:图是静态的,画出来不能交互;数据量一大,渲染就卡;想筛某个类别、查某个点的原始内容,都要回去改代码重跑。

Embedding Atlas 是苹果开源的一套交互式可视化工具,把这个流程做成了浏览器里的实时界面——降维、渲染、聚类、搜索在同一个工具里完成,支持数百万个数据点直接交互。

项目地址:https://github.com/apple/embedding-atlas (opens in a new tab)

image.png

主要功能

自动聚类与标注

工具会自动对数据点做聚类,并为每个聚类生成标签,方便在可视化界面中快速识别数据的整体分布结构。聚类算法是用 Rust 实现的,独立于前端渲染层。

密度估计与密度轮廓

通过核密度估计,在点云图上绘制密度轮廓,直观区分数据集中区域与离群点分布。对于识别数据质量问题(如某类数据明显过于集中或分散)有一定参考价值。

顺序无关的透明度渲染

在数据点密集重叠时,普通渲染方式容易因为绘制顺序不同产生视觉误差。Embedding Atlas 采用了顺序无关的透明度(Order-Independent Transparency)处理重叠点,使密集区域的点分布更准确。

实时相似搜索

支持输入一段文本或选取一个已有的数据点,实时在图上高亮出最近邻的数据点。这在排查向量相似度计算结果是否符合预期时较为实用。

多视图联动过滤

界面支持同时展示向量图和元数据表格,在图上框选一个区域,表格会同步过滤;在表格里筛选某个属性值,图上对应的点也会高亮。两个视图之间是双向联动的。

WebGPU 渲染(含 WebGL 2 降级)

渲染层基于 WebGPU 实现,在支持 WebGPU 的浏览器(目前主要是 Chrome 113+)上运行;不支持 WebGPU 的环境会自动降级到 WebGL 2。UMAP 降维部分编译为 WebAssembly,在前端直接运行,不需要服务端计算。

安装与使用

Embedding Atlas 提供三条使用路径,适合不同的工作场景。

路径一:命令行工具

适合快速查看一个已有的 parquet 数据文件,不需要写代码。

前提条件:已安装 Python 3.8+

pip install embedding-atlas
步骤命令说明
安装pip install embedding-atlas安装命令行工具和 Python 包
启动embedding-atlas your_data.parquet本地启动可视化服务,浏览器自动打开

数据文件需要是 parquet 格式,包含一个存储向量数组的列(浮点类型),以及可选的元数据列(文本、分类标签等)。

使用示例:假设你有一份文本向量数据集 texts.parquet,其中有 embedding 列(1536 维浮点数组)和 label 列(分类标签),运行:

embedding-atlas texts.parquet

工具会启动一个本地服务,浏览器打开后自动对数据做 UMAP 降维,渲染成二维点云图,点的颜色按 label 字段区分。

路径二:Jupyter Widget

适合在数据分析流程中,边处理数据边可视化,不用离开 Notebook 环境。

前提条件:已安装 Jupyter,并安装了 embedding-atlas Python 包

from embedding_atlas.widget import EmbeddingAtlasWidget
import pandas as pd
 
df = pd.read_parquet("your_data.parquet")
EmbeddingAtlasWidget(df)

Widget 会在 Notebook 的 cell 输出区域内渲染交互式可视化界面,支持完整的点选、筛选、搜索功能。

路径三:前端 npm 组件

适合把向量可视化能力嵌入到已有的前端应用中,比如内部数据平台或 AI 工具的 Debug 界面。

前提条件:Node.js 项目,支持 React 或 Svelte

npm install embedding-atlas

包内提供了三个主要组件:

组件用途
EmbeddingAtlas完整界面,含点云图 + 元数据表格 + 搜索
EmbeddingView仅点云图部分,适合嵌入到自定义布局
Table仅元数据表格部分

基本引用方式:

import { EmbeddingAtlas } from "embedding-atlas";
 
// 在组件中使用
<EmbeddingAtlas data={yourData} />

具体 Props 文档见官方文档:https://apple.github.io/embedding-atlas/ (opens in a new tab)

与常见方案的差异

相比直接用 Python 的 UMAP + matplotlib 生成静态图,Embedding Atlas 的主要差异在于:交互式探索、更大的数据规模支持(百万级),以及把降维、渲染、搜索整合在同一个工具内。

相比通用的数据可视化库(如 Plotly、Vega),它更专注于 embedding 这个特定场景,内置了 UMAP 降维和最近邻搜索,不需要在使用前额外处理数据。代价是灵活性较低——图表类型是固定的,适配场景相对单一。

项目背后有两篇 arXiv 论文(arXiv:2505.06386 和 arXiv:2504.07285),聚类和密度估计的实现有学术依据,不是简单的工程拼接。

写在最后

Embedding Atlas 适合在需要深入理解或调试向量数据时使用,比如验证向量数据库的索引质量、评估 embedding 模型的聚类效果、或者排查 RAG 召回结果不符合预期的原因。

它在数据规模上有一定优势——百万级数据点在浏览器里可以流畅交互,这在常规方案里较难达到。但它也不是通用工具,如果只是偶尔画个小规模散点图,直接用 Python 更直接。

对前端开发者来说,项目的 WebGPU + WebAssembly 技术组合值得参考,渲染层和计算层分别用不同的技术栈处理各自擅长的部分,是一个真实场景下的 WebGPU 工程案例。

项目目前 MIT 协议开源,4.6k star,处于活跃维护状态。

GitHub:https://github.com/apple/embedding-atlas (opens in a new tab)