OpenAI Embedding效果表现不佳:那如何评估选择Embedding?

news2024/9/22 5:41:12

OpenAI Embedding效果表现不佳

对文本进行Embedding是大模型应用中必不可少的一步, 虽然大模型OpenAI是最好的, 但OpenAI的Embedding却不是。本文Embedding评估的具体流程, 代码, 以及结论

如果仅关心代码 & 结论,直接跳到文末获取浏览即可。

OpenAI 最近发布了他们的新一代嵌入模型,称为*embedding v3*, 该embedding 模型被描述作为性能最高的embedding模型,它具有更高的多语言性能效果。

这些模型分为两类:

  1. 较小的为text-embedding-3-small
  2. 更大效果更好的的被称为text-embedding-3-large

关于这些模型的设计和训练方式,OpenAI(CloseAI)几乎没有透露任何信息。

与他们之前发布的嵌入模型(2022 年 12 月发布的 ada-002 模型类)一样,OpenAI 再次选择了闭源的方式,这意味着这些模型只能通过付费的 API 进行访问。

但是模型表现是否如此出色,以至于值得付费呢?

这篇文章的主要内容,是通过实证比较这些新模型与它们的开源对应模型的性能。

我们将依赖数据检索工作流程,根据用户查询找到语料库中最相关的文档。

我们的语料库将是欧洲人工智能法案,它目前正在最终验证阶段。除了是全球首个人工智能法律框架之外,这个语料库的一个有趣特点是它提供了 24 种语言版本。这使得可以比较数据检索的准确性:跨越不同语言体系!

这篇文章将会经历以下两个主要步骤:

  • 从多语言文本语料库中生成一个定制的合成问题/答案数据集
  • 比较 OpenAI 和最先进的开源嵌入模型在这个定制数据集上的准确性

该帖子中呈现的结果的代码和数据可供复制使用,参见文末的Github 仓库

请注意,欧盟 AI 法案仅作为示例,本文中所遵循的方法可以适用于其他数据语料库。

生成一个定制的问答数据集

首先,让我们开始生成一个关于自定义数据的问题和答案(Q/A)数据集,该数据集将用于评估不同嵌入模型的性能。

生成自定义 Q/A 数据集的好处是两个。

首先,通过确保数据集不是嵌入模型训练的一部分,可以避免数据Bias,这可能会在参考基准上发生

其次,它允许根据特定的数据语料库来定制评估,这在检索增强应用(例如 RAG)的情况下可能是相关的。

对于整体流程, 我们遵循llama_index中的处理方式: 预处理->分块->建立索引->提问回答

图片

使用 Llama Index 等 LLM 的数据框架来实现这一策略非常简单。语料库的加载和文本的分割可以方便地使用高级函数来完成,如下面的代码所示:

在这里插入图片描述

在这个例子中,语料库是欧盟 AI 法案的英文版本,直接从网络上获取。official URL
官方网址我们使用 2021 年 4 月的草案版本,因为最终版本尚未适用于所有欧洲语言。

在这个版本中,可以通过任何其他 23 种欧盟官方语言之一来替换 URL 中的英语,以检索不同语言的文本(BG 代表保加利亚语,ES 代表西班牙语,CS 代表捷克语,等等)。

图片

我们使用 SentenceSplitter 对象将文档分割成每个包含 1000 个tokens的chunk(大小可调整)。

对于英文,这大约会产生 100 个块。

每个块然后作为上下文提供给以下提示(Llama Index 库中建议的默认提示):

在这里插入图片描述

该提示旨在生成关于文档块的问题,就像老师正在准备即将到来的测验一样。

为每个块生成的问题数量作为参数’num_questions_per_chunk’传递,我们将其设置为两个。然后可以通过从 Llama Index 库调用 generate_qa_embedding_pairs 来生成问题。

在这里插入图片描述

我们在这项任务中依赖于 OpenAI 的 GPT-3.5-turbo-0125 模型,,支持 16K 上下文窗口,并针对对话进行了优化(不使用GPT-4的原因是GPT-4又贵又慢。。。)https://platform.openai.com/docs/models/gpt-3-5-turbo).

生成的对象 ‘qa_dataset’ 包含问题和答案(块)对。以下是生成的问题的示例,这是前两个问题的结果(其中 ‘answer’ 是文本的第一个块):

提案《关于制定关于人工智能的协调规则的条例(人工智能法案)的主要目标是什么?根据说明书?

提案的目的是如何在促进欧盟内部 AI 的应用的同时,解决与 AI 使用相关的风险,正如在上下文信息中所概述的那样?

