獨家 | 使用檢索增強生成技術(shù)構(gòu)建特定行業(yè)的 LLM
企業(yè)正在競相采用大型語言模型(也可以被稱為LLM)。讓我們深入了解如何通過RAG(檢索增強生成技術(shù)) 構(gòu)建特定行業(yè)的大型語言模型。
公司可以通過使用像ChatGPT 這樣的大語言明星提高生產(chǎn)力。但是試著問 ChatGPT "美國目前的通貨膨脹率是多少",它會給出答案:
很抱歉造成您的困惑,作為一個人工智能語言模型,我不具備實時數(shù)據(jù)的瀏覽能力。我的回答是基于截至 2021 年 9 月的信息。因此,我無法為您提供美國當(dāng)前的通貨膨脹率。
這是一個問題。ChatGPT顯然缺少及時相關(guān)的背景信息,而這對于做出明智的決策至關(guān)重要。
微軟如何解決這一問題在微軟 Build 會議 "矢量搜索還不夠"(Vector Search Isn't Enough)中,他們介紹了自己的產(chǎn)品,該產(chǎn)品將上下文感知較弱的LLM 與矢量搜索結(jié)合起來,以創(chuàng)造更有吸引力的體驗。
演講的出發(fā)點與本文相反—他們從彈性搜索(或矢量搜索)的角度出發(fā),認(rèn)為搜索本身是有限的,而添加LLM 層可以極大地改善搜索體驗。
其基本想法是,在LLM 中添加相關(guān)上下文可以極大地改善用戶體驗,尤其是在大多數(shù)商業(yè)案例中,因為LLM 并沒有見過此類數(shù)據(jù)。當(dāng)您擁有海量數(shù)據(jù),包括 100 多份(或更多)文檔時, 矢量搜索有助于選擇相關(guān)上下文。
矢量搜索 101矢量搜索101 | Skanda Vivek
矢量化是將數(shù)據(jù)轉(zhuǎn)換成多維向量。在上面的案例中,您可以看到2個維度:尺寸和類型。尺寸有 2 種(小或大),類型有 2 個種(樹或動物)。這只是一個概念性的例子,當(dāng)然矢量化也可以擴展到數(shù)百個維度(或更多值)。
句子的矢量搜索101 | Skanda Vivek
您也可以用單詞或句子代替圖片來做同樣的事情。請注意,在上述示例中,矢量化能夠捕捉語義表征,即它知道關(guān)于一只鳥俯沖向一只花栗鼠寶寶的句子應(yīng)該位于(小鼠,動物)象限,而關(guān)于昨天暴風(fēng)雨時一棵大樹倒在路上的句子應(yīng)該位于(大,樹)象限。實際上,嵌入的維度不止 2 個--而是384個(句子或文本塊通過BERT 變換器,輸出 384個與384維相對應(yīng)的數(shù)字)
矢量搜索 + LLM (RAG)矢量搜索現(xiàn)在在所有的搜索中都很普遍(谷歌、必應(yīng),以及您最喜歡的搜索引擎)。想一想,如果您的整個搜索數(shù)據(jù)庫中只有這4 個文檔,您可以問這樣一個問題:"請告訴我關(guān)于一棵大樹的事情。您可以問這樣一個問題:"請告訴我關(guān)于一棵大樹的事情"。
那么輸出為:
在昨天的暴風(fēng)雨中,一棵大樹倒在路上。
只是數(shù)據(jù)庫中最相關(guān)的文檔。但如果您向LLM提出同樣的問題(并在最后添加 4 個 "文檔"),您將得到以下結(jié)果:
(本例中為ChatGPT):
大樹通常是一種高聳的大型植物,具有粗壯的樹干、樹枝和廣泛的根系網(wǎng)絡(luò)。這些樹木可以達(dá)到令人印象深刻的高度, 通常遠(yuǎn)遠(yuǎn)高于周圍的植被。它們是許多生態(tài)系統(tǒng)的重要組成部分,為各種生物提供樹蔭、庇護(hù)所和食物。
您提到的暴風(fēng)雨中大樹倒在路上的事件表明了惡劣天氣條件的威力和影響。強風(fēng)暴雨會將樹木連根拔起或折斷,導(dǎo)致道路堵塞,給車輛和行人帶來潛在危險。
在您提到的另一種情況下,當(dāng)您在班迪布爾(Bandipur) 的公路上行駛時,遇到一頭大象橫穿馬路。班迪普爾是位于印度的一個國家公園和野生動物保護(hù)區(qū),以其豐富的生物多樣性和多樣的動物而聞名。大象是班迪普爾的主要物種之一,它們經(jīng)常穿越該地區(qū),有時還會橫穿馬路。這樣的邂逅凸顯了野生動物保護(hù)的重要性,以及人類在自然棲息地與動物共存的必要性。
說到盆景,它們是生長在小盆中的微型樹木,經(jīng)過精心造型和修剪以保持其小巧的體型。盆景栽培是一種古老的藝術(shù)形式,起源于東亞,現(xiàn)已風(fēng)靡全球。由于根部空間有限,盆景景樹要定期澆水以防止干枯。小盆會導(dǎo)致土壤迅速干燥,因此監(jiān)測濕度并相應(yīng)地澆水至關(guān)重要。
最后,您提到透過窗戶觀察到一只鳥俯沖一只小花栗鼠。這種觀察反映了大自然的一個行動瞬間,一只鳥可能正在覓食。眾所周知,猛禽和某些鳥類(如鷹或貓頭鷹)會俯沖花栗鼠等小型哺乳動物,這是它們自然狩獵行為的一部分。目睹這種互動令人著迷,因為它們能讓我們對動物王國的活力有更深的了解。
總之,這些自然片段--無論是涉及大樹、大象、盆景樹還是鳥類捕食--都突出了我們周圍自然世界的多樣性和奇妙性。
這個答案似乎更加全面。ChatGPT使用的是在數(shù)萬億文檔中訓(xùn)練出來的內(nèi)部知識,并結(jié)合了所給的上下文。
但是,假設(shè)您有不止4個文檔--也許是成千上萬個,您無法在ChatGPT 提示中找到。在這種情況下,您可以使用矢量搜索來縮小最有可能包含答案的上下文范圍,并將其附加到提示中, 然后提出如下相同的問題:
這是它現(xiàn)在給出的(截斷的)答案:
ChatGPT answer | Skanda Vivek
您可以有一個數(shù)據(jù)庫,存儲文檔和嵌入。另一個數(shù)據(jù)庫存儲查詢,并根據(jù)查詢找到最相關(guān)的文檔:
Document DB (左)和 Quey DB (右) | Skanda Vivek
一旦您通過查詢獲得了最相似的文檔,您就可以將其輸入到任何LLM,如ChatGPT。通過這個簡單的技巧,您就利用文檔檢索增強了您的 LLM!這也被稱為檢索增強生成(RAG)。
使用 RAG 建立特定行業(yè)的問答模型RAG原型 | Skanda Vivek
上圖概述了如何構(gòu)建一個基本的RAG,利用自定義文檔的LLM進(jìn)行問題解答。第一部分是將多個文檔分割成易于管理的塊,相關(guān)參數(shù)是最大分塊長度。這些塊應(yīng)該是包含典型問題答案的典型(最?。┪谋敬笮?。這是因為有時您提出的問題可能在文檔的多個位置都有答案。例如,您可能會問"X 公司從2015 年到 2020 年的業(yè)績?nèi)绾??而您可能有一個大型文檔(或多個文檔),在文檔的不同部分包含了公司多年來業(yè)績的具體信息。在理想情況下,您希望捕獲包含這些信息的文檔的所有不同部分,將它們連接在一起,并根據(jù)這些經(jīng)過過濾和連接的文檔塊傳遞給 LLM 進(jìn)行回答。
最大上下文長度基本上是將各種語塊連接在一起的最大長度--為問題本身和輸出答案留出一些空間(請記住,像 ChatGPT 這樣的 LLM 有嚴(yán)格的長度限制,包括所有內(nèi)容:問題、上下文和答案。
相似度閾值是將問題與文檔塊進(jìn)行比較的方法,以找到最有可能包含答案的頂級文檔塊。余弦函數(shù)是典型的度量方法,但您可能希望使用不同的度量方法。例如,包含關(guān)鍵詞的上下文的權(quán)重更高。例如,當(dāng)您向LLM 提出總結(jié)文檔的問題時,您可能希望對包含 "摘要 "或 "總結(jié) "字樣的上下文進(jìn)行加權(quán)。
如果您想通過一種簡單的方式測試自定義文檔上的生成式問答,請查看我的API (https://rapidapi.com/skandavivek/api/chatgpt-powered-question-answering-over-documents)和在后臺使用 ChatGPT 的代碼(https://github.com/skandavivek/web-qa)。
由 RAG 推動的 ChatGPT 原型機讓我們通過一個例子來說明RAG的作用。EMAlpha 是一家調(diào)研新興市場的公司--基本上是印度、中國、巴西等新興國家的經(jīng)濟(jì)(完全披露--我是 EMAlpha 的顧問)。該公司正在開發(fā)一個由 ChatGPT 支持的app,根據(jù)用戶輸入生成對新興經(jīng)濟(jì)體的觀點。儀表盤看起來像這樣--你可以比較 ChatGPT 和RAG 版ChatGPT(EM-GPT)的輸出,后者能夠在后臺查詢國際貨幣基金組織(IMF)的金融文件:
EMAlpha中的EM-GPT 從|斯坎達(dá)-維韋克
以下是ChatGPT 對 "尼泊爾每年的 GDP 是多少?"這個問題的回答:
ChatGPT回答| Skanda Vivek
ChatGPT 只返回 2019 年之前的 GDP,它說如果您想了解更多信息,請訪問 IMF。但是,如果您想知道這些數(shù)據(jù)在IMF 網(wǎng)站的什么位置,那就很難了,您需要對網(wǎng)站上的文件存儲位置有所了解。經(jīng)過一番搜索,您會發(fā)現(xiàn)文件就在這里。即便如此,要想知道 GDP 信息到底在哪里,也需要進(jìn)行大量的滾動。
國際貨幣基金組織關(guān)于尼泊爾經(jīng)濟(jì)的文件| Skanda Vivek
你可以看到,找到這些數(shù)據(jù)是很難的。但是,當(dāng)您向 EM-GPT 提出同樣的問題時,它會追蹤相關(guān)上下文,并找到如下答案:
EM-GPT答案 | Skanda Vivek
下面是發(fā)送給ChatGPT 回答這個問題的確切提示。令人印象深刻的是,它能夠理解這些格式化的文本,提取正確的信息,并將其格式化為人類可讀的格式!
使用基于查詢的上下文進(jìn)行聊天GPT 提示 | Skanda Vivek
我花了半個小時才在IMF網(wǎng)站上找到這些信息,而 RAG 修改后的 ChatGPT 只花了幾秒鐘。僅靠矢量搜索是不行的,因為它最多只能找到 "名義 GDP"這個詞,而不能將數(shù)字與年份聯(lián)系起來。ChatGPT 已經(jīng)在過去的多個此類文檔中接受過訓(xùn)練,因此一旦添加了相關(guān)上下文,它就知道文本的哪些部分包含答案,以及如何將答案格式化為可讀的格式。
結(jié)論RAG提供了一種在自定義文檔中使用LLM 的好方法。微軟、谷歌和亞馬遜等公司都在競相開發(fā)企業(yè)可以”即插即用“的應(yīng)用程序。然而,該領(lǐng)域仍處于起步階段,在自定義文檔上使用矢量搜索驅(qū)動的 LLM 的特定行業(yè)應(yīng)用程序可以成為先行者,并在競爭中脫穎而出。
當(dāng)有人問我應(yīng)該使用哪種LLM,以及是否要對自定義文檔進(jìn)行微調(diào)或完全訓(xùn)練模型,他們低估了LLM 和矢量搜索之間的同步工程的作用。以下是一些可以顯著提高或降低響應(yīng)質(zhì)量的注意事項:
1. 文檔塊的長度。如果正確答案更有可能包含在文本的不同部分,并且需要拼接在一起,則應(yīng)將文檔分割成較小的塊,以便在查詢時附加多個上下文。
2. 相似性和檢索度量。有時,單純的余弦相似性是不夠的。例如,如果許多文檔包含關(guān)于同一主題的相互矛盾的信息,您可能希望根據(jù)這些文檔中的元數(shù)據(jù)將搜索限制在某些文檔上。因此,除了相似度之外,您還可以使用其他過濾指標(biāo)。
3. 模型結(jié)構(gòu)。我所展示的架構(gòu)只是一個原型。為了提高效率和可擴展性,必須考慮各個方面,包括矢量嵌入模型、文檔數(shù)據(jù)庫、提示、LLM 模型選擇等。
4. 避免幻覺。您可能已經(jīng)注意到我上面展示的例子幾乎是正確的。增強的 ChatGPT 得到了尼泊爾GDP 的正確數(shù)字--但是年份錯了。在這種情況下,需要在選擇提示、以更好的格式提取數(shù)據(jù)、評估出現(xiàn)幻覺的案例比例以及有效的解決方案之間進(jìn)行大量的反饋。
現(xiàn)在,您已經(jīng)知道如何將LLM應(yīng)用到您的自定義數(shù)據(jù)中,去構(gòu)建基于 LLM 的超棒產(chǎn)品吧!
原文標(biāo)題:Pandas 2.0: A Game-Changer for Data Scientists?
原文鏈接:Build Industry-Specific LLMs Using Retrieval Augmented Generation | by Skanda Vivek | May, 2023 | Towards Data Science
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。