首页 > 科技周边 > 人工智能 > 与多语言E5-Large和Jina嵌入双子座的比较

与多语言E5-Large和Jina嵌入双子座的比较

Christopher Nolan
发布: 2025-03-20 15:02:13
原创
775 人浏览过

Gemini Embedding:谷歌Gemini AI框架下的多语言文本嵌入模型

对于印地语等印度语系的自然语言处理 (NLP) 任务(如机器翻译、问答和信息检索)而言,词嵌入至关重要。这些嵌入捕捉单词的语义属性,从而实现更准确、更注重语境的 NLP 应用。鉴于印地语使用者众多且印度语系数字内容日益增长,高质量的嵌入对于提高这些语言的 NLP 性能至关重要。定制化的嵌入可以特别解决印度语系的独特语言特征和资源限制问题。新发布的 Gemini Embedding 模型代表了多语言文本嵌入的重大进步,它利用谷歌强大的 Gemini AI 框架,在 100 多种语言中实现了最先进的性能。

Gemini Embedding 模型擅长分类、检索和语义搜索等任务,提供更高的效率和准确性。通过支持更大的输入规模和更高维度的输出,Gemini Embedding 提供更丰富的文本表示,使其能够广泛应用于各种应用。

学习目标

  • 了解 Gemini 嵌入及其与 Gemini LLM 的集成。
  • 使用 Gemini 嵌入检索印地语文档的实践教程。
  • 与 Jina AI 嵌入和 Multilingual-e5-large 的比较分析。
  • 对多语言文本检索能力和应用的见解。

*本文作为***数据科学博客马拉松的一部分发表。***

目录

  • 什么是 Gemini 嵌入?
  • Gemini 嵌入的关键特性
  • Gemini 嵌入的模型架构
  • 与其他多语言嵌入模型的比较
  • 使用 Gemini 嵌入进行检索,并与 Jina AI 嵌入和 Multilingual-e5-large 进行比较
    • 步骤 1. 安装必要的库
    • 步骤 2. 加载数据
    • 步骤 3. 对数据进行分块
    • 步骤 4. 将数据存储在向量数据库中
    • 步骤 5. 查询数据库
    • 步骤 6. 与 Jina AI 嵌入进行比较
  • 嵌入检索输出的比较
    • 解释
  • 结论
  • 常见问题

什么是 Gemini 嵌入?

2025 年 3 月,谷歌发布了一个新的实验性 Gemini Embedding 文本模型 (gemini-embedding-exp-03-07),可在 Gemini API 中使用。

该高级嵌入模型源于 Gemini 模型,据称继承了 Gemini 对语言和细微语境细微差别的深刻理解,使其能够广泛应用于各种应用。它在 MTEB 多语言排行榜上占据榜首。

Comparison of Gemini Embedding with Multilingual-e5-large & Jina

Gemini Embedding 将文本表示为密集向量,其中语义相似的文本输入映射到向量空间中彼此靠近的向量。目前,它支持 100 多种语言,其嵌入可用于各种任务,例如检索和分类。

Gemini 嵌入的关键特性

  • 强大的多语言能力: 该模型在 100 多种语言中展现出卓越的性能,不仅在英语等高资源语言中表现出色,而且在阿萨姆语和马其顿语等低资源语言中也表现出色。
  • 处理多达 8000 个输入标记: 这种强大的能力使模型能够无缝处理冗长的文档或复杂的查询,而不会截断,从而以超越许多现有嵌入模型的方式保持上下文和含义。
  • 3K 维的输出维度: 该模型生成的嵌入维度高达 3072,并支持 768 和 1536 等子维度,以便进行特定于任务的优化。
  • 令人印象深刻的性能: Gemini Embedding 在海量文本嵌入基准测试 (MTEB) 中排名第一,平均任务得分为 68.32,大大超过了其最接近的竞争对手。

Gemini 嵌入的模型架构

Comparison of Gemini Embedding with Multilingual-e5-large & Jina

