nomic
让 AI 看见你的数据:把高维向量可视化成交互地图的开源 Python SDK
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让 AI 看见你的数据:把高维向量可视化成交互地图的开源 Python SDK
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨三点,研究生小李盯着屏幕上的 5 万条论文摘要发愁——导师要求从 arXiv 的海量投稿中找到「检索增强生成(RAG)」领域的最新进展,用手翻根本不可能。她想起导师推荐过一个工具:上传数据,点几下鼠标,数据就会自动按照语义相似性排列成一张「地图」,相关主题的数据点自动聚集在一起,噪声与信号一目了然。
这个场景,正是 Nomic Atlas 诞生的理由。
Embedding(向量化)是把文本、图片、音频这类非结构化数据,转换成数学向量的技术。向量之间距离越近,代表语义越相似——这让机器能够「理解」数据之间的关系。但问题随之而来:向量是高维数学对象,人脑无法直接感知,如何判断聚类是否合理?
Nomic 的答案是:把高维向量降维到二维,直接画在一张交互式地图上。
这不只是「可视化」那么简单。Atlas 的核心在于可审计(auditable)——每一张地图背后都连接着完整的原始数据,你点一个数据点,可以追溯到它来自哪篇文档、哪个段落,甚至是谁上传的。这种「从图回到数据」的闭环能力,是 Atlas 与普通可视化工具的本质区别。
从技术演进角度看,Atlas 经历了多次迭代:从最早的文本 Embedding 可视化,到支持图像 Embedding,再到 PDF/Office 多格式文档解析和 OCR 多语言支持,SDK 也在从早期版本(setup.py 中 version 3.9.0)逐步演进,功能越来越完善。
nomic-python 是 Atlas 平台的官方 Python 客户端,采用典型微内核 + 插件架构,代码组织清晰。
核心模块职责:
client.py:HTTP 客户端封装、任务轮询机制(PlatformTask 泛型类)、文件上传(S3 预签名 URL)、多类型文档解析。值得注意的是,文件上传走的是 AWS S3 预签名 URL(client.upload_file)——上传发生在客户端到 S3,不经过 Nomic 中间服务器,支持大文件分片。dataset.py:数据集操作核心:创建、查询、标签管理,返回 AtlasDataset 和 AtlasUser 对象。atlas.py:地图生成:Embedding 计算请求、主题建模、语义搜索,入口函数 map_data。embed.py:Embedding 生成逻辑封装。data_inference.py:数据推理与批量处理。data_operations.py:数据去重、清洗等操作。client_models.py:Pydantic V2 数据模型,包含 ParseRequest/ExtractRequest 等复杂嵌套结构,用于文档解析(PDF/Office)、OCR 语言配置(OcrLanguage)、图/表摘要选项。cli.py:命令行入口,核心命令 nomic login 完成 API Key 鉴权,Token 通过 ~/.nomic 目录持久化存储。依赖生态分析: 项目使用 Pydantic V2(>=2,<3)做数据校验和序列化,Rich 做 CLI 美化输出,requests 处理底层 HTTP,filetype 做 MIME 类型检测(基于文件内容而非扩展名),jsonschema 做请求体校验。pyarrow 依赖暗示后端数据传输使用 Arrow 格式,效率高于 JSON。
任务轮询机制: PlatformTask[T] 是一个精巧的泛型类,通过 get(block=True) 方法轮询任务状态(/v1/status/{task_id}),状态为 COMPLETED 时从 result_url 取回结果。超时控制通过 end_time < now 判断,支持非阻塞模式(block=False,抛 TaskPending 异常)。
最常见的场景——把 NumPy 数组上传,Atlas 自动做降维和可视化:
from nomic import atlas
import numpy as np
embeddings = np.random.rand(10000, 256) # 任意高维向量
dataset = atlas.map_data(embeddings=embeddings)
背后流程:SDK 将数据 POST 到 Atlas API,Atlas 调用内部 Embedding 模型做向量化和降维,返回可交互地图 URL。用户可以通过 dataset.maps[0].embeddings.projected 访问降维后的 2D 坐标,map.embeddings.latent 访问原始高维向量。
Atlas 不只处理纯文本,还能直接上传 PDF、Word、Excel、PowerPoint,甚至图片:
from nomic import NomicClient
client = NomicClient()
uploaded = client.upload_file("report.pdf")
response = client.parse_document(
file_id=uploaded.url,
options={
"extract_tables": True,
"extract_figures": True,
"ocr_languages": ["en", "zh"]
}
)
filetype 库根据文件内容而非扩展名判断 MIME 类型,Office 文件(.docx/.pptx/.xlsx)虽然本质是 ZIP 压缩包,但 SDK 通过后缀名二次判断做了正确识别。OCR 支持多语言,这对处理中英混合文档很有用。
Atlas 自动对数据进行主题建模,每个地图区域对应一个语义簇:
map = dataset.maps[0]
topics = map.topics # DataFrame: datum_id, topic_id, topic_name, ...
data_operations 模块提供基于 Embedding 的重复检测,对大规模数据清洗特别有用。对社交媒体数据(如 TikTok)分析中,去重是保证分析准确性的关键步骤。
适合的场景: 学术文献综述、市场调研数据整理、客服对话聚类、代码仓库分析、社交媒体舆情监控。
不适合的场景: 需要本地部署、不想数据上云、实时流式处理(当前 SDK 基于轮询,适合批量处理)。
Nomic 的最大贡献,是让「可解释 AI」不再只停留在论文里。通过 Atlas 地图,研究者和产品经理可以直接「看见」模型看到的数据分布,快速发现异常簇和边界模糊的区域——这是纯数值分析做不到的。它的增长曲线也印证了这一价值:Twitter(5.4M 条推文)、Stable Diffusion 作品(6.4M 张图)、arXiv 论文摘要等大规模数据集纷纷在 Atlas 上被可视化。

图1:Atlas 可视化 arXiv 论文摘要数据——相关主题自动聚集,颜色代表不同研究领域

图2:Atlas 可视化 TikTok 社交媒体数据——基于元数据描述索引,颜色区域代表不同话题簇

图3:Nomic 项目 Banner,展示了从高维 Embedding 到二维地图的降维可视化流程
技术标签: Python SDK · Embedding · 可视化 · 主题建模 · 数据去重 · 语义搜索
适合人群: AI 研究者、数据科学家、产品经理、内容运营
上手门槛: 低(pip 安装 + API Key,三行代码出结果)