【值得收藏】大模型嵌入技术详解:从理论到实践,OpenAI到本地化部署

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

1.OpenAI Embedding 嵌入模型

OpenAI 服务提供商提供了线上的 Embeddings 服务,涵盖了 3 种模型,信息对比如下

OpenAI 的 Embeddings 嵌入模型虽然是市面上效果最好的嵌入模型,虽然价格非常低廉,不过由于没有本地版本,而且接口响应速度相对较慢,在需要对大量文档进行嵌入时,效率非常低,所以国内使用得并不多(国内一般会使用对应的本地或者本地服务提供商的嵌入模型)。
OpenAI Embeddings 官网文档:

https://platform.openai.com/docs/guides/embeddings

2.Embedding 组件使用

在 LangChain 中,Embeddings 类是一个专为与文本嵌入模型交互而设计的类,这个类为许多嵌入模型提供商(如 OpenAI、Cohere、Hugging Face 等)提供一个标准的接口。
LangChain 中 Embeddings 类提供了两种方法:

  1. embed_documents:用于嵌入文档列表,传入一个文档列表,得到这个文档列表对应的向量列表。
  2. embed_query:用于嵌入单个查询,传入一个字符串,得到这个字符串对应的向量。
    并且 Embeddings 类并不是一个 Runnable 组件,所以并不能直接接入到 Runnable 序列链中,需要额外的 RunnableLambda 函数进行转换,核心基类代码也非常简单
class Embeddings(ABC):    """Interface for embedding models."""    @abstractmethod    defembed_documents(self, texts: List[str]) -> List[List[float]]:        """Embed search docs."""    @abstractmethod    defembed_query(self, text: str) -> List[float]:        """Embed query text."""    asyncdefaembed_documents(self, texts: List[str]) -> List[List[float]]:        """Asynchronous Embed search docs."""        returnawait run_in_executor(None, self.embed_documents, texts)    asyncdefaembed_query(self, text: str) -> List[float]:        """Asynchronous Embed query text."""        returnawait run_in_executor(None, self.embed_query, text)

如果如果想对接自定义的 Embedding 嵌入模型,其实非常简单,只需实现 embed_documents 和 embed_query这两个方法即可。
LangChain 使用 OpenAI Embeddings 嵌入模型示例

import dotenvimport numpy as npfrom langchain_openai import OpenAIEmbeddingsfrom numpy.linalg import normdotenv.load_dotenv()defcosine_similarity(vector1: list, vector2: list) -> float:    """计算传入两个向量的余弦相似度"""    # 1.计算内积/点积    dot_product = np.dot(vector1, vector2)    # 2.计算向量的范数/长度    norm_vec1 = norm(vector1)    norm_vec2 = norm(vector2)    # 3.计算余弦相似度    return dot_product / (norm_vec1 * norm_vec2)embeddings = OpenAIEmbeddings()query_vector = embeddings.embed_query("你好,我是openai,我喜欢打篮球")documents_vector = embeddings.embed_documents([    "你好,我是openai,我喜欢打篮球",    "这个喜欢打篮球的人叫openai",    "求知若渴,虚心若愚"])print(query_vector)print(len(query_vector))print("============")print(len(documents_vector))print("vector1与vector2的余弦相似度:", cosine_similarity(documents_vector[0], documents_vector[1]))print("vector2与vector3的余弦相似度:", cosine_similarity(documents_vector[0], documents_vector[2]))

3.CacheBackedEmbedding 使用与场景

通过嵌入模型计算传递数据的向量需要昂贵的算力,对于重复的内容,Embeddings 计算的结果肯定是一致的,如果数据重复仍然二次计算,会导致效率非常低,而且增加无用功。
所以在 LangChain 中提供了一个叫CacheBackedEmbedding的包装类,一般通过类方法 from_bytes_store 进行实例化,它接受以下参数:

  1. underlying_embedder:用于嵌入的嵌入模型。
  2. document_embedding_cache:用于缓存文档嵌入的任何存储库(ByteStore)。
  3. batch_size:可选参数,默认为 None,在存储更新之间要嵌入的文档数量。
  4. namespace:可选参数,默认为“”,用于文档缓存的命名空间。此命名空间用于避免与其他缓存发生冲突。例如,将其设置为所使用的嵌入模型的名称。
  5. query_embedding_cache:可选默认为 None 或者不缓存,用于缓存查询/文本嵌入的 ByteStore,或这是为 True 以使用与 document_embedding_cache 相同的存储。
    注意事项:CacheBackEmbedding 默认不缓存 embed_query 生成的向量,如果要缓存,需要设置 query_embedding_cache 的值,另外请尽可能设置 namespace,以避免使用不同嵌入模型嵌入的相同文本发生冲突。
    使用示例
