OpenAI与开源多语言嵌入模型

本文对比了OpenAI的最新embedding模型与开源的多语言模型,通过生成自定义Q/A数据集进行评估。结果显示,尽管OpenAI模型在某些情况下表现良好,但开源的BGE-M3模型在多语言性能上更胜一筹,且具有成本和隐私优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:OpenAI vs Open-Source Multilingual Embedding Models

选择最适合您的数据的模型

2024 年 2 月 25 日

OpenAI最近发布了他们的新一代embedding模型,称为embeddingv3,他们描述是他们性能最好的embedding模型,具有更高的多语言性能。这些模型分为两类:较小的称为text-embeddings-3-small,较大且功能更强大的称为text-embeddings-3-large

有关这些模型的设计和训练方式的信息披露得很少。正如他们之前发布的embedding模型(2022年12月与ada-002模型类)一样,OpenAI再次选择了一种闭源方法,其中模型只能通过付费API访问。

但这些性能真的值得花钱去看吗?

这篇文章的动机是将这些新模型与开源模型的性能进行实证比较。我们将依赖于一个数据检索工作流,在这个工作流中,必须根据用户查询找到语料库中最相关的文档。

我们的语料库将是欧洲人工智能法案,该法案目前处于验证的最后阶段。这个语料库除了是世界上第一个关于人工智能的法律框架外,还有一个有趣的特点,那就是它有24种语言版本。这使得比较不同语言族的数据检索的准确性成为可能。

这篇文章将通过以下两个主要步骤:

  • 从多语言文本语料库生成自定义合成问题/答案数据集
  • 在此自定义数据集上比较OpenAI和最先进的开源embedding模型的准确性。 重现本文中呈现的结果的代码和数据可以在这个Github存储库中获得。请注意,本文以欧盟人工智能法案为例,本文所采用的方法可以适用于其他数据语料库。

生成自定义Q/A数据集

让我们首先从生成自定义数据的问答(Q/ a)数据集开始,该数据集将用于评估不同embedding模型的性能。生成自定义Q/ a数据集的好处是双重的。首先,它通过确保数据集没有成为embedding模型训练的一部分来避免偏差,这可能发生在参考基准上,如MTEB。其次,它允许将评估调整为特定的数据语料库,这可能与检索增强应用程序(RAG)等情况相关。

我们将遵循LlamaIndex在他们的文档中建议的简单流程。语料库首先被分成一组块。然后,对于每个分块,通过大型语言模型(large language model, LLM)生成一组合成问题,使答案位于相应的分块中。这个过程说明如下:

img

为您的数据生成问题/答案数据集,方法来自LlamaIndex

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

1
2
3
4
5
6
7
8
9
10
from llama_index.readers.web import SimpleWebPageReader
from llama_index.core.node_parser import SentenceSplitter

language = "EN"
url_doc = "https://eur-lex.europa.eu/legal-content/"+language+"/TXT/HTML/?uri=CELEX:52021PC0206"

documents = SimpleWebPageReader(html_to_text=True).load_data([url_doc])

parser = SentenceSplitter(chunk_size=1000)
nodes = parser.get_nodes_from_documents(documents, show_progress=True)

在这个例子中,语料库是欧盟人工智能法案的英文版本,直接取自Web,使用这个官方URL。我们使用2021年4月的草案版本,因为最终版本尚未适用于所有欧洲语言。在这个版本中,可以用其他23种欧盟官方语言中的任何一种语言替换URL中的英语,以检索不同语言的文本(BG表示保加利亚语,ES表示西班牙语,CS表示捷克语,等等)。

img

下载欧盟24种官方语言的欧盟人工智能法案链接(来自欧盟官方网站)

我们使用SentenceSplitter对象将文档分成每1000个令牌的块。对于英语来说,这导致大约100个块。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
prompts={}
prompts["EN"] = """\
Context information is below.

-------
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值