语言的分块和问题数量取决于语言,英语大约有 100 个分块和 200 个问题,而匈牙利语有大约 200 个分块和 400 个问题。

评估 OpenAI Embedding模型

我们的评估函数遵循Llama Index 文档并包括两个主要步骤。

首先,将所有答案(文档块)的嵌入存储在 VectorStoreIndex 中,以实现高效检索(可以使用ChromaDB, 也可以直接存ES)。

然后,评估函数循环遍历所有查询,检索前 k 个最相似的文档,并根据 MRR 评估检索的准确性。平均倒数排名).

在这里插入图片描述

嵌入模型通过评估函数传递。embed_model参数,对于 OpenAI 模型来说,是一个使用模型名称和模型维度初始化的 OpenAIEmbedding 对象。

在这里插入图片描述

ThedimensionsAPI 参数可以缩短嵌入(即从序列末尾删除一些数字),而不会使嵌入失去其代表概念的属性。例如,OpenAI 建议在他们的公告中在 MTEB 基准测试中,嵌入可以缩短到 256 的大小,同时仍然优于未缩短的。text-embedding-ada-002嵌入大小为 1536。

我们在四种不同的 OpenAI 嵌入模型上运行了评估函数:

两个版本的text-embedding-3-large: 一个具有最低可能维度(256)的模型,另一个具有最高可能维度(3072)的模型。它们被称为’OAI-large-256’和’OAI-large-3072’

  • OAI-small: The OAI-small:Thetext-embedding-3-small嵌入模型,维度为 1536。
  • OAI-ada-002:传统遗留系统text-embedding-ada-002模型,维度为 1536。

每个模型都在四种不同的语言上进行了评估:英语(EN)、法语(FR)、捷克语(CS)和匈牙利语(HU),分别涵盖了日耳曼语系、罗曼语系、斯拉夫语系和乌拉尔语系的例子。

在这里插入图片描述

报告如下的 MRR 准确度结果:

图片

预期地,对于大型模型,观察到更大的嵌入尺寸 3072 具有更好的性能。与小型和传统的 Ada 模型相比,大型模型却比我们预期的要小。为了比较,我们还报告了 OpenAI 模型在 MTEB 基准测试中获得的性能。

图片

有趣的是,我们评估中大型、小型和 Ada 模型之间的性能差异要比 MTEB 基准测试中的差异明显得多,这反映出在大型基准测试中观察到的平均性能不一定反映在自定义数据集上获得的性能。

评估开源embedding模型

开源的嵌入式研究非常活跃,新模型经常发布。了解最新发布模型的好地方是Hugging Face 😊 MTEB 排行榜。

在本文的比较中,我们选择了一组最近发布的四个嵌入模型(2024 年)。选择的标准是它们在 MTEB 排行榜上的平均分数以及它们处理多语言数据的能力。下面报告了所选模型的主要特征的摘要。

E5-Mistral-7B-instruct(E5-mistral-7b): 这个由微软开发的 E5 嵌入模型是从…初始化的Mistral-7B-v0.1并在多语种数据集的混合上进行了微调。该模型在 MTEB 排行榜上表现最佳,但也是迄今为止最大的模型(14GB)。

multilingual-e5-large-instruct(ML-E5-large): 微软的另一个 E5 模型,旨在更好地处理多语言数据。它是从…初始化的。xlm-roberta-large并在多语种数据集的混合训练。它比 E5-Mistral 小得多(10 倍),但上下文大小也小得多(514)。

BGE-M3该模型由北京人工智能学院设计,是他们的多语言数据的最先进的嵌入模型,支持 100 多种工作语言。截至 2024 年 2 月 22 日,该模型尚未在 MTEB 排行榜上进行基准测试。

nomic-embed-text-v1(Nomic-Embed): 该模型由 Nomic 设计,声称在仅有 0.55GB 的情况下比 OpenAI Ada-002 和 text-embedding-3-small 表现更好。有趣的是,该模型是第一个完全可复制和可审计的(开放数据和开源训练代码)。

评估这些开源模型的代码与用于 OpenAI 模型的代码类似。主要变化在于模型规格,需要指定额外的细节,如最大上下文长度和池化类型。然后我们针对每种语言评估每个模型。

在这里插入图片描述

报告如下所示的 MRR 方面的准确性。

图片