import dotenvimport numpy as npfrom langchain.embeddings import CacheBackedEmbeddingsfrom langchain.storage import LocalFileStorefrom langchain_openai import OpenAIEmbeddingsfrom numpy.linalg import normdotenv.load_dotenv()defcosine_similarity(vector1: list, vector2: list) -> float:    """计算传入两个向量的余弦相似度"""    # 1.计算内积/点积    dot_product = np.dot(vector1, vector2)    # 2.计算向量的范数/长度    norm_vec1 = norm(vector1)    norm_vec2 = norm(vector2)    # 3.计算余弦相似度    return dot_product / (norm_vec1 * norm_vec2)embeddings = OpenAIEmbeddings(model="text-embedding-3-small")embeddings_with_cache = CacheBackedEmbeddings.from_bytes_store(    embeddings,    LocalFileStore("./cache/"),    namespace=embeddings.model,    query_embedding_cache=True,)query_vector = embeddings_with_cache.embed_query("你好,我是openai,我喜欢打篮球")documents_vector = embeddings_with_cache.embed_documents([    "你好,我是openai,我喜欢打篮球",    "这个喜欢打篮球的人叫openai",    "求知若渴,虚心若愚"])print(query_vector)print(len(query_vector))print("============")print(len(documents_vector))print("vector1与vector2的余弦相似度:", cosine_similarity(documents_vector[0], documents_vector[1]))print("vector2与vector3的余弦相似度:", cosine_similarity(documents_vector[0], documents_vector[2]))

4.CacheBackedEmbedding 运行流程

CacheBackedEmbedding底层的运行流程非常简单,本质上就是封装了一个持久化存储的数据存储仓库,在每次进行数据嵌入前,会从前数据存储仓库中检索对对应的向量,然后逐个匹配对应的数据是否相等,找到缓存中没有的文本,然后将这些文本调用嵌入生成向量,最后将生成的新向量存储到数据仓库中,从而完成对数据的存储。
运行流程如下:

5.Hugging Face 文本嵌入模型

5.1 Hugging Face 本地模型

在某些对数据保密要求极高的场合下,数据不允许传递到外网,这个时候就可以考虑使用本地的文本嵌入模型——Hugging Face 本地嵌入模型,配置的技巧也非常简单,安装 langchain-huggingface 与 sentence-transformers 包,命令如下:

pip install -U langchain-huggingface sentence-transformers

其中 langchain-huggingface 是 langchain 团队基于 huggingface 封装的第三方社区包,sentence-transformers 是一个用于生成和使用预训练的文本嵌入,基于 transformer 架构,也是目前使用量最大的本地文本嵌入模型。配置好后,就可以像正常的文本嵌入模型一样使用了,示例:

from langchain_huggingface import HuggingFaceEmbeddingsembeddings = HuggingFaceEmbeddings()query_vector = embeddings.embed_query("你好,我是慕小课,我喜欢打篮球")print(query_vector)print(len(query_vector))

sentence-transformers 除此加载的时候,会将模型从本地应用加载到内容中,首次加载相对会慢,后续调用速度即可恢复正常。除此之外,使用 Hugging Face 文本嵌入还可以加载任意本地的文本嵌入模型,传递 model_name 与 cache_folder 参数即可,示例:

from langchain_huggingface import HuggingFaceEmbeddingsembeddings = HuggingFaceEmbeddings(    model_name="neuml/pubmedbert-base-embeddings",    cache_folder="./embeddings/")query_vector = embeddings.embed_query("你好,我是慕小课,我喜欢打篮球")print(query_vector)print(len(query_vector))
5.2 HuggingFace远程嵌入模型

部分模型的文件比较大,如果只是短期内调试,可以考虑使用 HuggingFace 提供的远程嵌入模型,首先安装对应的依赖

pip install huggingface_hub

