RAG 入门:LangChain Embedding 介绍与使用
Embedding 介绍
词向量(Word Embedding)是自然语言处理(NLP)中的一种核心表示形式。它将词汇表中的单词或短语映射到实数向量空间中,用于捕获高维空间内单词之间的语义和句法相似性。
在词嵌入的背景下,我们可以将单词表示为高维空间中的向量。每个维度对应一个特定的特征,例如'生物'、'猫科动物'、'人类'、'性别'等。每个单词在每个维度上都被分配有一个数值,通常在 -1 到 1 之间,表示该词与该特征的关联程度。
例如,'猫'这个词在'猫科动物'维度上可能具有较高的正值,而在'人类'维度上具有接近于零的值,这反映了它与猫科动物的紧密关联性,而与人类的关联性较低。
这种数值表示使我们能够捕捉单词之间的语义关系,并对其执行数学运算,例如计算单词之间的相似度或将其用作 NLP 任务中机器学习模型的输入。对于检索增强生成(RAG)系统而言,Embedding 是将非结构化文本转化为可被向量数据库检索的关键步骤。
LangChain 框架提供了丰富的接口,支持来自不同来源的多种嵌入模型,方便开发者根据需求选择。
LangChain 支持的 Embedding 模型
OpenAI Embeddings
OpenAI 提供的嵌入模型(如 text-embedding-ada-002)在通用语义理解方面表现优异。使用 LangChain 集成 OpenAI 模型非常简单。
import os
from langchain_openai import OpenAIEmbeddings
# 设置 API Key
os.environ["OPENAI_API_KEY"] = "your-api-key-here"
# 初始化嵌入模型
embeddings = OpenAIEmbeddings()
text = "This is a test document."
# 生成单个文本的向量
text_embedding = embeddings.embed_query(text)
print(f"Vector length: {len(text_embedding)}")
print(f"First 5 dimensions: {text_embedding[:5]}")
OpenAI 的 embedding-ada-002 通常输出 1536 维的向量。这些向量可以直接用于后续的距离计算或存入向量数据库。
HuggingFace Embeddings
Hugging Face 托管了大量开源的预训练模型,适合需要私有化部署或对特定领域进行微调的场景。
from langchain_community.embeddings import HuggingFaceEmbeddings
# 指定本地模型路径或 HuggingFace Hub 模型名
embedding_path = r'H:\pretrained_models\bert\english\paraphrase-multilingual-mpnet-base-v2'
embeddings = HuggingFaceEmbeddings(model_name=embedding_path)
text = "This is a test document."
text_embedding = embeddings.embed_query(text)
()