BGE-M3 表现出最佳性能,平均排名第二的是 ML-E5-Large,E5-mistral-7b 和 Nomic-Embed。BGE-M3 模型尚未在 MTEB 排行榜上进行基准测试,我们的结果表明它可能比其他模型排名更高。值得注意的是,虽然 BGE-M3 针对多语言数据进行了优化,但它在英语方面的表现也比其他模型更好。

我们还报告了每个嵌入模型的处理时间如下。

图片

E5-mistral-7b,比其他型号大 10 倍以上,毫无意外地成为最慢的模型。

结论

将八个测试模型的性能放在单个图表中进行对比:

图片

结果为:

最佳表现是由开源模型获得的. 该BGE-M3由北京人工智能研究院开发的模型成为了表现最好的模型。该模型与 OpenAI 模型具有相同的上下文长度(8K),大小为 2.2GB。

OpenAI 的一致性范围. 大型(3072)、小型和传统的 OpenAI 模型的性能非常相似。然而,减小大型模型(256)的嵌入大小导致性能下降。

•**语言敏感性。**几乎所有模型(除了 ML-E5-large)在英语上表现最佳。在捷克语和匈牙利语等语言中观察到了显著的性能变化。

因此,您应该选择付费的 OpenAI 订阅,还是托管一个开源的嵌入模型?

OpenAI 的最近的价格调整通过降低他们的 API 成本,现在每百万个令牌的费用已经降至 0.13 美元。每月处理一百万个查询(假设每个查询涉及约 1K 个令牌)的成本大约为 130 美元。因此,根据您的使用情况,租用和维护自己的嵌入式服务器可能不具有成本效益。

成本效益并非唯一考虑因素。其他因素,如延迟、隐私和对数据处理工作流程的控制,也可能需要考虑。开源模型具有完全的数据控制优势,增强了隐私和定制性。另一方面,OpenAI 的 API 存在延迟问题,有时会导致延长的响应时间。

总之,选择开源模型和像 OpenAI 这样的专有解决方案并不容易得出一个简单的答案。开源嵌入提供了一个引人注目的选择,将性能与对数据更大的控制结合在一起。相反,OpenAI 的产品可能仍然吸引那些优先考虑便利性的人,特别是如果隐私问题是次要的。

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1994268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件项目质量管理体系,软件评审,资质认证,安全建设及项目管理匹配资料(原件参考)

软件项目质量管理体系是指一套系统化的管理方法、流程、工具和文档,旨在确保软件项目从需求分析、设计、开发、测试到部署和维护的整个生命周期中,都能达到预定的质量标准和客户期望。该体系通过明确的角色和责任、标准化的工作流程、有效的质量控制和持…

NC 找到搜索二叉树中两个错误的节点

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 一棵二叉树原…

Windows系统下的MATLAB 虚拟机中Ubuntu系统的ROS通讯

在Windows系统下的MATLAB与虚拟机中Ubuntu系统的ROS进行通讯,主要涉及到网络配置、环境变量设置以及MATLAB与ROS的接口调用。以下是一个详细的步骤说明: 一、网络配置 设置虚拟机网络: 确保虚拟机(Ubuntu系统)的网络…

7-3 单机多卡并行

一台机器可以安装多个GPU(1-16)在训练和预测时,我们将一个小批量计算切分到多个GPU上来达到加速的目的 同样一个小批量,让用多个GPU同时运行来一起完成这个计算梯度的过程常用的切分方案有 数据并行 模型并行 通道并行&#xff…

中国中医科学院某医院:监控易7.0开启一体化运维新篇章

在首都北京的医疗领域中,中国中医科学院某医院作为佼佼者,一直致力于为患者提供高质量的医疗服务。然而,随着医院业务的不断扩展和IT系统的日益复杂,如何确保IT基础资源的稳定运行,成为了医院面临的一大挑战。为了应对…

Java继承细节

目录 继承给编程带来的便利 细节1 案例演示 细节2 案例演示 细节3 案例演示 细节4 案例演示 细节5 细节6 细节7 案例演示 细节8 细节9 细节10 继承给编程带来的便利 提高了代码的复用性,代码的扩展性与维护性。 细节1 子类继承了所有的属性和方法…

Java面试题--JVM大厂篇之破解 JVM 性能瓶颈:实战优化策略大全

目录 引言: 正文: 1. 常见的JVM性能问题 频繁的GC导致应用暂停 内存泄漏导致的内存不足 线程争用导致的CPU利用率过高 类加载问题导致的启动时间过长 2. 优化策略大全 2.1 代码层面的优化 2.1.1 避免不必要的对象创建 2.1.2 优化数据结构的选择 2.1.3 使用并发工具…