然后在 Hugging Face 官网(https://huggingface.co/)的 setting 中添加对应的访问秘钥,并配置到 .env 文件中
HUGGINGFACEHUB_API_TOKEN=xxx
接下来就可以使用 Hugging Face 提供的推理服务,这样在本地服务器上就无需配置对应的文本嵌入模型了。

import dotenvfrom langchain_huggingface import HuggingFaceEndpointEmbeddingsdotenv.load_dotenv()embeddings = HuggingFaceEndpointEmbeddings(model="sentence-transformers/all-MiniLM-L12-v2")query_vector = embeddings.embed_query("你好,我是openai,我喜欢打篮球")print(query_vector)

print(len(query_vector))
相关资料信息:

  1. Hugging Face 官网:https://huggingface.co/
  2. HuggingFace 嵌入文档:https://python.langchain.com/v0.2/docs/integrations/text_embedding/sentence_transformers/
  3. HuggingFace 嵌入翻译文档:
    http://imooc-langchain.shortvar.com/docs/integrations/text_embedding/sentence_transformers/
  4. 百度千帆文本嵌入模型
    如果想对接国内的文本嵌入模型提供商,可以考虑百度千帆,是目前国内生态最好,支持的模型最多(Embedding-V1、bge-large-zh、bge-large-en、tao-8k),速度最快的 AI 应用开发平台。
    由于目前百度千帆并没有单独封装到独立的包,可以直接从 langchain_community 中导入,使用示例如下:
import dotenvfrom langchain_community.embeddings.baidu_qianfan_endpoint import QianfanEmbeddingsEndpointdotenv.load_dotenv()embeddings = QianfanEmbeddingsEndpoint()query_vector = embeddings.embed_query("我叫慕小课,我喜欢打篮球游泳")print(query_vector)print(len(query_vector))

普通人如何抓住AI大模型的风口?

为什么要学AI大模型

当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!

DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

在这里插入图片描述

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
在这里插入图片描述

AI大模型开发工程师对AI大模型需要了解到什么程度呢?我们先看一下招聘需求:

在这里插入图片描述

知道人家要什么能力,一切就好办了!我整理了AI大模型开发工程师需要掌握的知识如下:

大模型基础知识

你得知道市面上的大模型产品生态和产品线;还要了解Llama、Qwen等开源大模型与OpenAI等闭源模型的能力差异;以及了解开源模型的二次开发优势,以及闭源模型的商业化限制,等等。

img

了解这些技术的目的在于建立与算法工程师的共通语言,确保能够沟通项目需求,同时具备管理AI项目进展、合理分配项目资源、把握和控制项目成本的能力。

产品经理还需要有业务sense,这其实就又回到了产品人的看家本领上。我们知道先阶段AI的局限性还非常大,模型生成的内容不理想甚至错误的情况屡见不鲜。因此AI产品经理看技术,更多的是从技术边界、成本等角度出发,选择合适的技术方案来实现需求,甚至用业务来补足技术的短板。

AI Agent

现阶段,AI Agent的发展可谓是百花齐放,甚至有人说,Agent就是未来应用该有的样子,所以这个LLM的重要分支,必须要掌握。

Agent,中文名为“智能体”,由控制端(Brain)、感知端(Perception)和行动端(Action)组成,是一种能够在特定环境中自主行动、感知环境、做出决策并与其他Agent或人类进行交互的计算机程序或实体。简单来说就是给大模型这个大脑装上“记忆”、装上“手”和“脚”,让它自动完成工作。

Agent的核心特性

自主性: 能够独立做出决策,不依赖人类的直接控制。

适应性: 能够根据环境的变化调整其行为。

交互性: 能够与人类或其他系统进行有效沟通和交互。

img

对于大模型开发工程师来说,学习Agent更多的是理解它的设计理念和工作方式。零代码的大模型应用开发平台也有很多,比如dify、coze,拿来做一个小项目,你就会发现,其实并不难。

AI 应用项目开发流程

如果产品形态和开发模式都和过去不一样了,那还画啥原型?怎么排项目周期?这将深刻影响产品经理这个岗位本身的价值构成,所以每个AI产品经理都必须要了解它。

img

看着都是新词,其实接触起来,也不难。

从0到1的大模型系统学习籽料

最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师(吴文俊奖得主)
在这里插入图片描述

给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。

图片

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

适学人群

应届毕业生‌: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。
在这里插入图片描述

AI大模型系统学习路线

在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

  • 基础篇,包括了大模型的基本情况,核心原理,带你认识了解大模型提示词,Transformer架构,预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门AI大模型
  • 进阶篇,你将掌握RAG,Langchain、Agent的核心原理和应用,学习如何微调大模型,让大模型更适合自己的行业需求,私有化部署大模型,让自己的数据更加安全
  • 项目实战篇,会手把手一步步带着大家练习企业级落地项目,比如电商行业的智能客服、智能销售项目,教育行业的智慧校园、智能辅导项目等等

img

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。

AI大模型入门到实战的视频教程+项目包

看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

在这里插入图片描述
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

海量AI大模型必读的经典书籍(PDF)

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
在这里插入图片描述

600+AI大模型报告(实时更新)

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

AI大模型面试真题+答案解析

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
在这里插入图片描述

在这里插入图片描述

AI时代,企业最需要的是既懂技术、又有实战经验的复合型人才,**当前人工智能岗位需求多,薪资高,前景好。**在职场里,选对赛道就能赢在起跑线。抓住AI这个风口,相信下一个人生赢家就是你!机会,永远留给有准备的人。

如何获取?

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值