📖 本章预览
本章为预览版本,展示部分核心内容。完整内容包含详细源码解析、实战代码和面试要点,加入知识星球即可解锁全部章节。
第6章 文本变向量:Embedding 的魔法
6.1 Embedding 原理
6.1.1 文本如何变成向量
Embedding 是将文本映射到高维向量空间的过程。语义相近的文本,在向量空间中距离也近。
"Spring Boot 是一个 Java 框架" → [0.12, -0.34, 0.56, ..., 0.78] (1024维)
"SpringBoot 是 Java 的开发框架" → [0.11, -0.33, 0.55, ..., 0.77] (距离很近)
"今天天气不错" → [0.89, 0.23, -0.67, ..., 0.12] (距离很远)
核心应用:
- 语义搜索:用向量相似度替代关键词匹配
- RAG 检索:找到与用户问题最相关的文档片段
- 文本分类:基于向量聚类
- 推荐系统:基于内容相似度推荐
6.1.2 相似度计算
/**
* 余弦相似度计算
* 值域 [-1, 1],越接近 1 表示越相似
*/
public class SimilarityUtils {
public static float cosineSimilarity(float[] vectorA, float[] vectorB) {
float dotProduct = 0f, normA = 0f, normB = 0f;
for (int i = 0; i < vectorA.length; i++) {
dotProduct += vectorA[i] * vectorB[i];
normA += vectorA[i] * vectorA[i];
normB += vectorB[i] * vectorB[i];
}
return (float) (dotProduct / (Math.sqrt(normA) * Math.sqrt(normB)));
}
}
6.2 Spring AI EmbeddingModel
@Service
public class EmbeddingService {
@Autowired
private EmbeddingModel embeddingModel;
/**
* 单文本向量化
*/
public float[] embedText(String text) {
return embeddingModel.embed(text);
}
/**
* 批量向量化
*/
public List<float[]> embedBatch(List<String> texts) {
EmbeddingResponse response = embeddingModel.call(
new EmbeddingRequest(texts, EmbeddingOptions.EMPTY)
);
return response.getResults().stream()
.map(r -> r.getOutput())
.toList();
}
/**
* 计算两段文本的语义相似度
*/
public float similarity(String textA, String textB) {
float[] vectorA = embeddingModel.embed(textA);
float[] vectorB = embeddingModel.embed(textB);
return SimilarityUtils.cosineSimilarity(vectorA, vectorB);
}
}
6.3 实战:语义搜索
/**
* 基于 Embedding 的语义搜索(不依赖向量数据库的简易版)
*/
@Service
public class SimpleSemanticSearch {
@Autowired
private EmbeddingModel embeddingModel;
/** 文档库:文本 + 预计算的向量 */
private final List<DocEntry> docEntries = new ArrayList<>();
@Data
@AllArgsConstructor
static class DocEntry {
private String text;
private float[] vector;
🔒 解锁完整内容
本章剩余内容需要解锁后查看
以上仅为本章部分预览内容,完整内容包含更多深度源码解析、实战代码和面试要点。
加入知识星球你将获得:
- ✅ 全部 26 章完整内容 + 持续更新
- ✅ 配套源码 + 实战项目
- ✅ 一对一答疑 + 面试辅导
- ✅ 简历优化 + 内推机会
📚 本章完整目录
以下为本章完整目录结构,加入知识星球即可解锁全部内容。