李锋镝的博客

  • 首页
  • 时间轴
  • 评论区显眼包🔥
  • 左邻右舍
  • 博友圈
  • 关于我
    • 关于我
    • 另一个网站
    • 我的导航站
    • 网站地图
    • 赞助
  • 留言
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. AI
  3. 正文

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

2025年12月1日 232点热度 0人点赞 0条评论

在 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

相关文章

  • AI“说谎”“编造事实”的原因详解
  • AI Agent 扩展双雄:MCP 与 Agent Skill 深度拆解——从设计哲学到实战落地
  • AI原生数据库新标杆:seekdb深度解析,轻量架构与混合搜索的双重革命
  • 6款核心MCP协议工具让AI深度融入业务,告别“纸上谈兵”
  • 解锁Claude全能力:从基础对话到效率神器的10大进阶技巧与实战工作流
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: AI Vector 向量
最后更新:2025年12月1日

李锋镝

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

打赏 点赞
< 上一篇
下一篇 >

文章评论

1 2 3 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 57 58 60 61 62 63 64 65 66 67 69 72 74 76 77 78 79 80 81 82 85 86 87 90 92 93 94 95 96 97 98 99
取消回复

我是人间惆怅客,知君何事泪纵横,断肠声里忆平生。

那年今日(04月14日)

  • 2010年:中国青海玉树大地震
  • 1894年:托马斯·爱迪生展示了其新发明活动电影放映机
  • 1629年:荷兰物理学家克里斯蒂安·惠更斯出生
  • 1578年:西班牙国王腓力三世出生
  • 605年:隋炀帝下令开凿大运河
  • 更多历史事件
最新 热点 随机
最新 热点 随机
Everything Claude Code 详细使用文档 配置Jackson使用字段而不是getter/setter来序列化和反序列化 这个域名注册整整十年了,十年时间,真快啊 Claude Code全维度实战指南:从入门到精通,解锁AI编程新范式 Apollo配置中心中的protalDB的作用是什么 org.apache.ibatis.plugin.Interceptor类详细介绍及使用
AI时代,个人技术博客的出路在哪里?使用WireGuard在Ubuntu 24.04系统搭建VPN这个域名注册整整十年了,十年时间,真快啊WordPress实现用户评论等级排行榜插件WordPress网站换了个字体,差点儿把样式换崩了做了一个WordPress文章热力图插件
开发者必懂的 AI 向量入门:从数学基础到实战应用 分代ZGC这么牛?底层原理是什么? 图解 | 原来这就是网络 使用springboot结合AI生成视频 Java枚举梳理总结一 Excel2016右键新建工作表,打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的解决办法
标签聚合
设计模式 ElasticSearch docker 多线程 SpringBoot JAVA AI 分布式 MySQL JVM Spring SQL 架构 K8s IDEA WordPress 数据库 AI编程 Redis 日常
友情链接
  • Blogs·CN
  • Honesty
  • Mr.Sun的博客
  • 临窗旋墨
  • 哥斯拉
  • 彬红茶日记
  • 志文工作室
  • 懋和道人
  • 拾趣博客导航
  • 搬砖日记
  • 旧时繁华
  • 林羽凡
  • 瓦匠个人小站
  • 皮皮社
  • 知向前端
  • 蜗牛工作室
  • 韩小韩博客
  • 风渡言

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

域名年龄

Theme Kratos Made By Dylan

津ICP备2024022503号-3

京公网安备11011502039375号