Gemini Embedding 的核心是基于 Transformer 架构,并从 Gemini LLM 初始化。这个基础为模型提供了对语言结构和语义的深刻理解。该模型使用双向注意力机制来处理输入序列,使其在生成嵌入时能够考虑单词或短语的完整上下文。

  1. 输入序列 T 由 M(一个具有双向注意力的 Transformer,从 Gemini 初始化)处理,产生一个标记嵌入序列。
  2. 为了生成一个表示输入中所有信息的单个嵌入,应用池化函数。
  3. 最后,应用线性投影将嵌入缩放至目标维度,从而产生最终输出嵌入。

损失函数: Gemini Embedding 模型使用带批内负例的噪声对比估计 (NCE) 损失进行训练。确切的损失会根据训练阶段略有不同。一般来说,一个训练示例包括一个查询、一个正目标和(可选)一个难负目标。

训练策略

  1. 预微调: 在此阶段,模型在一个包含查询-目标对的大型多样化数据集上进行训练。这种曝光调整大型语言模型的参数以进行编码任务,为其适应性奠定基础。
  2. 微调: 在第二阶段,模型使用包含查询-正例-难负例三元组的特定于任务的数据集进行微调。此过程使用较小的批量大小和精心策划的数据集来提高目标任务的性能。

另请阅读:Gemini Embedding:来自 Gemini 的通用嵌入

与其他多语言嵌入模型的比较

我们将印地语文档的检索与新发布的最新 Gemini 嵌入进行比较,然后将其与 Jina AI 嵌入和 Multilingual-e5-large 嵌入进行比较。如下表所示,就最大标记数而言,Gemini 嵌入和 Jina AI 嵌入很高,使模型能够处理长文档或复杂的查询。此外,如下表所示,Gemini 嵌入具有更高的嵌入维度,可以捕捉单词之间更细致和更细微的语义关系,使模型能够表示复杂的语言模式和含义的细微差别。

参数数量 嵌入维度 最大标记 语言数量 套娃嵌入
gemini-embedding-exp-03-07 未知 3072 8192 100 支持将嵌入截断为各种尺寸,例如 2048、1024、512、256 和 128 维度,
jinaai/jina-embeddings-v3 5.72 亿 1024 8194 100 支持灵活的嵌入大小 (32、64、128、256、512、768、1024),允许截断嵌入以适应您的应用程序
multilingual-e5-large-instruct 5.6 亿 1024 514 94 NA

使用 Gemini 嵌入进行检索,并与 Jina AI 嵌入和 Multilingual-e5-large 进行比较

在以下实践教程中,我们将印地语文档的检索与新发布的最新 Gemini 嵌入进行比较,然后将其与 Jina AI 嵌入和 Multilingual-e5-large 嵌入进行比较。

步骤 1. 安装必要的库

<code>!pip install langchain-community
!pip install chromadb</code>
登录后复制

步骤 2. 加载数据

我们使用来自网站的印地语数据来评估 Gemini 嵌入在印地语语言检索方面的性能。

<code>from langchain_community.document_loaders import WebBaseLoader

loader = WebBaseLoader("https://ckbirlahospitals.com/rbh/blog/pregnancy-early-symptoms-in-hindi")
data = loader.load()</code>
登录后复制

步骤 3. 对数据进行分块

下面的代码使用 RecursiveCharacterTextSplitter 将大型文本文档拆分成 500 个字符的小块,没有重叠。然后,它将此拆分应用于 datavariable 并将结果存储在 all_splits 中。由于 Gemini Embedding API 的速率限制,我们只使用 10 个拆分。

<code>from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
all_splits = all_splits[:10]</code>
登录后复制

步骤 4. 将数据存储在向量数据库中

我们首先创建一个名为“GeminiEmbeddingFunction”的类,它有助于查询 Gemini Embedding API 并返回输入查询的嵌入值。然后,我们创建一个名为“create_chroma_db”的函数,用于在 ChromaDB 中创建一个集合,该集合将存储数据以及嵌入。

<code>import chromadb
from chromadb import Documents, EmbeddingFunction, Embeddings

class GeminiEmbeddingFunction(EmbeddingFunction):
  def __call__(self, input: Documents) -> Embeddings:
    title = "Custom query"  
    return client.models.embed_content(
        model="gemini-embedding-exp-03-07",
        contents=input).embeddings[0].values



