用神经网络嵌入字体:当字体地图长成了一朵花

开发者用神经网络嵌入与tSNE降维将字体语料映射为花朵形态的可视化地图
一位开发者在构建字体搜索工具的过程中,意外发现预训练阶段的神经网络嵌入模型能将整个字体语料库映射为富有美感的空间结构。其流程是:将字形渲染为图像,送入自定义预训练网络生成高维嵌入向量,再通过tSNE降维并同步映射到XYZ坐标与RGB颜色,令每个字体成为带颜色的空间点。Google Fonts语料库的结果最为惊艳——整体呈现花朵形态,草书字体自然聚集于花蕊位置。这一结构并非刻意设计,而是tSNE保留局部相似性时的自然涌现。该项目同时展示了视觉嵌入在字体检索上的实用价值:基于嵌入的相似度搜索可突破人工标签局限,实现「找出长得像这个字体」的能力,代码已开源。
一个字体搜索项目的意外收获
一位开发者在 Reddit 上分享了他持续约一年的字体搜索工具项目。项目的核心思路是用神经网络为每个字体生成嵌入向量(embedding),再将这些向量适配到字体检索任务上。然而让他最兴奋的成果,并非来自为搜索优化后的模型,而是来自预训练阶段的模型本身——这些模型意外地把整个字体语料库映射成了一幅富有美感的结构图,其中最出名的一张甚至长得像一朵花。

