RAG-3-Embeddings

📅 发布时间:2026/7/8 13:13:17 👁️ 浏览次数:
RAG-3-Embeddings
在数学中向量也称为欧几里得向量、几何向量指具有大小magnitude和方向的量。它可以形象化地表示为带箭头的线段。箭头所指代表向量的方向线段长度代表向量的大小。将文本转成一组浮点数每个下标i对应一个维度整个数组对应一个n维空间的一个点即文本向量又叫 Embeddings向量之间可以计算距离距离远近对应语义相似度大小什么是 EmbeddingEmbedding嵌入的核心思想是将高维、稀疏、离散的符号如单词、句子、产品、用户等映射到一个低维、稠密、连续的向量空间中。你可以把它想象成一种“翻译”原始数据像“猫”、“国王”、“用户123”、“商品A”这样的离散符号计算机很难直接理解它们之间的关系。Embedding 之后这些符号被转换成了一串有意义的数字即向量例如[0.2, -0.5, 0.8, ..., 1.2]。在这个新的向量空间里语义相近或有关联的物体其向量在空间中的距离也更近。关键特性稠密向量与One-Hot编码这种大部分是0的稀疏向量不同Embedding向量是稠密的每个维度都包含信息。保留关系向量之间的几何关系如距离、夹角反映了原始对象之间的语义或关系相似性。语义相似“猫”和“狗”的向量距离会比“猫”和“汽车”的向量距离更近。关系类比经典的例子是“国王”的向量 - “男人”的向量 “女人”的向量 ≈ “女王”的向量。Embedding基本原理Embedding不是凭空产生的它通常是通过机器学习模型在大量数据上学习得到的。初始化开始时每个符号如单词被随机分配一个向量。训练模型如Word2Vec通过阅读大量文本如维基百科来学习。它的训练任务通常是“根据上下文预测中心词”或“根据中心词预测上下文”。调整在训练过程中模型会不断地调整这些向量。例如如果“猫”和“狗”经常出现在相似的上下文环境中比如都常与“宠物”、“可爱”、“喂食”等词一起出现模型就会让它们的向量在空间中被拉近。产出训练完成后这些经过优化调整的向量就是最终的Embedding。它们捕获了训练数据中隐藏的语义和关系。在自然语言处理中的应用词嵌入Word Embeddings原理将单词映射到低维向量空间使得语义相近的单词在向量空间中距离较近。例如“苹果”和“香蕉”在语义上都属于水果类别它们的词向量在空间中会相对靠常见模型Word2Vec由谷歌开发有两种训练模式分别是连续词袋模型CBOW和跳字模型Skip - Gram。CBOW 根据上下文预测当前单词而 Skip - Gram 则根据当前单词预测上下文。GloVe结合了全局统计信息和局部上下文信息通过构建词 - 词共现矩阵并对矩阵进行分解来学习词向量。FastText在 Word2Vec 的基础上进行了扩展考虑了单词的子词信息对于未登录词在训练集中未出现的单词也能生成合理的向量表示。句嵌入Sentence Embeddings原理将整个句子表示为一个向量用于句子相似度计算、文本分类等任务常见模型Sentence - BERTSBERT基于 BERT 模型进行改造通过对 BERT 输出进行特殊处理得到句子的向量表示。它在句子相似度计算任务上表现出色。InferSent是一种基于 LSTM 网络的句嵌入模型通过在有监督的任务上进行训练学习句子的语义表示。在计算机视觉中的应用图像嵌入Image Embeddings原理将图像转换为向量表示用于图像检索、图像分类等任务。常见模型ResNet一种深度卷积神经网络通过在大规模图像数据集上进行训练其最后一层全连接层的输出可以作为图像的嵌入向量。VGG也是经典的卷积神经网络具有简单的网络结构其输出的特征向量可以用于图像的语义表示。通俗易懂的描述 嵌⼊就相当于给⽂本穿上了“数字化”的外⾐ ⽬的是让机器更好的理解和处理。向量空间Vector Space所有的数据都变成向量这些向量组成⼀个庞⼤的矩阵。在这个世界⾥每个词、句⼦、图⽚、⽤ ⼾…都被表⽰成⼀个“点”即向量⼤家都有⾃⼰的“坐标”。 我们可以通过“距离”和“⽅向”来理解它们的关系。 Embedding 向量放在向量空间⾥有啥⽤ 距离表⽰相似度 向量之间越近意义越相似 向量之间越远意义越不同解决问题降维在⾼维度空间中数据点之间可能存在很⼤的距离使得样本稀疏嵌⼊模型可以减少数据 稀疏性。捕捉语义信息Embedding不仅仅是降维更重要的是它能够捕捉到数据的语义信息。语义相近 的词在向量上也是相近的特征表⽰原始数据的特征往往难以直接使⽤通过嵌⼊模型可以将特征转换成更有意义的表⽰。计算效率在低维度空间中对数据进⾏处理和分析往往更加⾼效。应用场景信息检索在搜索引擎中通过计算查询文本和文档的嵌入向量之间的相似度快速找到相关文档。推荐系统将用户的历史行为和物品的特征转化为嵌入向量通过向量相似度为用户推荐感兴趣的物品。情感分析将文本的嵌入向量输入到分类模型中判断文本的情感倾向积极、消极或中性。在做RGA开发时会涉及到向量数据库在创建向量数据库时需要使⽤Embedding模型对⽂本进⾏向量化处理。在检索的时候需要对⽤⼾输⼊进⾏向量化处理也需要⽤到Embedding模型常用的文本EmbeddingsOpenAI Embeddings模型OpenAI Embeddings 是 OpenAI 提供的一项将文本转换为数字向量的服务。这些向量能够捕捉文本的语义信息使得语义相近的文本在向量空间中位置相近在诸多自然语言处理任务中发挥着关键作用。from openai import OpenAI client OpenAI( api_key, base_urlhttps://api.34ku.com/v1/ ) resp client.embeddings.create( input你好你是一个机器人。, modeltext-embedding-3-large, dimensions512 ) print(resp.data[0].embedding) print(len(resp.data[0].embedding))使用langchain:from langchain_openai import OpenAIEmbeddings client OpenAIEmbeddings( api_key, base_urlhttps://api.34ku.com/v1/, modeltext-embedding-3-small, dimensions512 #维度512 ) #检索向量化 query client.embed_query(Hello world) print(query) print(len(query)) #文本向量化 documents client.embed_documents([Hello world, foo bar baz]) print(documents) print(len(documents))BGE-LargeHuggingFace 上的 BGE 模型是最好的开源嵌⼊模型之⼀。 BGE 模型由北京⼈⼯智能研究院 BAAI 创建。 是⼀家从事 AI 研发的私营⾮营利组织。import os from langchain_community.embeddings import HuggingFaceBgeEmbeddings from langchain_huggingface import HuggingFaceEmbeddings model_name BAAI/bge-small-en-v1.5 #自己电脑使用cpu,如果是gpu,可以使用cuda model_kwargs {device: cpu} #可以通过环境变量HF_ENDPOINT指定huggingface的镜像地址 os.environ[HF_ENDPOINT] https://hf-mirror.com #可以通过环境变量HF_HOME指定本地模型目录 #os.environ[HF_HOME] #normalize_embeddings: True 表示将输出的 embedding 向量做 L2 归一化处理即让每个向量的长度模长为 1 encode_kwargs {normalize_embeddings: True} # set True to compute cosine similarity 已过时 bge_embedding HuggingFaceBgeEmbeddings( model_namemodel_name, model_kwargsmodel_kwargs, encode_kwargsencode_kwargs ) #使用HuggingFaceEmbeddings bge_embedding HuggingFaceEmbeddings( model_namemodel_name, model_kwargsmodel_kwargs, encode_kwargsencode_kwargs ) #文档 embedding 与 query embedding documents bge_embedding.embed_documents([hello world]) query bge_embedding.embed_query(hello world) print(documents) print(query)Qwen3-EmbeddingQwen3 - Embedding是阿里云基于通义千问大模型Qwen3所推出的向量嵌入模型。是目前比较好用的嵌入模型# Requires transformers4.51.0 # Requires sentence-transformers2.7.0 import os from sentence_transformers import SentenceTransformer os.environ[HF_ENDPOINT] https://hf-mirror.com # Load the model qwen3_embedding SentenceTransformer(Qwen/Qwen3-Embedding-0.6B) resp qwen3_embedding.encode( [I like large language models., 今天的天气非常不错 ] ) print(resp[0]) print(len(resp[0]))langchain风格使用from langchain_core.embeddings import Embeddings from sentence_transformers import SentenceTransformer class Qwen3Embeddings(Embeddings): def __init__(self, model_name: str Qwen/Qwen3-Embedding-0.6B): self.qwen3_embedding SentenceTransformer(model_name) def embed_documents(self, texts: list[str]) - list[list[float]]: return self.qwen3_embedding.encode(texts) def embed_query(self, text: str) - list[float]: return self.qwen3_embedding.encode([text]) if __name__ __main__: qwen3_embedding Qwen3Embeddings() resp qwen3_embedding.embed_documents( [I like large language models., 今天的天气非常不错 ] ) qwen3_embedding.embed_query( 今天的天气非常不错 ) print(resp[0]) print(len(resp[0]))dashscope在线embedding模型from langchain_community.embeddings import DashScopeEmbeddings BAILIAN_API_KEYsk- embedding DashScopeEmbeddings( dashscope_api_keyBAILIAN_API_KEY, modeltext-embedding-v4 ) print(embedding.embed_query(你好))智谱embeddingfrom langchain_openai import OpenAIEmbeddings embedding OpenAIEmbeddings( api_key, base_urlhttps://open.bigmodel.cn/api/paas/v4/, modelembedding-2, ) print(embedding.embed_query(你好))多模态Embedding阿里云dashscopeimport dashscope modelmultimodal-embedding-v1 uri /Users/mac/PycharmProjects/ai-learning-python-repository/embedding/1.jpg local_image_uri ffile://{uri} dashscope.api_key sk- resp dashscope.MultiModalEmbedding.call( modelmodel, input[{image :local_image_uri}] ) print(resp)