def create_chroma_db(documents, name):
  chroma_client = chromadb.Client()
  db = chroma_client.create_collection(name=name, embedding_function=GeminiEmbeddingFunction())
  for i, d in enumerate(documents):
    db.add(
      documents=d.page_content,
      ids=str(i)
    )
  return db

db = create_chroma_db(all_splits, "datab")</code>
登录后复制

步骤 5. 查询数据库

<code>def get_relevant_passage(query, db):
  passage = db.query(query_texts=[query], n_results=1)['documents'][0][0]

  return passage

passage = get_relevant_passage("आपको प्रेगनेंसी टेस्ट कब करवाना चाहिए?", db)
print(passage)</code>
登录后复制
登录后复制

步骤 6. 与 Jina AI 嵌入进行比较

下面的代码使用 Hugging Face transformer 模型定义了一个自定义嵌入函数,以及一种处理文本输入以生成嵌入的方法。

  1. 来自 transformers 的 AutoTokenizer 和 AutoModel 用于加载预训练模型 (jinaai/jina-embeddings-v3),并从 chromadb 导入 EmbeddingFunction 用于创建自定义嵌入。
  2. average_pool 函数:此函数通过对模型的隐藏状态执行池化操作来聚合它们,在考虑注意力掩码(忽略填充标记)的同时对序列长度取平均值。
  3. CustomHuggingFace 类:它对文本进行标记化,将其馈送到模型中,并使用 average_pool 函数计算嵌入。结果作为嵌入列表返回。
<code>from transformers import AutoTokenizer, AutoModel
from chromadb import EmbeddingFunction


tokenizer = AutoTokenizer.from_pretrained('jinaai/jina-embeddings-v3')
model = AutoModel.from_pretrained('jinaai/jina-embeddings-v3')


# the model returns many hidden states per document so we must aggregate them
def average_pool(last_hidden_states, attention_mask):
    last_hidden = last_hidden_states.masked_fill(~attention_mask[...,None].bool(), 0.0)
    return last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[...,None]

class CustomHuggingFace(EmbeddingFunction):
    def __call__(self, texts):
        queries    = [f'query: {text}' for text in texts]         
        batch_dict = tokenizer(texts, max_length=512, padding=True, truncation=True, return_tensors='pt')
        outputs    = model(**batch_dict)        
        embeddings = average_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
        return embeddings.tolist()</code>
登录后复制

查询

<code>def get_relevant_passage(query, db):
  passage = db.query(query_texts=[query], n_results=1)['documents'][0][0]

  return passage

passage = get_relevant_passage("आपको प्रेगनेंसी टेस्ट कब करवाना चाहिए?", db)
print(passage)</code>
登录后复制
登录后复制

对于选择Multilingual-e5-large 嵌入,我们只需将标记器和模型替换为“intfloat/multilingual-e5-large-instruct”。

嵌入检索输出的比较