这个案例有意思的地方在于,它展示了嵌入技术在视觉数据上的直观表达力。当我们把抽象的「字体风格」压缩成可以在空间中定位的点,字体之间的相似与差异就变成了肉眼可见的几何关系。
技术流程拆解:从字形到可视化
作者描述的处理流程相当清晰,可以拆成几个环节:
1. 字形转图像
把一个字体中的每个字形(glyph)渲染成图像。这一步将矢量或轮廓信息转化为神经网络可以处理的像素输入。
2. 自定义预训练网络生成嵌入
将这些字形图像送入作者自己预训练的神经网络,输出一个代表该字体视觉特征的嵌入向量。嵌入向量本质上是对字体「长什么样」的高维数值概括——笔画粗细、衬线与否、曲率、倾斜程度等视觉属性都被编码其中。
嵌入向量(embedding)是表示学习的核心产物,其基本思想是将高维、离散或难以直接计算的对象(文字、图像、字体等)映射为低维连续的稠密向量,使得语义或视觉上相近的对象在向量空间中距离更近。这一技术最早在 NLP 领域随 Word2Vec(2013)广泛普及,随后被迁移到图像、音频、代码等几乎所有模态。在计算机视觉中,常见做法是用卷积神经网络(CNN)或 Vision Transformer 对图像编码,取中间层或最终层的激活值作为嵌入。预训练阶段通常在大规模无标注或弱标注数据上以自监督方式进行,让模型自行发现数据中的结构规律;后续若要针对特定任务(如检索、分类)优化,再做微调(fine-tuning)。字体项目中的预训练嵌入之所以能产生有意义的几何结构,正是因为网络在学习过程中被迫将视觉上相似的字形表示为空间上相邻的向量。
3. 降维可视化
高维嵌入无法直接观察,作者尝试了 PCA、UMAP 和 tSNE 三种降维方法,最终认为 tSNE 产生的结构最佳。他把降维结果同时映射到 XYZ 空间坐标和 RGB 颜色通道上,于是每个字体就成了一个带颜色的点。
这里有个巧妙的设计:位置相近和颜色相近都代表视觉特征相似。双重编码让观察者既能通过空间位置、也能通过色彩来识别聚类关系,在地图中追踪不同类型字体形成的小簇和路径。
PCA(主成分分析)、UMAP 和 tSNE 是目前最常用的高维数据降维方法,三者侧重点不同。PCA 是线性方法,保留全局方差最大的方向,运算速度快但对非线性结构的表达有限。tSNE(t-distributed Stochastic Neighbor Embedding)是非线性方法,以保留局部邻域结构见长:它通过最小化高维与低维中点对的概率分布差异,把相似样本聚拢、把不相似样本推开,因此特别擅长揭示簇状结构,但全局距离(不同簇之间的相对位置)不具有严格的可比性。UMAP 在数学基础上与 tSNE 不同,速度更快且对全局结构的保留优于 tSNE,近年来在大规模数据集上逐渐成为首选。作者选择 tSNE 效果最佳,与字体数据本身的特点吻合:字体在视觉上形成若干内聚度高的类别(衬线体、手写体、等宽体等),tSNE 的局部聚集特性恰好能将这些类别清晰分离。
为什么会长成一朵花
作者用 Google Fonts 语料库生成的那张地图最让他满意——整体结构竟然呈现出花朵的形态,而且这种相似程度超出了他的预期。更有趣的是,模型把大部分**草书/手写体(cursive fonts)**聚集到了花蕊(stamen)的位置。
这并非刻意设计的结果,而是降维算法在保留数据局部结构时自然涌现的。tSNE 倾向于把相似样本拉近、把不相似样本推远,当字体的视觉特征分布本身存在某种连续过渡与中心聚集的规律时,就可能在二维/三维投影上形成花瓣状的放射结构。草书字体作为一个在视觉上高度内聚又明显区别于其他类别的群体,被安放在结构中心,恰好对应了花蕊的位置。
这类「涌现的美感」其实是嵌入可视化中常见的现象:手写数字、人脸、词向量等数据在降维后也常出现直观且有解释性的空间布局。字体花朵只是一个格外上镜的例子。
可以亲自把玩的成果
作者开放了两份可交互的地图:一份基于 Google Fonts 语料库(也就是那朵花),另一份覆盖其网站上可搜索的全部字体。感兴趣的读者可以在 font-search.com/map 上自行探索整个结构,放大查看不同区域的字体聚类。
代码仓库也已开源(dylan-berndt/Briefcase),不过作者坦言仓库「乱成一团」。这对想复现思路的人是个实话实说的提醒:研究型副项目的工程整洁度往往让位于探索效率。
对实际应用的一点思考
抛开花朵的趣味性,这个项目背后的方法对字体检索本身很有价值。传统字体搜索依赖标签、名称或分类标注,而基于视觉嵌入的检索可以直接实现「找出长得像这个字体」的能力,突破人工标签的局限。预训练出的嵌入空间本身就是一个可度量的相似度基础,后续针对搜索任务做微调(post-training)即可落地。
从方法论上看,这也是一个把成熟的表示学习范式迁移到小众垂直领域的典型案例:字形图像 → 视觉嵌入 → 降维/检索。它不需要全新的理论突破,而是靠对领域数据的理解把现有工具用对地方。对任何想在细分领域构建相似度搜索的人来说,这条路径都有参考意义。
需要说明的是,以上内容均来自单一来源(作者在 Reddit 的自述),具体的网络架构、训练数据规模和检索效果指标并未详细披露。
相关推荐

AI开发应用的7个关键步骤:避免推倒重建的实战方法
用AI构建应用速度惊人,但也容易挖坑。本文梳理从核心原型、结构化提示词、身份验证到数据结构规划、安全扫描、真实数据测试和规模化设计的7个关键步骤,帮你避免推倒重建,构建可靠的AI应用。

用 Claude AI 构建银行 KYC 文档管理模块实战
一位开发者使用 Claude AI 将银行贷款应用的 KYC 文档管理模块从模拟数据改造为真实数据库后端,涵盖两段式 Prompt 策略、文件落地与完整文档审核闭环实测,为 AI 辅助企业级开发提供参考。

为什么越来越多开发者开始反感 AI 编程?
AI 编程助手虽提升效率,但也引发开发者担忧。本文梳理反感 AI 编程的核心理由:隐性调试成本、技能侵蚀、代码质量疑问与创作乐趣流失,并探讨如何理性使用这类工具。