Prompt实战之构建语义搜索引擎 4)向量化与 Embedding

Prompt实战之构建语义搜索引擎 4)向量化与 Embedding

完成文本切分后,我们已经将文档转化为结构清晰的片段。接下来,需要将这些文本片段转化为语言模型可以理解和比对的形式:向量(Vector)

这一步通常称为向量化(Vectorization)生成嵌入(Embedding),是构建语义搜索系统的核心环节。


4.1 什么是嵌入(Embedding)?

嵌入是将自然语言表示为稠密向量(如 1536 维浮点数向量)的过程,使得相似含义的句子具有相近的向量表示。

  • 例如,“今天天气真好”和“The weather is great today.” 会被编码为接近的向量。
  • 这样可以通过“计算向量距离”来判断语义相似度。

📌 向量化让机器能够“理解”文本之间的语义关系。


4.2 常用嵌入模型

模型提供商特点
OpenAI Embeddings(如 text-embedding-3-smallOpenAI高质量通用模型,支持多语言
HuggingFace 模型(如 BAAI/bge-small-zh-v1.5社区支持离线本地部署
Cohere, Azure, Google Palm 等第三方可选,需配置 API

本教程优先使用 OpenAI 嵌入模型,也会介绍本地模型替代方案。


4.3 使用 OpenAI Embedding 向量化文档

安装依赖

pip install openai

确保你已经设置了 API 密钥(例如设置环境变量 OPENAI_API_KEY)。

示例代码

from langchain.embeddings import OpenAIEmbeddings

embedding_model = OpenAIEmbeddings(model="text-embedding-3-small")

# 传入已切分后的文档片段
doc_embeddings = embedding_model.embed_documents(
    [doc.page_content for doc in split_docs]
)

print(f"生成了 {len(doc_embeddings)} 个向量,维度为 {len(doc_embeddings[0])}")

📌 每个文档片段都会被转化为一个向量(如 1536 维 float 列表)。


4.4 将文档与向量绑定

LangChain 的 Document 类支持携带 metadata,但不会自动绑定向量信息。因此在后续构建索引时,我们会统一将 (文本片段, 向量, 元信息) 存入向量数据库中。


4.5 使用本地模型向量化(选读)

如果你希望离线使用或避免调用 OpenAI 接口,可以使用 HuggingFace 模型,例如:

pip install sentence-transformers
from langchain.embeddings import HuggingFaceEmbeddings

embedding_model = HuggingFaceEmbeddings(
    model_name="BAAI/bge-small-zh-v1.5"  # 中文表现优秀
)

vectors = embedding_model.embed_documents(
    [doc.page_content for doc in split_docs]
)

💡 bge 系列模型支持中文和英文,且适配 LangChain。


4.6 嵌入模型的选择建议

应用场景建议模型
多语言、英文为主OpenAI text-embedding-3-*
中文为主BAAI/bge 系列(推荐)
离线部署、隐私要求高HuggingFace 模型

4.7 本章小结

本章你学习了:

  • 嵌入(Embedding)的定义与作用;
  • 如何使用 OpenAI 或 HuggingFace 模型生成文档向量;
  • 嵌入模型在语义搜索系统中的作用;
  • 适配不同场景的嵌入模型选择策略。

练习区 🛠️

  1. 使用 OpenAI 的 text-embedding-3-small 模型为 100 个文档片段生成向量,记录耗时与向量维度。
  2. 比较 OpenAIEmbeddingsHuggingFaceEmbeddings 在中文语料上的结果差异(可用向量间余弦相似度测试)。
  3. 修改嵌入模型,尝试调用 bge-large-zh,观察生成时间与向量长度的变化。
  4. 编写一个函数:输入文本列表 → 输出向量列表,可用于后续的批量索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这是Jamon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值