微信扫码
添加专属顾问
我要投稿
AI + 向量检索技术让图标推荐更智能,精准匹配用户意图与视觉表达。核心内容: 1. 大语言模型(LLM)深度解析用户文本,提取可视化核心概念 2. 多模态向量检索技术构建图文通用语义空间,实现精准匹配 3. 向量数据库与HNSW算法优化,实现毫秒级实时图标推荐
在 AntV 信息图设计中,图标承担着将抽象文本“可视化”的作用。
为提升图文匹配效率,提出一个结合大语言模型(LLM)和多模态向量检索技术,实现一个“自动理解用户意图 → 智能推荐图标”服务。
结合了 LLM 的语义理解能力与向量检索的高效匹配能力,整体流程如下:
第一步是深度理解用户意图。
我们面临的挑战是,用户的意图是抽象的,如“可持续发展”,而图标的检索是具象的,它依赖于具体的、预设的标签,如“叶子”、“循环”、“地球”。这种不匹配导致检索结果难以精准满足用户需求。
比如:
❝用户输入:“为了降低碳排放,城市开始增加绿化和公共交通。”
❞
传统的关键词分词,可能会拆解出“降低”、“城市”、“增加”等一堆词,但哪些才是最适合用图形表达的核心概念呢?
这正是我们引入大语言模型(LLM)的原因。我们没有采用机械的分词,而是利用 LLM 强大的上下文理解能力。它像一个资深编辑,能通读整个句子,分析其结构和语义权重,精准地识别出那些最核心、最“可视化”的元素。
对于上面的例子,LLM 会告诉你,关键的视觉概念是 “碳排放”、“绿化”和“公共交通”。这些词汇具有明确的、可被图形化的指代对象,「提取出一个关键词列表」
[碳排放, 绿化, 公共交通]
为了让后续的模型能发挥最大效力,我们还会「将这些中文概念统一翻译成英文」,以对齐业界领先的多模态模型(如 CLIP)的预训练语料,为精准匹配打下坚实基础。
[carbon emission, urban greenery, public transportation]
理解用户意图之后,我们要做的,是用模型把这些关键词变成“语义向量”。
我们用的是 OpenAI 的 CLIP(Contrastive Language-Image Pre-training)模型。它通过在海量图文对上进行对比学习,将 “文本” 「和」 “图像” 映射至同一高维 “语义向量空间”:
❝可以这样理解: 在这个空间里,无论是文字“香蕉”,还是一张香蕉的图片
❞🍌
,它们都会被编码成一个向量(一串数字),并且它们在空间中的“位置”会非常接近。而“苹果”🍎
会离它们近一些,“小猫”🐱
则会离得很远。
通过这种方式,我们可以用数学上的“距离”(这里用的是余弦相似度)来衡量任意文本和任意图标之间的语义相关性。距离越近,相似度得分越高,代表它们在意义上越“贴合”。
理论已经完美,但现实是我们的图标库拥有数十万甚至数百万的图标。当用户输入文本后,如果我们将生成的文本向量与库中每一个图标向量都计算一次相似度,那将是一场性能灾难。
为了实现“实时推荐”,我们必须让检索过程毫秒级响应。这里用到了向量数据库和 HNSW (Hierarchical Navigable Small World) 算法。
为了让推荐过程够快、够准,我们提前对图标进行预处理:
首先,对图标做「标准化处理」,比如统一尺寸、去背景等;
其次,用 CLIP 把每个图标都编码成「向量」,并记录它的标签、风格等信息;
{
"id": "icon_1023",
"tags": ["urban", "tree", "greenery"],
"style": "flat",
"embedding": [0.12, -0.34, ..., 0.08]
}
最后,把所有这些数据都存进了向量数据库,并建立好索引。
有了这些“预先计算好”的图标向量,我们就能在用户发起查询时,直接对比向量,快速返回结果。
当用户输入文本后,进入在线推理阶段:
将解析出的关键词(如 "urban greenery")输入 CLIP Text Encoder
,实时生成一个文本向量 text_embedding
。
text_embedding = clip.encode_text("urban greenery")
image_embedding = clip.encode_image(icon.png)
通过计算文本向量与数据库中所有图标向量的「余弦相似度」来评估匹配程度。该值范围在 0 到 1 之间,得分越接近 1,代表两个向量在方向上越一致,即语义越相关。
similarity = cosine_similarity(text_embedding, image_embedding)
我们通过一个直观例子来解释这个过程:
❝用户输入,“我想要一个水果相关的图标,比如香蕉”
❞
首先用 CLIP 对输入进行处理生成的 text_embedding
是一个维度为 300 的向量,例如
[0.34, 2.35, 8.34, ..., -1.23]
相当于下图,把 “Banana” 这个词投射到了语义向量空间的某一个点。
系统会在已编码的图标向量中执行最近邻检索,计算每个图标与 banana 向量之间的余弦相似度
在语义空间中,距离 banana 向量最近的图标向量会获得最高分数。例如图中:
最终返回一个图标列表,按语义相关性降序排列:
将前几个高相关图标展示给用户。
当图标库规模达到数十万甚至数百万时,暴力遍历计算相似度是不可行的。因此,我们采用专业的向量数据库。
数据库内部采用 HNSW (Hierarchical Navigable Small World) 算法构建索引。HNSW 是一种高效的近似最近邻 (Approximate Nearest Neighbor, ANN) 搜索算法,它通过构建层级化的图结构,能够在保证极高召回率的同时,将检索速度从线性扫描的 O(N) 复杂度降低到对数级的 O(log N),实现毫秒级响应。
就像上图所示,
但光靠向量相似还不够,实际需求往往还伴随着额外条件。比如:
❝“想找跟公共交通相关的图标,但风格必须是扁平化的。”
❞
这时候我们会发起一个「混合查询」,采用 “先过滤,后搜索”(Pre-filtering)的策略
style = 'flat'
等结构化条件筛选出候选子集;这样筛出来的图标,既语义贴合,又风格匹配,用起来精准又顺手。
最后,让我们给文章首图中提取的内容“销售收入减少,核心产品市场份额下滑导致收入下降12%”推荐一组合适的图标:
为了验证推荐的实际表现,我们设计了一套由「离线评测 + A/B 实验 + 长期监测」构成的评估体系,从主观感受与客观数据两个维度出发,衡量推荐准确性。
我们构建了一个 100 条真实语句的测试集,覆盖了从抽象概念(如“可持续发展”)到具体事物(如“香蕉”)的多元化场景。
随后,邀请多位内部评审员对每条语句的推荐结果进行主观盲评。评分标准如下:
最终得分汇总如下:
❝两者高度一致,从另外一个维度上说明 AI 在“懂你”这件事上,已经迈出稳定的一步。
❞
后续,我们将持续扩充和丰富测试集,采用 AI 评测的方式对大数据量的测试集进行评测。
为了量化不同技术方案带来的实际影响,我们还针对多个核心环节设计了 A/B 测试,以数据驱动决策。
测试变量包括:
后续还计划进行不同嵌入模型对匹配质量的影响、不同向量检索参数的性能等。
通过对比实验,我们能够科学地选择最优技术组合,确保每一次迭代都能带来可衡量的业务价值提升。
最终,用户的真实行为是检验其价值的黄金标准。
随着信息图应用在业务中上线,我们还将接入真实用户行为数据进行效果追踪。当用户不满意当前推荐图标时,可以进入编辑态,自行更换图标:
这个过程中我们关注以下指标:
这些来自一线的真实数据将成为后续策略调整的第一手参考,帮助我们打造一个真正“越用越懂你”的推荐引擎。
通过这套多维度评估体系,我们能系统性地回答这个问题:
❝“这个系统真的懂你吗?”
❞
从初步结果来看,语义理解 + 多模态向量检索的组合,已能在绝大多数场景下做到高质量匹配。未来我们还会持续扩大语料、优化策略、引入用户反馈闭环,推动推荐结果从“相关”迈向“准确”与“好用”。
https://milvus.io/blog/what-is-a-vector-database.md
https://medium.com/@serkan_ozal/vector-similarity-search-53ed42b951d9
https://mlops.community/vector-similarity-search-from-basics-to-production/
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-07-09
MemOS:一个为AI系统设计的记忆操作系统
2025-07-09
字节跳动的野心:从豆包、飞书到生态,一个万亿巨头的AI进化论
2025-07-09
如何在 Elasticsearch 中构建你的智能 AI 助手?
2025-07-09
垂直和领域 Agent 的下一课:上下文工程
2025-07-09
8分钟了解Deep Research与上下文工程
2025-07-09
Jina Embeddings v4 的量化感知训练
2025-07-09
AI 上新|我让 AI「偷窥」了我的屏幕,它有机会变成我第二个大脑
2025-07-09
【速读版】Agent不同设计范式 vs 模型上下文长度
2025-05-29
2025-04-11
2025-04-12
2025-04-29
2025-04-29
2025-04-12
2025-05-23
2025-05-07
2025-05-07
2025-05-07
2025-07-09
2025-07-08
2025-07-07
2025-07-05
2025-07-04
2025-07-04
2025-07-03
2025-07-03