AI产品面试官超喜欢问:什么是 Embedding,它是怎么工作的 ?

0 阅读8分钟

“Embedding” 在机器学习和自然语言处理(NLP)中,是一个非常核心的概念,但它其实比名字听起来简单得多。让我一步步给你拆开哈。

基本概念

Embedding 就是把某种复杂或离散的数据(文字、句子、图片、物品、用户等等)转换成向量(vector) ,也就是一串数字的数组。

可以理解为:把“不可直接计算的东西”映射到一个“计算机可以理解的数字空间”。

例如:

  • 单词 "apple"[0.12, -0.34, 0.88, ...]
  • 一张猫的图片 → [0.23, 0.11, -0.77, ...]
  • 用户兴趣特征 → [0.01, 0.5, 0.8, ...]

这些向量通常是高维的(几十维、几百维甚至几千维),能保留原数据的语义或特征。

Embedding 的特点

  1. 密集表示:用一串连续数值表示,而不是像 one-hot 向量那样稀疏。

    • One-hot: "apple"[0,0,0,1,0,0...](长度可能上万)
    • Embedding: "apple"[0.12, -0.34, 0.88](长度几十或几百)
  2. 保留语义关系:向量之间的距离可以反映原数据的相似性。

    • 例:vec("king") - vec("man") + vec("woman") ≈ vec("queen")
  3. 可用于计算:向量可以直接做加减、点积、余弦相似度等操作,便于搜索、推荐和分类。

Embedding 的应用场景

  1. NLP(自然语言处理)

    • 单词向量(Word Embedding,如 Word2Vec, GloVe)
    • 句子或段落向量(Sentence Embedding,如 BERT、OpenAI 的 text-embedding)
    • 用于相似度搜索、语义匹配、问答系统
  2. 推荐系统

    • 用户 embedding + 商品 embedding → 预测点击或购买
  3. 图像处理

    • 图像 embedding → 图像检索或聚类
  4. 搜索引擎 / 向量数据库

    • 文本或内容 embedding → 向量检索(RAG)

举个简单例子

假设你有以下句子:

句子1: "我喜欢苹果"
句子2: "我喜欢香蕉"
句子3: "天气很好"

通过 embedding 模型生成向量可能是:

句子1[0.1, 0.5, 0.3]
句子2[0.1, 0.51, 0.31]
句子3[0.9, 0.2, 0.1]

你会发现:

  • 句子1 和 句子2 很相似(向量接近)
  • 句子3 与前两个差别大(向量距离远)

这就是 embedding 的核心价值:把相似意思的东西映射到向量空间中靠得更近

image.png

假设你问:

