李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 博友圈
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于我
    • 网站地图
    • 网站统计
    • 另一个网站
    • 我的导航站
    • 赞助
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. AI
  3. 正文

开发者必懂的 AI 向量入门:从数学基础到实战应用

2025年12月1日 约 3,683 字13 分钟 44 0 0
本文最后更新于 2025年12月1日,距今已 260 天,其中的信息可能已经发生变化,请注意甄别。

在 AI 开发(尤其是大模型、RAG 系统)中,向量(Vector)是绕不开的核心基础。很多开发者因担心数学门槛望而却步,但实际上,向量的本质是“特征的数字化描述”——AI 正是通过向量将文本、图片等复杂信息转化为可计算的数值,从而实现语义理解、相似检索等核心功能。

本文将完全避开晦涩的数学推导,用“生活化例子+代码实战”的方式,从基础概念、核心运算、相似度衡量到高维应用,全方位拆解向量在 AI 中的作用,补充实战场景、代码实现和工程化技巧,帮你真正理解“AI 如何通过向量思考”。

一、向量基础:AI 世界的“特征描述语言”

1. 什么是向量?—— 不止是“方向+大小”

在数学中,向量被定义为“既有大小又有方向的量”,但在 AI 领域,它的本质是事物特征的结构化数字表达:

  • 标量(Scalar):只能描述“单一属性”(如“苹果甜度 5 分”“体重 60 公斤”);
  • 向量(Vector):能同时描述“多个属性”(如苹果的“颜色、甜度、脆度”,文本的“主题、情感、关键词强度”)。

举个直观例子:

  • 描述“一杯奶茶”,标量只能说“甜度 7 分”,而向量可以是 (0.8, 7, 3, 5),分别对应“奶盖厚度(0.8)、甜度(7)、温度(3)、价格(5)”四个维度;
  • 描述“一句话”,向量可以是 (0.92, 0.15, 0.03, 0.88),分别对应“科技主题(0.92)、积极情感(0.15)、正式语气(0.03)、长度归一化值(0.88)”。

2. 为什么需要高维向量?—— 精准捕捉复杂特征

现实世界的事物(如文本、图片)特征极其复杂,二维/三维向量远远不够:

  • 描述一张图片,需要包含“颜色分布、边缘特征、物体轮廓、纹理细节”等数十甚至数百个特征;
  • 描述一段文本,需要捕捉“关键词、语义倾向、语法结构、情感强度”等多个维度的信息。

高维向量(通常数百到数千维)的价值正在于此——每一个维度对应一个特征,维度越多,描述越精准。比如 OpenAI 的 text-embedding-3-small 模型输出 1536 维向量,意味着它用 1536 个特征维度来刻画一段文本的语义。

3. 向量在计算机中的表示:坐标即向量

在代码中,向量无需复杂的数学符号,直接用数组(列表)表示即可:

  • 二维向量:[3, 4](对应平面坐标 (3, 4));
  • 三维向量:[0.9, 5, 8](如苹果的“颜色、甜度、脆度”);
  • 高维向量:[0.12, 0.88, 0.34, ..., 0.76](1536 维文本向量,省略中间维度)。

核心逻辑:计算机中所有向量默认是“位置向量”——起点固定在坐标原点 (0, 0),只需记录终点坐标,就能唯一确定向量。比如从点 A(1,2) 到点 B(4,6) 的向量,可通过“终点减起点”转化为标准向量 (3, 4)。

二、向量核心运算:AI 如何“推演语义”?

向量的加减、模长计算,是 AI 实现语义组合、特征筛选的基础——每一种运算都对应具体的业务逻辑,而非单纯的数学操作。

1. 向量加减:语义的“组合与抵消”

向量加减法遵循“对应维度相加/相减”规则(如 (x1,y1) ± (x2,y2) = (x1±x2, y1±y2)),在 AI 中,这对应“特征的叠加或去除”:

(1)加法:特征组合(概念融合)

  • 例子:“编程”向量 + “乐趣”向量 = “编程乐趣”向量;
  • 代码示例(Python):
# 简化的二维向量:[主题相关性,情感强度]
coding = [0.9, 0.3]  # 编程:高主题相关性,中等情感
fun = [0.2, 0.8]     # 乐趣:低主题相关性,高情感
coding_fun = [coding[i] + fun[i] for i in range(len(coding))]
print(coding_fun)  # 输出:[1.1, 1.1] → 高主题相关性+高情感 → 对应“编程乐趣”

(2)减法:特征去除(剥离无关属性)