问题编号 查询 Gemini 嵌入 jinaai/jina-embeddings-v3 intfloat/multilingual-e5-large-instruct
1 आपको प्रेगनेंसी टेस्ट कब करवाना चाहिए? 如果您想详细了解怀孕的早期症状,那么这篇博文非常适合您。您应该何时进行怀孕测试?– 错误 如果您想详细了解怀孕的早期症状,那么这篇博文非常适合您。您应该何时进行怀孕测试?– 错误 如果您想详细了解怀孕的早期症状,那么这篇博文非常适合您。您应该何时进行怀孕测试?– 错误
2 Pregnancy के kuch symptoms क्या होते हैं? 怀孕的早期症状是什么?在怀孕期间,女性体内会发生许多荷尔蒙变化。怀孕的早期症状包括恶心、呕吐、频繁排尿和疲劳等,我们将在本博文中讨论这些症状。– 正确 怀孕的迹象:早期症状的完整信息!主页快速咨询患者登录联系我们:08062136530 紧急电话:07340054470 打开主菜单服务患者和访客国际患者关于我们预约回电WhatsApp 了解怀孕的早期症状。妇产科 |作者:C. P. Dadhich 博士| 发布日期:2025 年 2 月 6 日目录您应该何时进行怀孕测试?怀孕的早期症状是什么?怀孕的早期症状怀孕的– 错误 怀孕的早期症状是什么?在怀孕期间,女性体内会发生许多荷尔蒙变化。怀孕的早期症状包括恶心、呕吐、频繁排尿和疲劳等,我们将在本博文中讨论这些症状。– 正确
3 गर्भावस्था के दौरान एंटीबायोटिक दवा लेने से कब बचना चाहिए? 在怀孕的最初几天,卵子与精子受精,导致出血和腹痛等症状。在此期间,为了健康怀孕,建议女性避免服用抗生素,因为这可能会对母亲和婴儿造成危险。怀孕的早期症状并非总是月经推迟或呕吐。此外,还可能出现其他症状,需要特别注意,例如– 正确 在怀孕的最初几天,卵子与精子受精,导致出血和腹痛等症状。在此期间,为了健康怀孕,建议女性避免服用抗生素,因为这可能会对母亲和婴儿造成危险。怀孕的早期症状并非总是月经推迟或呕吐。此外,还可能出现其他症状,需要特别注意,例如– 正确 每个女性都应该了解的内容。对于任何与怀孕相关的疑问,我们建议您联系我们的妇科医生,消除所有并发症。– 错误
4 कब गर्भावस्था में एंटीबायोटिक दवा लेने से बचाया जाए? 在怀孕的最初几天,卵子与精子受精,导致出血和腹痛等症状。在此期间,为了健康怀孕,建议女性避免服用抗生素,因为这可能会对母亲和婴儿造成危险。怀孕的早期症状并非总是月经推迟或呕吐。此外,还可能出现其他症状,需要特别注意,例如– 正确 在怀孕的最初几天,卵子与精子受精,导致出血和腹痛等症状。在此期间,为了健康怀孕,建议女性避免服用抗生素,因为这可能会对母亲和婴儿造成危险。怀孕的早期症状并非总是月经推迟或呕吐。此外,还可能出现其他症状,需要特别注意,例如– 正确 每个女性都应该了解的内容。对于任何与怀孕相关的疑问,我们建议您联系我们的妇科医生,消除所有并发症。– 错误
5 गर्भधारण का सबसे पहला सामान्य लक्षण क्या है? 月经推迟:这是怀孕的最早和最常见的症状。仅根据此症状来确认怀孕并不完全正确。但是,如果月经推迟一周或更长时间,建议进行怀孕测试。乳房变化:怀孕期间,乳房会肿胀、变嫩或颜色发生变化。主要是在乳头(乳晕)的大小和颜色上发生变化。– 正确 考虑到这一点,如何确认怀孕?怀孕第一个月如何护理?如何进行怀孕检查?怀孕期间应该如何坐?怀孕期间应该发生性行为吗?怀孕期间应该吃什么水果?怀孕期间应该喝多少水?成为母亲的快乐是世界上最大的快乐。怀孕期间,女性的身体和心理都会发生许多变化。您将这些变化称为怀孕的早期症状,– 错误 怀孕的早期症状是什么?在怀孕期间,女性体内会发生许多荷尔蒙变化。怀孕的早期症状包括恶心、呕吐、频繁排尿和疲劳等,我们将在本博文中讨论这些症状。– 正确
6 गर्भधारण के पहले संकेत क्या होते हैं? 怀孕的迹象:早期症状的完整信息!主页快速咨询患者登录联系我们:08062136530 紧急电话:07340054470 打开主菜单服务患者和访客国际患者关于我们预约回电WhatsApp 了解怀孕的早期症状。妇产科 |作者:C. P. Dadhich 博士| 发布日期:2025 年 2 月 6 日目录您应该何时进行怀孕测试?怀孕的早期症状是什么?怀孕的早期症状怀孕的– 错误 考虑到这一点,如何确认怀孕?怀孕第一个月如何护理?如何进行怀孕检查?怀孕期间应该如何坐?怀孕期间应该发生性行为吗?怀孕期间应该吃什么水果?怀孕期间应该喝多少水?成为母亲的快乐是世界上最大的快乐。怀孕期间,女性的身体和心理都会发生许多变化。您将这些变化称为怀孕的早期症状,– 错误 怀孕的早期症状是什么?在怀孕期间,女性体内会发生许多荷尔蒙变化。怀孕的早期症状包括恶心、呕吐、频繁排尿和疲劳等,我们将在本博文中讨论这些症状。– 正确
7 गर्भावस्था की पुष्टि के लिए कौन से हार्मोन का पता लगाना होता है? 进行怀孕测试的最佳时间是在月经推迟至少 7 天后。您可以使用家用怀孕测试工具在家中检测 hCG 水平。在怀孕期间,这种激素的水平会显著升高。您需要注意的一点是,过早进行测试也可能导致错误的结果,因此,如果您的月经推迟并且测试结果为阴性,建议您至少再等 3 天,然后再次进行测试。– 正确 这样做也有正确的方法,您也可以在测试工具说明书上看到。为了获得准确的结果,您应该使用早晨的第一泡尿,因为这时可以测量 hCG 激素的正确水平。此外,如果您经历了怀孕的早期症状,并且测试结果为阴性,请立即去看医生进行血液测试。在任何情况下,如有任何疑问,都必须咨询医生。– 正确 怀孕的早期症状是什么?在怀孕期间,女性体内会发生许多荷尔蒙变化。怀孕的早期症状包括恶心、呕吐、频繁排尿和疲劳等,我们将在本博文中讨论这些症状。– 错误