今天天气怎么样
  1. 文本先 Tokenize[今, 天, 天气, 怎么样]
  2. 输入 embedding 模型(比如 OpenAI text-embedding-3-large
  3. 输出 高维向量 [0.21, -0.11, 0.53, ...] → 这就是你的问题在向量空间的表示

向量的特点:相似语义的句子 → 向量距离近,不相似的句子 → 距离远

使用场景:检索知识库(RAG / Semantic Search)

假设你有一个知识库,里面有一些条目:

文本内容Embedding 向量
“今天北京多云,气温15度。”[0.2, -0.1, 0.5, ...]
“明天会下雨,请注意携带雨具。”[0.21, -0.05, 0.51, ...]
“苹果的营养价值很高。”[0.8, 0.2, -0.3, ...]
  • 当你提问 “今天天气怎么样”
  • 系统计算你问题向量和知识库向量的 余弦相似度

image.png

  • 余弦相似度高 → 文本内容相关 → 返回给模型或用户

在上例中,“今天北京多云”向量最接近你提问 → 被检索出来

为什么需要 Embedding

Embedding 的核心意义是 把抽象、离散、难以计算的数据(文本、图像、音频等)映射到一个向量空间,让机器可以理解、比较和操作语义

系统性表达看不懂是正常的,我们来举个贴切的例子。

例子:图书推荐系统

假设你在一个图书应用里搜索:

我想看关于人工智能入门的书

向量化的过程是:

  1. 系统先用 Embedding 模型把你的搜索句子转换成一个向量:
[0.12, -0.33, 0.44, ...]  (高维向量)

2. 系统库里每本书也有描述文本向量化后的向量:

A: "人工智能基础教程" → [0.11, -0.31, 0.41, ...]
书B: "Python编程入门" → [0.05, 0.22, -0.33, ...]
书C: "机器学习进阶" → [0.10, -0.30, 0.39, ...]

3. 系统计算用户向量和书向量的相似度,找到最接近的书:

相似度:
书A0.98B0.45
书C ≈ 0.95

4. 系统就会推荐:

A、书C

Embedding 的作用:把用户表达映射到模型可以理解的语义空间

Embedding 的作用:把用户表达映射到模型可以理解的语义空间

Embedding 的作用:把用户表达映射到模型可以理解的语义空间

重要的事情说三遍

使用场景:问答生成

  1. 检索到相关知识后 → 可以把文本拼接到 prompt 中:

    用户问题:今天天气怎么样
    知识库内容:今天北京多云,气温15度。
    
  2. 输入给大模型(GPT / LLM) → 生成回答:

    今天天气多云,气温大约15度。
    

Embedding 在这里的作用是 将问题和知识内容映射到向量空间 → 找到语义最相关的信息

其他 Embedding 使用场景

  • 相似内容推荐

    • 用户搜索“减肥方法” → 找向量相似的文章或视频推荐
  • 去重 / 聚类

    • 文档向量相似 → 聚为一类
  • 文本分类 / 情感分析

    • 句子 embedding → 分类器 → 判断类别或情感

如果不关心回答质量,全靠模型能力,不做 Embedding 行不行

行,也不是非得做。不过精细的,专业的 工程一般都做。

总结一句话

提问 → 生成 embedding → 向量相似度检索 → 找到相关知识 → 大模型生成回答

image.png

这样,一个文档流程就算结束了。

Embedding 的费用构成

未来的老板们,应该都比较感兴趣这个话题

image.png

Embedding也是按token收费的,注意,给不了解的小伙伴解释下,这个和模型本身的输入输出的收费完全是分开的

我们以 OpenAI 的 text-embedding-3-large举个例子。

text-embedding-3-large 就是一个把 字符转为向量数据的一个服务

text-embedding-3-large价格 : 1000token/$0.0004(美元)

Embedding 相关费用产生的时机

1.生成向量的费用(Embedding API)

这是 必然存在的费用

当你把文本发给 embedding 模型时,例如:

"杭州是个好地方"

模型会返回:

[0.1823, -0.7721, 0.1932, ...]

这个过程叫 向量化(Embedding)

收费方式通常是:

按输入 token 数量收费

例如:

1000 token = $0.0004

如果你有:

100万 token 文本

费用大约:

1000000 / 1000 * 0.0004 = $0.13

这笔钱 只在生成向量的时候付一次

实际转换案例

假定输入 “杭州是个好地方” => 假定分词算法为:[杭州,是,个,好,地方] => 转token为:[32456,23321,33255,6543,76544] === 这就等于 5个token输入了

像上面这句话,输入个 20w次,以 text-embedding-3-large 计费方案为例子,就是0.13美元

2. 向量数据库费用

生成向量之后,你需要存储它。

常见方案:

  • 自建数据库
  • 云向量数据库

常见向量数据库:

收费模式通常是:存储容量

例如:

按 GB / 月

举例:

1 million vectors ≈ 几百 MB

∵ million vectors === 每百万条向量

∵ "某一句话" === [0.123, 0.456, 0.789, ...]

∴ 1 million vectors === [0.123, 0.456, 0.789, ...] * 100w条

3.查询次数的费用

如果用户提问:

杭州天气怎么样

系统必须先做一次:

Embedding("杭州天气怎么样")

生成查询向量:

[0.1932, -0.8821, ...]

这个 也要调用 embedding API 。这个时候也就回到了我们第一点“生成”的时候那笔费用,生成是 向量化时要耗费,查询也需要向量化之后才能匹配,所以,每一次查询都是需要收费的。

所以:

每一次查询
= 1 次 embedding 费用

Embedding在代码上的表现形式

以下以 python/node/java 三个语言进行案例演示

Python 示例

from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY")

text = "杭州是个好地方"

# 向量化的过程
response = client.embeddings.create(
    model="text-embedding-3-large",
    input=text
)

embedding_vector = response.data[0].embedding

print("向量长度:", len(embedding_vector))
print("前10个维度:", embedding_vector[:10])

输出示例:

向量长度: 3072
前10个维度: [0.0213, -0.0345, 0.1182, -0.4421, 0.0732, 0.0091, -0.2214, 0.3388, 0.0045, -0.1132]

Node.js 示例

import OpenAI from "openai";

const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const text = "杭州是个好地方";

// 向量化的过程
const response = await client.embeddings.create({
  model: "text-embedding-3-large",
  input: text,
});

const embeddingVector = response.data[0].embedding;

console.log("向量长度:", embeddingVector.length);
console.log("前10个维度:", embeddingVector.slice(0, 10));

输出示例(前10维):

向量长度: 3072
前10个维度: [0.0213, -0.0345, 0.1182, -0.4421, 0.0732, 0.0091, -0.2214, 0.3388, 0.0045, -0.1132]

Java 示例(使用 OpenAI 官方 SDK)

import com.theokanning.openai.OpenAiService;
import com.theokanning.openai.embedding.EmbeddingRequest;
import com.theokanning.openai.embedding.EmbeddingResult;

public class EmbeddingExample {
    public static void main(String[] args) {
        String apiKey = "YOUR_API_KEY";
        OpenAiService service = new OpenAiService(apiKey);

        String text = "杭州是个好地方";

        // 向量化的过程
        EmbeddingRequest request = EmbeddingRequest.builder()
                .model("text-embedding-3-large")
                .input(text)
                .build();

        EmbeddingResult result = service.createEmbeddings(request).getData().get(0);

        System.out.println("向量长度: " + result.getEmbedding().size());
        System.out.println("前10个维度: " + result.getEmbedding().subList(0, 10));
    }
}

输出示例(前10维):

向量长度: 3072
前10个维度: [0.0213, -0.0345, 0.1182, -0.4421, 0.0732, 0.0091, -0.2214, 0.3388, 0.0045, -0.1132]

总结

  • 白话理解:Embedding是一种把“不可直接计算的东西”映射到一个“计算机可以理解的数字空间”的技术
  • 向量基本都是高维的
  • 向量的费用有两部分,一部分是向量数据库,另一部分是每次进行“向量化”时候的费用
  • 向量数据库的费用一般是按大小和租用时间去收费
  • 向量化的费用每个供应商的每个模型都不一样,这取决于他们的token计算算法(一句话分成几个token)和该模型每百万token的向量化费用(每百万向量多少钱),以以 OpenAI 的 text-embedding-3-large为例子,每百万token收费:0.13美元
  • Embedding 的作用是把用户表达映射到模型可以理解的语义空间

最后

如果对你有用的话,给个三连吧。

f658630cdbe9f30a3120595887f617e4.png