• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 生成式人工智能/大語言模型

    使用 NVIDIA 檢索 QA 嵌入模型構建企業檢索增強生成應用

     

    大型語言模型 (LLM) 對人類語言和編程語言的深刻理解正在改變 AI 格局。對于新一代企業生產力應用程序而言,它們至關重要,可提高用戶在編程、文案編輯、頭腦風暴和回答各種主題的問題等任務中的效率。

    然而,這些模型通常難以處理實時事件和特定知識領域,從而導致不準確之處。微調這些模型可以增強其知識,但成本高昂,并且需要定期更新。

    檢索增強生成(RAG)通過將信息檢索與 LLM 結合,為開放領域的問答應用提供解決方案。RAG 為 LLM 提供大量可更新的知識,有效解決了這些限制(圖 1)。NVIDIA NeMo 框架中的 NVIDIA NeMo Retriever 優化了 RAG 的嵌入和檢索部分,以提供更高的準確性和更高效的響應。

    High-level overview of RAG architecture.
    圖 1.高級檢索增強代架構

    本文概述了 RAG 工作流組件的工作原理,以及與創建支持 RAG 的 AI 應用相關的企業挑戰(例如商業可行性)。您將了解 NeMo Retriever (包括適用于企業 RAG 工作流的生產就緒型組件)以及我們今天分享的模型。

    規范的 RAG 工作流

    RAG 應用通常具有從嵌入到檢索和響應的多個階段。我們來看看典型的 RAG 工作流,了解 NeMo Retriever 如何提供幫助。

    對知識庫進行編碼(離線)

    在此階段,知識庫(通常由文本、PDF、HTML 或其他格式的文檔組成)被分割成多個塊。然后,這些塊被輸入到嵌入深度學習模型中,該模型會為每個塊生成密集的向量表示。

    生成的嵌入及其相應的文檔和其他元數據存儲在向量數據庫中(圖 2)。分塊策略取決于文檔的類型和內容、元數據(例如文檔詳細信息)的使用以及生成合成數據的方法(如果適用)。在開發檢索系統時,必須仔細考慮這一策略。

    Depiction of the offline part of a RAG pipeline chunking, embedding, and storing a knowledge base into a vector database.
    圖 2.將知識庫文檔分塊、嵌入并存儲到向量數據庫中的過程

    通過計算用戶查詢中的嵌入與存儲在數據庫中的文檔之間的相似性(例如點積),這些嵌入可以用于語義搜索。向量數據庫專門用于存儲大量向量化數據,并能夠快速執行 近似最近鄰搜索。

    部署(在線)

    此階段的重點是在向量數據庫連接到 LLM 應用程序時進行部署,以便實時回答問題。該階段分為兩個階段:從向量數據庫檢索和生成響應。

    第 1 階段:根據用戶的查詢從向量數據庫中檢索*

    用戶的查詢首先嵌入為密集向量。通常,會在查詢中添加一個特殊的前綴,以便檢索者使用的嵌入模型能夠理解它是一個問題。這使得非對稱語義搜索其中,簡短查詢可用于查找更長的段落來回答查詢。

    接下來,查詢嵌入用于搜索向量數據庫,該數據庫可檢索與用戶查詢最相關的少量文檔塊(圖 3)。

    Searching with query embeddings over the vector database returns relevant chunks.
    圖 3.查詢嵌入用于搜索向量數據庫,該數據庫將返回最相關的前 k 個數據塊

    向量數據庫通過使用近似搜索算法來實現這一點,例如余弦相似度。這保證了可擴展性和低延遲。

    第 2 階段:使用 LLM 利用上下文生成響應

    在此階段,我們將最相關的數據塊組合成一個上下文,然后將其與用戶的查詢結合起來,作為 LLM 的最終輸入。提示通常包含額外的指令,用于指導 LLM 僅根據上下文生成響應。圖 4 說明了此響應生成過程。

     The LLM returns a response with a prompt made of a user query, top retrieved chunks, and a prompt.
    圖 4.LLM 接收用戶查詢以及檢索到的 top-k 數據塊,并提示返回響應

    為企業應用構建 RAG 工作流面臨的挑戰

    雖然 RAG 本身相比于 LLM 具有顯著的優勢,但必須注意的是,這些優勢伴隨著一些必須解決的挑戰。一個主要問題是找到商業上可行的檢索策略,這通常會受到訓練數據集許可限制的影響,例如 MSMARCO。現實世界中的查詢因其模糊性而更加復雜;用戶往往會輸入不完整或模糊的查詢,這使得檢索變得更加困難。

    在多回合對話中,這種復雜性會隨著用戶查詢經常引用對話的早期部分而增加,因此需要對上下文進行理解才能進行有效檢索。此外,一些查詢需要合成來自多個來源的信息,因此需要高級集成功能。

    對于 LLM 而言,處理長上下文輸入是一項挑戰。這些模型盡管不斷改進,但通常難以忘記長上下文輸入中的細節,并且需要大量計算資源,這在多回合場景中變得更加明顯。

    這些系統的部署涉及復雜的 RAG 流程,其中包括嵌入、向量數據庫和 LLM 等各種微服務。以安全、高效的方式設置和管理這些服務是一項重要任務。

    我們來看看 NeMo Retriever 如何簡化復雜場景中的檢索流程,它帶來了一套經過優化的商用工具。

    用于檢索增強代的 NVIDIA NeMo Retriever

    我們宣布了最新加入 NVIDIA NeMo 框架 的 NVIDIA NeMo Retriever,這是一種可在本地或云端部署的信息檢索服務。它為企業提供了一條安全、簡化的路徑,將企業級 RAG 功能集成到其定制的生產級 AI 應用中。

    NeMo Retriever 旨在提供先進的商用模型和微服務,并針對更低的延遲和更高的吞吐量進行優化。它還具有具有企業級支持的生產就緒型信息檢索管道。構成此解決方案核心的模型已使用負責任的精選可審計數據源進行訓練。有多個預訓練模型作為起點,開發者還可以針對特定領域的用例快速定制這些模型,例如 IT 或人力資源幫助助理以及研發研究助理。

    今天,我們將分享我們的嵌入模型,該模型針對文本問答檢索進行了優化。我們正在開發重新排序和檢索微服務,這些服務即將推出。

    NVIDIA 檢索 QA 嵌入模型

    嵌入模型是文本檢索系統的重要組件,因為它將文本信息轉換為密集向量表示。它們通常是 Transformer 解碼器,用于處理輸入文本(例如,問題、段落)的標記以輸出嵌入。

    The figure depicts the Bi-encoder retrieval architecture. Query and passage texts are embedded through encoders. Cosine similarity is used to determine how close they are.
    圖 5.雙編碼器檢索架構

    用于文本檢索的嵌入模型通常使用雙編碼器架構進行訓練,如圖 5 所示。這涉及使用嵌入模型獨立編碼一對句子(例如,查詢和分塊段落)。對比學習用于最大限度地提高查詢與包含答案的段落之間的相似性,同時最大限度地減少查詢與無法回答問題的采樣否定段落之間的相似性。

    NVIDIA Retrieval QA Embedding Model 是一款 Transformer 編碼器,是 E5-Large-Unsupervised 的微調版本,具有 24 層,嵌入大小為 1024,在私有和公共數據集上進行訓練。它支持最多輸入 512 個令牌。此外,我們致力于研究尖端的模型架構和數據集,以通過 NeMo Retriever 實現先進的 (SOTA) 檢索模型。

    訓練數據集

    大規模公共開放 QA 數據集的開發促進了功能強大的嵌入模型的巨大進步。然而,一個受歡迎的數據集,名為 MSMARCO,因其商業許可的限制,使得這些模型在商業環境中的應用受到限制。為了克服這一挑戰,我們創建了自己的內部開放領域 QA 數據集,旨在訓練可在商業上應用的嵌入模型。

    我們在博客中搜索了與 NVIDIA 專有數據收集相關的段落,并選擇了一組與客戶用例相關的段落。這些段落由 NVIDIA 內部數據標注團隊進行標注。

    為了更大限度地減少數據收集過程中的冗余,我們選擇了能夠更大限度地提高相關性距離分數并增加數據多樣性的樣本。預訓練的嵌入模型使用混合的英語語言數據集(包括我們的專有數據集)以及從商用公共數據集中選擇的樣本進行了微調。

    我們的主要目標是優化信息檢索功能,尤其是針對常見企業 LLM 用例(基于文本的問答,而非知識庫)定制嵌入模型。

    評估結果

    NVIDIA Retrieval QA 嵌入模型專注于問答應用。這是一個非對稱語義搜索問題,因為問題和段落通常有不同的分布和模式 – 問題通常比包含答案的段落更短。

    我們使用來自電信、IT、咨詢和能源行業的真實內部客戶數據集對嵌入模型進行了評估。該指標為 Recall#5,以模擬 RAG 場景,在該場景中,我們在 LLM 模型回答問題的提示中提供了最相關的五個段落作為上下文。我們將模型的信息檢索準確性與 AI 社區提供的許多知名嵌入模型(包括使用非商用數據集訓練的模型)進行了比較,這些模型用*標記。Recall#5 用于衡量相關商品在檢索的前五個商品中出現的頻率。

    您可以在圖 6 中看到基準測試的結果。請注意,在這些基準中,我們的 Retriever 模型實現了最佳性能。

    Bar Chart comparing Average Recall@5 scores of various community models in comparison to NVIDIA Retrieval QA Embedding Model, on internal customer datasets.
    圖 6.關于電信、IT、咨詢和能源行業客戶數據集的 5 次平均值回顧

    如圖 7 所示,我們將 NVIDIA Retrieval QA Embedding Model 與學術基準測試 NQ、HotpotQA、FiQA(來自 BeIR 基準測試)和 TechQA 數據集進行了比較。在此基準測試中,使用的指標是 標準化折扣累積增益(NDCG=10)。

    A bar chart comparing open-source and commercial retrieval models in comparison with NVIDIA retrieval QA embedding model.
    圖 7.NQ、HotpotQA、FiQA 和 TechQA 數據集上各種開源和商用檢索模型的平均 NDCG=10.就平均 NDCG=1 而言, NVIDIA Retrieval QA 模型優于其他模型0
     

    請注意,techQA 數據集由 IBM 技術論壇精選的問答以及作為知識庫的 80 萬個 technotes 組成,這些在之前并未用于檢索基準設置。我們提供了一個notebook,用以將此數據集轉換為與 BEIR 兼容的格式,以便進行基準測試。

    入門指南

    NVIDIA Retrieval QA Embedding Model 即將作為搶先體驗版 (EA) 的微服務容器提供。歡迎申請加入EA 計劃

    您還可以免費試用 NVIDIA Retrieval QA 嵌入 API,請訪問 NGC 目錄。

    NVIDIA 檢索 QA 嵌入 Playground API

    NVIDIA Retriever QA 嵌入模型是基于 E5 – 大型無監督式工作站,并且采用類似的輸入格式要求。發出請求時,您必須在有效負載中明確指出是“查詢”還是“通道”。這一點對于非對稱任務(例如,在開放式 QA 中進行通道檢索)是必要的。

    API 接受簡單的有效載荷格式,其中“input”是用于生成嵌入的文本塊。在以下示例 API 調用中,我們將兩個較長的文本嵌入為“passages”(段落)和一個較小的“query”(查詢)文本,然后使用點積計算段落與查詢之間的相似度。

    請注意,您必須登錄 NGC AI Playground 并獲取 API 密鑰,在以下代碼段中,API 密鑰用作“API_KEY”。

    1.嵌入兩個段落。

    import requests   
    import numpy as np
     
    # Make sure to fill this. You will need to obtain the API_KEY from NGC playground
    API_KEY="<YOUR_NGC_PLAYGROUND_API_KEY>"
     
    headers = {
        "Authorization": "Bearer {}".format(API_KEY),
        "Accept": "application/json",
    }
     
    # To re-use connections
    session = requests.Session()
     
    # Note the "model": "passage" field in the payload.
    passage_payload = {
      "input": ["Pablo Ruiz Picasso was a Spanish painter, sculptor, printmaker, ceramicist and theater designer who spent most of his adult life in France.",
                "Albert Einstein was a German-born theoretical physicist who is widely held to be one of the greatest and most influential scientists of all time."],
        "model" : "passage",
        "encoding_format": "float"
    }
     
    passage_response = session.post(invoke_url, headers=headers, json=passage_payload)
    while passage_response.status_code == 202:
        request_id = passage_response.headers.get("NVCF-REQID")
        fetch_url = fetch_url_format + request_id
        passage_response = session.get(fetch_url, headers=headers)
         
    passage_response.raise_for_status()
    passage_embeddings = np.asarray([item['embedding'] for item in passage_response.json()['data']])

    2.嵌入查詢

    # Note the "model": "query" field in the payload
    query_payload = {
      "input": "Who is a great particle physicist?",
        "model" : "query",
        "encoding_format": "float"
    }
    query_response = session.post(invoke_url, headers=headers, json=query_payload)
    while query_response.status_code == 202:
        request_id = query_response.headers.get("NVCF-REQID")
        fetch_url = fetch_url_format + request_id
        query_response = session.get(fetch_url, headers=headers)
         
    query_response.raise_for_status()
    query_embedding = np.asarray(query_response.json()['data'][0]['embedding'])

    3.計算段落與查詢嵌入之間的相似性

    # A simple dot product
    np.dot(passage_embeddings, query_embedding)

    輸出:

    array([0.33193235, 0.52141018])

    在本示例中,查詢與第二段有更多相似之處,兩者都與物理域有關。

    結束語

    NVIDIA NeMo Retriever 提供專為問答應用量身打造的嵌入服務。嵌入模型和服務根據商業用途許可證提供。雖然此模型在多個公共和內部基準測試中顯示出了有希望的結果,但我們正在不斷提高模型的質量。

    請務必申請搶先體驗 NeMo Retriever 微服務,并期待在未來版本中推出更多內容。

    要獲得 600 多個 SDK 和 AI 模型的獨家訪問權限、免費培訓,以及與我們的技術專家社區交流,請免費加入 NVIDIA 開發者計劃。在限定時間內,新會員將獲得 NVIDIA DLSS 合作伙伴 NVIDIA 深度學習培訓中心 (DLI) 的加入資格。

     

    +1

    標簽

    人人超碰97caoporen国产