经典案例:“王子” - “男人” + “女人” = “公主”,背后是特征的精准剥离与叠加:

  • 假设向量维度:[性别(数值越大越女性化),地位(数值越大越尊贵)];
  • 向量定义:王子 = (1, 9)、男人 = (1, 1)、女人 = (9, 1);
  • 运算过程:
    1. 王子 - 男人 = (0, 8) → 剥离“男性”特征,保留“尊贵”特征;
    2. + 女人 = (9, 9) → 叠加“女性”特征,最终得到“女性+尊贵”的“公主”向量。

(3)工程化应用

  • 文本扩写:“AI” + “开发” + “工具” = “AI 开发工具” 向量,用于生成相关主题内容;
  • 情感调整:“电影好看” - “积极情感” + “消极情感” = “电影难看”,实现文本情感反转。

2. 向量的模(长度):特征强度的“量化指标”

向量的模(Magnitude)是向量的“大小”,计算公式源于勾股定理(二维向量:√(x² + y²)),在 AI 中主要用于“特征强度衡量”和“归一化处理”。

(1)模的实际意义

  • 文本向量的模:可理解为“文本与主题的关联强度”(模越大,主题越鲜明);
  • 图片向量的模:可理解为“图片特征的丰富度”(模越大,细节越饱满)。

(2)核心应用:归一化(Normalization)

在很多场景中,我们只关心“特征方向”(如文本主题),不关心“特征强度”(如文本长度)。此时需要将向量归一化为“单位向量”(模=1),消除长度差异的影响:

  • 公式:单位向量 = 原向量 / 原向量的模;
  • 代码示例:
import math

def normalize_vector(vec):
    """向量归一化:将向量转为模为1的单位向量"""
    vec模 = math.sqrt(sum([x**2 for x in vec]))
    return [x / vec模 for x in vec]

# 测试:两个长度不同但方向相同的向量,归一化后完全一致
vec1 = [3, 4]  # 模=5
vec2 = [6, 8]  # 模=10
print(normalize_vector(vec1))  # 输出:[0.6, 0.8]
print(normalize_vector(vec2))  # 输出:[0.6, 0.8]

(3)工程化价值

  • 语义检索:归一化后,文本长度不再影响相似度计算(如“我爱编程”和“我非常热爱编程技术”的向量方向一致,相似度高);
  • 数据存储:归一化后的向量数值范围统一(-1~1),减少存储和计算开销。

三、相似度衡量:AI 如何“判断相似”?

在 RAG 检索、推荐系统、语义匹配等场景中,核心是“计算两个向量的相似度”——本质是判断两个事物的特征是否一致,常用方法有两种:余弦相似度和欧氏距离。

1. 余弦相似度:语义相似的“黄金标准”

余弦相似度通过计算两个向量的夹角余弦值,衡量“方向一致性”,取值范围为 [-1, 1]:

  • 1:夹角 0°(方向完全相同,语义极度相似,如“猫”和“猫咪”);
  • 0:夹角 90°(方向垂直,毫无关联,如“猫”和“电脑”);
  • -1:夹角 180°(方向完全相反,语义对立,如“喜欢”和“讨厌”)。

(1)为什么 AI 偏爱余弦相似度?

它只关注“特征方向”,忽略“长度差异”——这恰好契合语义理解的需求:

  • 例子:“我爱编程”(短文本)和“我从大学开始就热爱编程,至今已有 5 年经验”(长文本),虽然向量长度差异巨大,但主题方向一致,余弦相似度接近 1;
  • 对比欧氏距离:会因文本长度导致距离过大,误判为“不相似”。

(2)代码实现(Python)

def cosine_similarity(vec1, vec2):
    """计算两个向量的余弦相似度"""
    # 计算点乘:对应维度相乘再求和
    dot_product = sum([v1 * v2 for v1, v2 in zip(vec1, vec2)])
    # 计算两个向量的模
    vec1模 = math.sqrt(sum([x**2 for x in vec1]))
    vec2模 = math.sqrt(sum([x**2 for x in vec2]))
    # 避免除以0
    if vec1模 == 0 or vec2模 == 0:
        return 0.0
    return dot_product / (vec1模 * vec2模)

# 测试:语义相似的向量
vec_编程1 = [0.9, 0.8, 0.1]  # 编程:高主题、高情感、低正式度
vec_编程2 = [0.85, 0.75, 0.08]  # 热爱编程:高主题、高情感、低正式度
vec_美食 = [0.1, 0.2, 0.9]    # 美食:低主题、低情感、高正式度

print(cosine_similarity(vec_编程1, vec_编程2))  # 输出:0.99 → 极度相似
print(cosine_similarity(vec_编程1, vec_美食))   # 输出:0.23 → 几乎无关

