用 t-SNE 看推特名人:浏览器里的降维可视化
这是导读,不是翻译。目标是让你 5 分钟拿到文章的思想地图;值得的话,带着地图去读 英文原文 →
一句话
一个典型的卡帕西式周末项目:先把 t-SNE 降维算法从头移植成 JavaScript 库 tsnejs,再抓取推特关注数最高的 500 个账号各 200 条推文,按「说话像不像」算相似度,最后在浏览器里生成一张会自动聚类的名人地图——歌手挨着歌手,球员挨着球员,科技圈自成一角。
文章讲了什么
- 数据管线:从 twitaholic.com 抓关注榜前 500 的账号,用 Tweepy 拉每人最近 200 条推文,把全部推文拼起来提取 unigram/bigram 的 TF-IDF 向量——每个账号变成一个 87,342 维的向量,两个账号的相似度就是归一化向量的点积,衡量的纯粹是「用词习惯的接近程度」。
- t-SNE 的直觉讲解:这段是全文最有教学价值的部分。t-SNE 把高维距离转成概率分布,在二维里最小化两个分布的 KL 散度;原空间里相近的点在嵌入里互相「吸引」,而不对称的惩罚设计让它优先保住局部结构——这就是为什么 t-SNE 图上的「邻居关系」可信、「大陆间距离」不可信。
- 结果:头像按二维坐标铺开,物以类聚一目了然。库和 demo 都开源了,他还顺手用同一技术做了一个词向量的可视化。
写作背景
2014 年,t-SNE 是学术圈可视化高维数据的标准工具,但基本被锁在 Python/Matlab 生态里。卡帕西当时对「浏览器里跑机器学习」有一种执念——他刚做完在浏览器训练神经网络的 ConvNetJS(见同期访谈),tsnejs 是同一信念的又一次落地:把门槛降到「点开网页就能玩」。这篇和它前一天发的《量化 Hacker News》一样,属于他博士期间「爬数据-做分析-开源-写博客」流水线的产物。
十年后再看
三件事变了。其一,「浏览器跑 ML」从怪癖变成了基础设施——TensorFlow.js、WebGPU、浏览器里跑 LLM,都是他当年押注的方向成真。其二,t-SNE 的地位被 UMAP 部分接替,但「把高维嵌入投到二维看聚类」已成为每个做 embedding 的人的日常——今天你在向量数据库文档里看到的每张聚类图都是这篇的后代。其三,讽刺的是,管线里最脆弱的一环先死了:推特 API 的开放时代结束,这种「随手抓 500 个账号」的项目如今在授权上几乎不可行。算法开源永生,数据入口易逝。
对你意味着什么
- 学 ML 的人:文中对 t-SNE 的直觉解释仍是中文教材少有的清晰度来源;记住那条使用守则——相信局部邻居,别解读簇间距离。
- 做 AI 应用的开发者:这套「文本→向量→降维→可视化」管线,今天换成 embedding 模型 + UMAP 依然是理解你的数据集、给用户展示语义空间的标准招式。
- 独立开发者:注意这个项目的配方——把一个被生态锁住的工具移植到人人可用的平台,再配一个有趣的 demo。这个套路在今天依然屡试不爽。
延伸阅读
- 英文原文 · tsnejs 代码
- 导读:2014 年的一次访谈 —— ConvNetJS 与「浏览器跑 ML」的完整理念
- 导读:《量化 Hacker News》 —— 同期的数据抓取与分析项目
- 导读:《RNN 的不合理有效性》 —— 一年后,从可视化玩具走向语言模型