Gemini Embedding:谷歌Gemini AI框架下的多语言文本嵌入模型
对于印地语等印度语系的自然语言处理 (NLP) 任务(如机器翻译、问答和信息检索)而言,词嵌入至关重要。这些嵌入捕捉单词的语义属性,从而实现更准确、更注重语境的 NLP 应用。鉴于印地语使用者众多且印度语系数字内容日益增长,高质量的嵌入对于提高这些语言的 NLP 性能至关重要。定制化的嵌入可以特别解决印度语系的独特语言特征和资源限制问题。新发布的 Gemini Embedding 模型代表了多语言文本嵌入的重大进步,它利用谷歌强大的 Gemini AI 框架,在 100 多种语言中实现了最先进的性能。
Gemini Embedding 模型擅长分类、检索和语义搜索等任务,提供更高的效率和准确性。通过支持更大的输入规模和更高维度的输出,Gemini Embedding 提供更丰富的文本表示,使其能够广泛应用于各种应用。
*本文作为***数据科学博客马拉松的一部分发表。***
2025 年 3 月,谷歌发布了一个新的实验性 Gemini Embedding 文本模型 (gemini-embedding-exp-03-07),可在 Gemini API 中使用。
该高级嵌入模型源于 Gemini 模型,据称继承了 Gemini 对语言和细微语境细微差别的深刻理解,使其能够广泛应用于各种应用。它在 MTEB 多语言排行榜上占据榜首。
Gemini Embedding 将文本表示为密集向量,其中语义相似的文本输入映射到向量空间中彼此靠近的向量。目前,它支持 100 多种语言,其嵌入可用于各种任务,例如检索和分类。
Gemini Embedding 的核心是基于 Transformer 架构,并从 Gemini LLM 初始化。这个基础为模型提供了对语言结构和语义的深刻理解。该模型使用双向注意力机制来处理输入序列,使其在生成嵌入时能够考虑单词或短语的完整上下文。
损失函数: Gemini Embedding 模型使用带批内负例的噪声对比估计 (NCE) 损失进行训练。确切的损失会根据训练阶段略有不同。一般来说,一个训练示例包括一个查询、一个正目标和(可选)一个难负目标。
另请阅读: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 嵌入进行比较。
步骤 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 模型定义了一个自定义嵌入函数,以及一种处理文本输入以生成嵌入的方法。
<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 的宝贵工具。
本文中显示的媒体并非 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中文网其他相关文章!