开源替代品:Cohere Embed v3 和开源选择指南
By James Briggs · 2024-03-23
今天,我们将一起研究构建检索流水线时可以使用的最佳嵌入模型。除了目前普遍使用的OpenAI GPT-2,还有许多其他模型可供选择,其中一些甚至可能比GPT-2更好。我们将重点介绍Cohere Embed v3模型,以及开源模型的选择指南。
构建检索流水线:最佳嵌入模型选择指南
- 今天,我们将一起探讨一些在构建检索流水线时可以使用的最佳嵌入模型。目前,几乎每个人都在使用OpenAI GPT-2,但实际上还有许多其他模型,其中一些甚至可能比GPT-2更好。如果按照排行榜来看,有很多模型要好得多,但并不是一切都取决于排行榜。在真实数据测试中,仍然可以发现GPT-2效果良好,但与许多其他模型相比并无特别优势。首先,让我们来看一下一个最受欢迎的嵌入模型排行榜,即MTEP Benchmark。MTEP是大规模文本嵌入基准,托管在Hung Face Spaces上。最近,有一个新模型登上榜首,我们将很快进行介绍,但今天我们将介绍另一个Go Here的模型,与排行榜上的模型几乎没有区别。我们将深入研究一个小型的开源嵌入模型,有许多开源模型可供选择,但我发现效果最好的是E5 Base V1,如果模型大小不是太大问题,您还可以将此模型升级为E5 Large V2。我们还将比较这些模型,探究最受欢迎的嵌入模型,即GPT-2。 在接下来的内容中,我将带领大家了解如何使用这三个模型,首先从安装开始。每个模型的PIP安装都非常简单,OpenAI在此处,Transformers在此处。我们将使用的数据集是AI Archive Trunk数据集,你可能在最近的一些视频中看到过。接着,我们来到嵌入函数部分,这是每个模型之间最大的不同。两个API嵌入模型OpenAI和Cair是最直接的,特别是OpenAI,您只需输入文档,模型就会处理好了。而使用Cair时,您需要注意使用正确的导入类型,文档嵌入时为Search Document,查询嵌入时为Search Query。此外,还需要注意模型名称。
构建检索流水线:最佳嵌入模型选择指南
使用开源模型进行文本嵌入的步骤详解
- 当我们开始研究如何使用开源模型时,事情就变得有些复杂了。虽然这很正常,因为开源模型并不是隐藏在API背后的所有东西。但不管怎样,实际上并不是特别复杂的。唯一需要注意的是,如果想要快速速度,你可能会想要启用一个更酷的GPU。我认为你可以在Mac上运行这个模型,所以在运行NPS时需要注意这一点,而不是使用Cuda。在这种情况下,你需要切换到MPS,并确保在这两个设备中选择MPS设备。然后我们初始化一个分词器和模型,进行文本嵌入。为了创建这些嵌入,我们需要对这个模型进行一些格式化处理,需要在每个输入文档或段落之前加上文本“段落”,这样只是告诉模型这是一个文本段落,而不是一个查询文本。稍后你会看到,当我们进行查询时,会用查询代替段落。我们对所有内容进行分词,然后通过模型处理,提取模型的隐藏状态,并将所有内容转换为单个嵌入,用于每个输入文档或段落。接着将所有内容加入到我们的索引中。在这里储存向量时,我们只是使用一个本地的numpy数组,因为数据集很小,我们只是为了演示。显然,如果想要投入生产环境,不要这样做,使用一个向量数据库,除非你愿意处理所有与数据管理相关的事务。我在这里为我们的APIs使用了1到8的大小,实际上我可能可以将这个数值增加到256,这样可能会加快速度。OpenAI花了9分钟来索引所有这些文档,而Cair花了5分半钟。看起来CooH在摄取和返回嵌入方面速度更快。然后,如果我们看看我们的开源模型E5,这是一个相当小的模型,所以我们可以很快地进行嵌入。为此,我在Google Collab上使用了一个V00 GPU,在内存中嵌入整个索引可能会导致内存溢出,你的内存可能会耗尽,而不是存储你的numpy数组的GPU嵌入内存。所以,一个明显的问题是我们这里有一个更高的批处理大小,如果我们减少这个数量,可能会看到更慢的结果。当索引准备好后,我们就可以进行查询了,接着进入查询功能,与之前的工作基本相同,我们要创建我们的嵌入。
使用开源模型进行文本嵌入的步骤详解
使用嵌入模型进行相似度计算
- 在这里,我本可以直接使用 OpenAI 笔记本中的嵌入功能,但由于需要将输入类型调整为查询而不是文档或段落,因此无法使用嵌入功能。对于 E5 模型,我们需要对其进行修改,这里我们使用查询而不是段落。在完成所有这些步骤之后,我们计算查询向量与索引之间的点积相似度,并对 coher 模型执行相同的操作。这两者都是经过归一化的,因此我们只是计算点积。我认为,对于 E5 模型,输出没有经过归一化,因此我们可以归一化向量,然后使用点积,或者直接使用余弦相似度,这只是经过归一化的点积。此外,在存储这些向量时需要注意的一点是,每个嵌入模型的嵌入维度不同,使用 002 时输出的维度是 1536,这意味着我们将使用更多的存储空间,而如果使用 cair 嵌入模型,则只有 1224,仍然比使用 768 的 E5 嵌入模型要多。这在长期考虑中很重要,存储更高维度的向量会增加成本。现在看每个模型之间的结果,在我运行的几个查询中,它们的性能表现非常相似。这个数据集对于嵌入模型来说并不容易理解,因为非常混乱,但这更符合现实世界的情况,而不是像干净的基准数据那样。我认为这是一个很好的例子,展示了它们能做什么和不能做什么。我问了为什么应该使用 Llama 2 这个问题非常简单,我知道 Llama 2 论文在这个数据集中,所以我知道应该能找到答案。当看到这段文本时,实际上就是关于 Llama 2 的,只是格式奇怪而已。第一段提到了 Llama 2,并询问为什么应该使用它,内容是:适用于助手式聊天,用于各种自然语言生成测试,但基本这就是它的用途。在第二段再次讨论 Llama 2,可以看到它针对对话用例进行了优化,在大多数基准测试以及人类评估中,能够胜过开源聊天模型,有助于安全性,可能成为闭源模型的替代品。最后一段也给出了类似的答案,指出比开源模型和某些闭源模型表现更好。这就是 002 和 cooh 模型的情况,我们得到了一些。
使用嵌入模型进行相似度计算
深入探讨红队测试和语言模型的关系
- 在这里我们看到了不同的结果,不幸的是,第一个实际上是在谈论第一个larm模型,所以并不完全正确,直到这里,我们确实得到了002获得的一个相同结果,优化对话outform开源聊天模型可能代替Clos Source模型,然后我们回到这里,我们得到了和前一个一样的反应,所以比开源更好,与闭源持平。接着是E5,顶部的第一个有点不相关,所以我们可以忽略,但我们得到的两个内容又与前两个模型中看到的内容相同,好的很酷。看另一个更具体的问题关于红队测试对lus的安全测试或压力测试 直接看2,我们看到,这里的第一个在谈论红队测试,不是具体到luma 2,尽管我们会看到没有一个模型实际在同一个数据块中找到了该信息,这让我想到,我们数据集中没有LL 2和红队测试在同一块中,但我们可以看到,这个在谈论笑话、侮辱基于生理特征、种族主义语言等等,这是他们用于红队测试的模型,所以这很相关,我们看到红队方法和结果,第二个,我们可以看到,红队成员在这里红队成员喜欢这项任务,并没有经历过显著的负面情绪,这使我们可以扩展红队发现系统漏洞的能力,一切等等。不错,这有点相关,但不是很好然后我们有通过越狱进行红队测试的聊天GT,我认为这个可能更相关,更有用,所有这些都在描述整体红队测试,然后最后提到了一个叫做红队测试的定性方法,所以,结果在我的看法中没什么特别的。现在对于Co,我们可以看到,在信息宣传方面起到一定作用生成极端主义文本,这是他们在进行红队测试时所做的,散布谣言等等,随着AI系统的改进,可能带来的伤害范围似乎在增长,应对伤害的一个潜在有用工具是红队测试,使用手动或自动化方法对语言模型进行对抗性探测有害输出,对我来说,这个比002中的任何一个都更多地解释了关于红队测试的内容然后我们就有另一个关于通过越狱对Chad进行红队测试的,我们已经看过这个了,所以我不会再说一遍了,但这是一个不错的回应或文档,检索或包括可能被恶意行为者利用的限制和风险,这是红队测试的另一个部分,测试它看看人们是否可以恶意使用这些方法,红队测试方法不足以解决这些问题。
深入探讨红队测试和语言模型的关系
AI红队练习:发现漏洞与弱点
- AI红队练习(red teaming exercises)等做法有助于组织发现自身的局限性和脆弱性,以及他们开发的AI系统的局限性和缺陷,并实际应对。红队练习是一种有组织的努力,旨在发现计划、组织或技术系统中的缺陷和漏洞,通常由专门的红队执行,他们试图采用攻击者的思维和方法。这有助于组织改进安全性等。在我看来,这要比Open AI的回应更好。另外,在公开可用的红队数据集和红队攻击方面也有讨论。综合来看,红队练习成员参与实验时很享受,他们被使命感激励着,希望能让AI系统变得更加友好。
AI红队练习:发现漏洞与弱点
Conclusion:
深入学习嵌入模型选择指南,掌握Cohere Embed v3和开源模型的应用。在构建检索流水线时,选择适合的嵌入模型至关重要。