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 了解懷孕的早期症狀。婦產科|作者:CP Dadhich 博士| 發布日期:2025 年2 月6 日目錄您應該何時進行懷孕測試?懷孕的早期症狀是什麼?懷孕的早期症狀懷孕的–錯誤 | 懷孕的早期症狀是什麼?在懷孕期間,女性體內會發生許多荷爾蒙變化。懷孕的早期症狀包括噁心、嘔吐、頻繁排尿和疲勞等,我們將在本博文中討論這些症狀。 –正確 |
3 | गर्भावस्था के दौरान एंटीबायोटिक दवा लेने से कब बचना चाहिए? | 在懷孕的最初幾天,卵子與精子受精,導致出血和腹痛等症狀。在此期間,為了健康懷孕,建議女性避免服用抗生素,因為這可能會對母親和嬰兒造成危險。懷孕的早期症狀並非總是月經推遲或嘔吐。此外,還可能出現其他症狀,需要特別注意,例如–正確 | 在懷孕的最初幾天,卵子與精子受精,導致出血和腹痛等症狀。在此期間,為了健康懷孕,建議女性避免服用抗生素,因為這可能會對母親和嬰兒造成危險。懷孕的早期症狀並非總是月經推遲或嘔吐。此外,還可能出現其他症狀,需要特別注意,例如–正確 | 每個女性都應該了解的內容。對於任何與懷孕相關的疑問,我們建議您聯繫我們的婦科醫生,消除所有並發症。 –錯誤 |
4 | कब गर्भावस्था में एंटीबायोटिक दवा लेने से बचाया जाए? | 在懷孕的最初幾天,卵子與精子受精,導致出血和腹痛等症狀。在此期間,為了健康懷孕,建議女性避免服用抗生素,因為這可能會對母親和嬰兒造成危險。懷孕的早期症狀並非總是月經推遲或嘔吐。此外,還可能出現其他症狀,需要特別注意,例如–正確 | 在懷孕的最初幾天,卵子與精子受精,導致出血和腹痛等症狀。在此期間,為了健康懷孕,建議女性避免服用抗生素,因為這可能會對母親和嬰兒造成危險。懷孕的早期症狀並非總是月經推遲或嘔吐。此外,還可能出現其他症狀,需要特別注意,例如–正確 | 每個女性都應該了解的內容。對於任何與懷孕相關的疑問,我們建議您聯繫我們的婦科醫生,消除所有並發症。 –錯誤 |
5 | गर्भधारण का सबसे पहला सामान्य लक्षण क्या है? | 月經推遲:這是懷孕的最早和最常見的症狀。僅根據此症狀來確認懷孕並不完全正確。但是,如果月經推遲一周或更長時間,建議進行懷孕測試。乳房變化:懷孕期間,乳房會腫脹、變嫩或顏色發生變化。主要是在乳頭(乳暈)的大小和顏色上發生變化。 –正確 | 考慮到這一點,如何確認懷孕?懷孕第一個月如何護理?如何進行懷孕檢查?懷孕期間應該如何坐?懷孕期間應該發生性行為嗎?懷孕期間應該吃什麼水果?懷孕期間應該喝多少水?成為母親的快樂是世界上最大的快樂。懷孕期間,女性的身體和心理都會發生許多變化。您將這些變化稱為懷孕的早期症狀,–錯誤 | 懷孕的早期症狀是什麼?在懷孕期間,女性體內會發生許多荷爾蒙變化。懷孕的早期症狀包括噁心、嘔吐、頻繁排尿和疲勞等,我們將在本博文中討論這些症狀。 –正確 |
6 | गर्भधारण के पहले संकेत क्या होते हैं? | 懷孕的跡象:早期症狀的完整信息!主頁快速諮詢患者登錄聯繫我們:08062136530 緊急電話:07340054470 打開主菜單服務患者和訪客國際患者關於我們預約回電WhatsApp 了解懷孕的早期症狀。婦產科|作者:CP 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中文網其他相關文章!