2. 欧氏距离:数值大小相关的“相似度”

欧氏距离是两个向量终点的“直线距离”,计算公式为 √[(x1-x2)² + (y1-y2)²],适用于“特征大小(量级)至关重要”的场景:

(1)适用场景

  • 电商用户聚类:用户 A 购买 1 个苹果,用户 B 购买 2 个苹果,用户 C 购买 1000 个苹果(批发商);
  • 相似度判断:A 和 B 的欧氏距离小(消费能力接近),归为普通消费者;C 与 A/B 距离大,归为商业客户。

(2)代码实现(Python)

def euclidean_distance(vec1, vec2):
    """计算两个向量的欧氏距离"""
    return math.sqrt(sum([(v1 - v2)**2 for v1, v2 in zip(vec1, vec2)]))

# 测试:消费行为向量 [购买苹果数量, 消费金额]
user_A = [1, 10]
user_B = [2, 20]
user_C = [1000, 10000]

print(euclidean_distance(user_A, user_B))  # 输出:10.05 → 距离近
print(euclidean_distance(user_A, user_C))  # 输出:10000.01 → 距离远

3. 两种方法选型指南

场景类型 推荐方法 核心原因
语义检索、文本匹配 余弦相似度 关注主题方向,忽略文本长度差异
用户聚类、数值分析 欧氏距离 关注特征大小,量化实际差异
RAG 知识库检索 余弦相似度 精准匹配语义,不受文档长度影响
商品推荐(基于购买量) 欧氏距离 量化消费行为差异,区分普通用户与大客户

四、从二维到高维:AI 中的向量实战

AI 中真正使用的向量都是高维(数百到数千维),但数学规则与二维完全一致——加法、模长、相似度计算只需扩展到多维度即可。

1. 高维向量的“不可可视化”与“可计算性”

  • 不可可视化:我们无法在脑海中想象 1536 维空间,但数学规则通用(如 1536 维向量的点乘 = 所有对应维度乘积之和);
  • 可计算性:代码无需修改,只需传入高维数组即可,示例如下:
# 10 维向量相似度计算(模拟 OpenAI 嵌入向量)
vec_high1 = [0.12, 0.34, 0.56, 0.78, 0.90, 0.87, 0.65, 0.43, 0.21, 0.09]
vec_high2 = [0.11, 0.35, 0.57, 0.79, 0.89, 0.88, 0.64, 0.42, 0.20, 0.10]
print(cosine_similarity(vec_high1, vec_high2))  # 输出:0.998 → 极度相似

2. 实战场景:用向量实现简单 RAG 检索

RAG(检索增强生成)的核心是“根据用户查询向量,从知识库中找到最相似的文档向量”,完整流程如下:

# 1. 模拟知识库(文档 + 对应的向量)
knowledge_base = [
    {"text": "Python 是一种解释型编程语言", "vec": [0.92, 0.15, 0.03, 0.88]},
    {"text": "Java 是一种编译型编程语言", "vec": [0.89, 0.13, 0.05, 0.85]},
    {"text": "猫是一种常见的宠物", "vec": [0.02, 0.87, 0.11, 0.05]}
]

# 2. 用户查询(模拟生成的向量)
user_query = "推荐一种解释型编程语言"
query_vec = [0.91, 0.14, 0.04, 0.87]

# 3. 检索最相似的文档
def rag_retrieval(query_vec, knowledge_base, top_k=1):
    """RAG 检索:找到知识库中最相似的文档"""
    # 计算所有文档与查询的相似度
    similarity_scores = [
        (doc["text"], cosine_similarity(query_vec, doc["vec"]))
        for doc in knowledge_base
    ]
    # 按相似度降序排序
    similarity_scores.sort(key=lambda x: x[1], reverse=True)
    # 返回 top_k 结果
    return similarity_scores[:top_k]

# 4. 执行检索
results = rag_retrieval(query_vec, knowledge_base)
print("检索结果:", results[0][0])  # 输出:Python 是一种解释型编程语言
print("相似度:", results[0][1])    # 输出:0.997

3. 工程化技巧:高维向量的存储与计算

  • 存储:使用向量数据库(如 Chroma、Milvus),而非普通数据库(优化高维向量的检索速度);
  • 计算优化:使用 NumPy 替代纯 Python 循环,提升高维向量计算效率:
import numpy as np