【文心超级智能体创造营】打造「潮流穿搭助手」智能体 引领潮流新动向

【文心超级智能体创造营】打造潮流穿搭助手 引领潮流新动向 文章目录 【文心超级智能体创造营】打造潮流穿搭助手 引领潮流新动向一、智能体发展背景二、文心智能体平台—AgentBuilder一图概览三、我的智能体—潮流穿搭助手3.1 智能体初步设想3.2 prompt提示词准备3.3 &#x1…

LabVIEW中CANopen 读取程序解读

这段程序用于创建 CANopen 接口,并读取 CANopen CAN 帧消息。以下是详细的解读: 左侧部分 node-ID (U8): 指定节点 ID,用于标识 CANopen 网络中的设备。CANopen interface (U32): 指定 CANopen 接口。baud rate (U32): 设置波特率&#xff0…

企业如何发布新闻稿到全球媒体上?

在经济全球化的今天,中国某个小县生产的商品可能会卖到全国各地,我们国家很多本土品牌面临出海的难题。当然有些企业已经通过国外的代理商把货品铺到了国外的市场,有的通过亚马逊这样的电商平台进行销售,但这些只是铺货&#xff0…

基于融合正余弦和柯西变异的麻雀搜索算法SCSSA优化CNN-BiLSTM的多变量时间序列预测

matlab R2024a以上 一、数据集 二、融合正余弦和柯西变异的麻雀搜索算法 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群体智能优化算法,其灵感来源于麻雀觅食行为。为了提高算法的性能,可以融合正余弦函数和柯西变…

基于SpringBoot+Vue的城市垃圾分类管理系统(带1w+文档)

基于SpringBootVue的城市垃圾分类管理系统(带1w文档) 基于SpringBootVue的城市垃圾分类管理系统(带1w文档) 信息数据的处理完全依赖人工进行操作,会耗费大量的人工成本,特别是面对大量的数据信息时,传统人工操作不仅不能对数据的出错率进行保…

OBIEE 12C 定制CSS类:隐藏数据透视表某个合计列

1 说明 1.1 信息介绍 BIEE:Oracle Business Intelligence Enterprise Edition(Oracle商业智能企业版) 版本:OBIEE 12c 数据源:数据透视表 2 目标 2.1 源 2.2 实现 3 实现步骤 3.1 创建CSS:CUX_NEED_HI…

关于重复提交

关于重复提交 ①重复点击提交按钮 import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.ht…

探索设计模式:观察者模式

探索设计模式:观察者模式 🧐观察者模式简介:gem:核心概念:rainbow:观察者模式的优点:truck:实现步骤1. 定义主题接口2. 实现观察者接口3. 具体主题实现4. 具体观察者实现5. 调用 :triangular_flag_on_post:总结 在实际开发过程中,设计模式的作…

音频剪辑界的‘四大天王’来袭,打工人也能秒变调音师

在这个数字化的时代,声音不仅仅是传递信息的工具,它还承载着丰富的情感。就像夜空中最亮的星星一样,它引导着我们这些追求完美的声音爱好者,在音乐的世界里自由探索。今天,让我们一起来认识一下音频剪辑界的"四大…

kafka基础概念二

1.Kafka中主题和分区的概念 1.主题Topic 主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息进行分类。不同的topic会被订阅该topic的消费者消费 但是有一个问题,如果说这个topic中的消息非常非常多,多到需要几T来存,因…

LVS-Nat和Dr模式集群原理及部署

目录 一.lvs-nat模式集群原理及部署方法 1.实验环境 2.思路图 3.lvs配置1: 4.lvs配置2: 5.webserver1配置: 6.webserver2配置: 7.lvs配置: 二.lvs-dr模式原理集群及部署方法 1.实验环境 2.思路图 3.client: 简单配置i…

C++ 类与对象

面向对象程序设计基本特点 特点: 抽象(数据抽象,行为抽象) 数据抽象:int hour,int minute.....,车:长,宽,高.... 功能抽象:showTime(),setTime() .....车:刹车…

rocketMQ5.0事务消息实战一

事务消息逻辑 首先我们来docker 部署rocketMQ与rocketMQDashBoard docker ps查看rocketMQ 容器名称 docker ps 进入容器内部 docker exec -it rmqnamesrv /bin/bash 创建事务消息 sh mqadmin updateTopic -c DefaultCluster -t TRANSACTIONTopic -n 127.0.0.1:9876 -a mes…