解释

从上述印地语输出中可以看出,使用 Gemini 嵌入,我们从 7 个查询中得到了 5 个正确的输出,而使用 Jina AI 嵌入和 Multilingual-e5-large,我们只得到了 3 个正确的响应。

这表明,正如 MTEB 基准测试所反映的那样,Gemini 嵌入可以很好地执行,并且比其他嵌入模型更好地处理印地语等多语言。

结论

总之,Gemini 嵌入代表了多语言 NLP 的重大进步,特别是对于印地语等印度语系语言。凭借其强大的多语言能力、对大型输入尺寸的支持以及在 MTEB 等基准测试中的卓越性能,Gemini 在检索、分类和语义搜索等任务中表现出色。通过实践比较可以看出,Gemini 的性能优于其他模型,提供更高的准确性和效率,使其成为促进多种语言 NLP 的宝贵工具。

主要收获

  • 印地语系语言词嵌入的重要性: 高质量的嵌入增强了翻译、问答和检索等 NLP 任务,解决了语言挑战和资源差距问题。
  • Gemini Embedding 模型: 谷歌的 Gemini 嵌入利用其 AI 框架进行多语言文本处理,涵盖 100 多种语言,包括低资源语言。
  • 关键特性: 支持 8000 个标记和 3072 维嵌入,能够高效处理长文档和复杂查询。
  • 令人印象深刻的性能: 在 MTEB 多语言排行榜上排名第一,平均任务得分为 68.32,展示了其在多语言 NLP 中的强大功能。

本文中显示的媒体并非 Analytics Vidhya 所有,作者可自行决定使用。

常见问题

Q1. 什么是 Gemini Embedding 模型?答:Gemini Embedding 模型基于谷歌的 Gemini AI,为包括印地语在内的 100 多种语言提供顶级多语言文本嵌入。

Q2. 与其他模型相比,Gemini Embedding 的独特之处是什么?答:Gemini Embedding 在多语言支持方面表现出色,可以处理 8000 个标记,并输出 3072 维,确保在分类、检索和语义搜索方面的效率。

Q3. Gemini Embedding 在多语言任务中的表现如何?答:Gemini Embedding 在英语等高资源语言和阿萨姆语、马其顿语等低资源语言中的表现都很好。它在 MTEB 多语言排行榜上排名第一,展示了其强大的多语言能力。

Q4. Gemini Embedding 模型的架构是什么?答:该模型从 Gemini LLM 初始化,使用具有双向注意力的 Transformer 架构来生成高质量的文本嵌入,捕捉上下文和含义。

Q5. Gemini Embedding 模型是如何训练的?答:Gemini Embedding 使用带批内负例的噪声对比估计 (NCE) 损失进行训练。它经历了两个训练阶段:在一个大型数据集上进行预微调,并在特定于任务的数据集上进行微调,以提高 NLP 性能。

以上是与多语言E5-Large和Jina嵌入双子座的比较的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板