# NumPy 优化高维向量相似度计算
vec1_np = np.array([0.12, 0.34, ..., 0.09])  # 1536 维向量
vec2_np = np.array([0.11, 0.35, ..., 0.10])
similarity = np.dot(vec1_np, vec2_np) / (np.linalg.norm(vec1_np) * np.linalg.norm(vec2_np))

五、总结:向量是 AI 的“底层语言”

向量的核心价值,是为 AI 提供了“将复杂世界数字化”的方法——通过将文本、图片等事物的特征转化为数值数组,让计算机能够通过数学运算实现“理解语义、判断相似、组合概念”。

对于开发者而言,无需深究复杂的数学推导,只需记住三点核心:

  1. 向量 = 特征的数字化描述(每维对应一个特征);
  2. 向量运算 = 特征的组合与调整(加减=特征叠加/剥离,模=特征强度);
  3. 相似度 = 特征的匹配程度(余弦关注方向,欧氏关注大小)。

掌握这些,你就能理解大模型、RAG 系统的底层逻辑,甚至自己动手实现简单的语义检索、推荐系统。向量不是阻碍你进入 AI 领域的门槛,而是帮你打开大门的钥匙。

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/ren-gong-zhi-neng/4605

推荐阅读

  • WorkBuddy介绍
  • Claude Design介绍与使用
  • Taste Skill 说明与使用
  • Claude-HUD 使用文档
  • Claude Haiku 4.5、Claude Sonnet 4.6、Claude Opus 4.7 区别以及各自的新特性
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: AI Vector 向量
最后更新:2025年12月1日
相关文章
  • 深度拆解 MemGen:Agent 生成式隐式记忆框架的原理、源码与实战2025年11月12日
  • 本地部署 DeepSeek 模型并进行 Spring Boot 整合2025年2月16日
  • Taste Skill 说明与使用2026年7月10日
  • DeepSeek本地部署全攻略:从环境搭建到高级应用,打造专属 AI 助手2025年11月7日
  • LangChain 1.0 智能体实战:MCP 协议赋能工具标准化调用(从开发到落地)2025年11月13日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复

文章评论

还没有评论,快来抢沙发吧~

Your time is limited, so don't waste it living someone else's life. Don't be trapped by dogma -- which is living with the results of other people's thinking. Don't let the noise of other's opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
每日早报 · 2026年8月18日 写了一个订阅每日新闻的WP插件 每日早报 · 2026年8月17日 每日早报 · 2026年8月16日 每日早报 · 2026年8月15日 每日早报 · 2026年8月14日
给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能Kratos+ v1.1.16版本更新说明AI时代,个人技术博客的出路在哪里?增加了两套复古皮肤-牛皮纸、千禧网页这个域名注册整整十年了,十年时间,真快啊Kratos+ v1.1.14版本更新说明
CC知识共享协议各协议内容解释 深度解析多级缓存架构:从设计到落地,彻底解决数据一致性难题 从零开始入门 K8s | Kubernetes 网络概念及策略控制 AI原生数据库新标杆:seekdb深度解析,轻量架构与混合搜索的双重革命 结合Apollo配置中心实现日志级别动态配置 使用RocketMQ时,服务启动过程中,Consumer在服务未启动时消费消息问题处理
最近评论
李锋镝 发布于 3 小时前(08月18日) 给主题加了个功能,可以在RSS中排除指定分类,哈哈哈
李锋镝 发布于 4 小时前(08月18日) :8: 喜欢就好
不凡 发布于 14 小时前(08月17日) 哇,配色真好看,观感很舒服! :52:
李锋镝 发布于 17 小时前(08月17日) 哈哈哈,那个插件我之前也用过,那个内容都是固定的,我这个每天不同的时间拉取数据也不一样,等我研究研究...
Hary 发布于 17 小时前(08月17日) emmm大哥,这样每天输出到博客,然后别人订阅rss全是这个,有点不太好,之前很流行一段时间每天60...
标签聚合
Redis MQ JVM MySQL 多线程 ElasticSearch 日常 Claude IDEA AI 分布式 SpringBoot SQL AI编程 K8s 数据库 WordPress JAVA 架构 Spring
友情链接
  • 瓦匠个人小站
  • 若梦博客
  • 九仞之行
  • 老张博客
  • 知向前端
  • 哥斯拉
  • Honesty
  • 韩情脉脉
  • 皮皮社
  • Serendipity
  • Mr.Sun的博客
  • 韩小韩博客
  • 志文工作室
  • 懋和道人
  • 临窗旋墨
  • 搬砖日记
  • 林羽凡
  • 彬红茶日记
  • 蜗牛工作室
  • sssr7844的博客

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

正在博友圈履约中

域名年龄

Theme Kratos+ By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号