獨家 | 使用檢索增強生成技術(shù)構建特定行業(yè)的 LLM
企業(yè)正在競相采用大型語(yǔ)言模型(也可以被稱(chēng)為L(cháng)LM)。讓我們深入了解如何通過(guò)RAG(檢索增強生成技術(shù)) 構建特定行業(yè)的大型語(yǔ)言模型。
公司可以通過(guò)使用像ChatGPT 這樣的大語(yǔ)言明星提高生產(chǎn)力。但是試著(zhù)問(wèn) ChatGPT "美國目前的通貨膨脹率是多少",它會(huì )給出答案:
很抱歉造成您的困惑,作為一個(gè)人工智能語(yǔ)言模型,我不具備實(shí)時(shí)數據的瀏覽能力。我的回答是基于截至 2021 年 9 月的信息。因此,我無(wú)法為您提供美國當前的通貨膨脹率。
這是一個(gè)問(wèn)題。ChatGPT顯然缺少及時(shí)相關(guān)的背景信息,而這對于做出明智的決策至關(guān)重要。
微軟如何解決這一問(wèn)題在微軟 Build 會(huì )議 "矢量搜索還不夠"(Vector Search Isn't Enough)中,他們介紹了自己的產(chǎn)品,該產(chǎn)品將上下文感知較弱的LLM 與矢量搜索結合起來(lái),以創(chuàng )造更有吸引力的體驗。
演講的出發(fā)點(diǎn)與本文相反—他們從彈性搜索(或矢量搜索)的角度出發(fā),認為搜索本身是有限的,而添加LLM 層可以極大地改善搜索體驗。
其基本想法是,在LLM 中添加相關(guān)上下文可以極大地改善用戶(hù)體驗,尤其是在大多數商業(yè)案例中,因為L(cháng)LM 并沒(méi)有見(jiàn)過(guò)此類(lèi)數據。當您擁有海量數據,包括 100 多份(或更多)文檔時(shí), 矢量搜索有助于選擇相關(guān)上下文。
矢量搜索 101矢量搜索101 | Skanda Vivek
矢量化是將數據轉換成多維向量。在上面的案例中,您可以看到2個(gè)維度:尺寸和類(lèi)型。尺寸有 2 種(小或大),類(lèi)型有 2 個(gè)種(樹(shù)或動(dòng)物)。這只是一個(gè)概念性的例子,當然矢量化也可以擴展到數百個(gè)維度(或更多值)。

句子的矢量搜索101 | Skanda Vivek
您也可以用單詞或句子代替圖片來(lái)做同樣的事情。請注意,在上述示例中,矢量化能夠捕捉語(yǔ)義表征,即它知道關(guān)于一只鳥(niǎo)俯沖向一只花栗鼠寶寶的句子應該位于(小鼠,動(dòng)物)象限,而關(guān)于昨天暴風(fēng)雨時(shí)一棵大樹(shù)倒在路上的句子應該位于(大,樹(shù))象限。實(shí)際上,嵌入的維度不止 2 個(gè)--而是384個(gè)(句子或文本塊通過(guò)BERT 變換器,輸出 384個(gè)與384維相對應的數字)
矢量搜索 + LLM (RAG)矢量搜索現在在所有的搜索中都很普遍(谷歌、必應,以及您最喜歡的搜索引擎)。想一想,如果您的整個(gè)搜索數據庫中只有這4 個(gè)文檔,您可以問(wèn)這樣一個(gè)問(wèn)題:"請告訴我關(guān)于一棵大樹(shù)的事情。您可以問(wèn)這樣一個(gè)問(wèn)題:"請告訴我關(guān)于一棵大樹(shù)的事情"。
那么輸出為:
在昨天的暴風(fēng)雨中,一棵大樹(shù)倒在路上。
只是數據庫中最相關(guān)的文檔。但如果您向LLM提出同樣的問(wèn)題(并在最后添加 4 個(gè) "文檔"),您將得到以下結果:
(本例中為ChatGPT):
大樹(shù)通常是一種高聳的大型植物,具有粗壯的樹(shù)干、樹(shù)枝和廣泛的根系網(wǎng)絡(luò )。這些樹(shù)木可以達到令人印象深刻的高度, 通常遠遠高于周?chē)闹脖?。它們是許多生態(tài)系統的重要組成部分,為各種生物提供樹(shù)蔭、庇護所和食物。
您提到的暴風(fēng)雨中大樹(shù)倒在路上的事件表明了惡劣天氣條件的威力和影響。強風(fēng)暴雨會(huì )將樹(shù)木連根拔起或折斷,導致道路堵塞,給車(chē)輛和行人帶來(lái)潛在危險。
在您提到的另一種情況下,當您在班迪布爾(Bandipur) 的公路上行駛時(shí),遇到一頭大象橫穿馬路。班迪普爾是位于印度的一個(gè)國家公園和野生動(dòng)物保護區,以其豐富的生物多樣性和多樣的動(dòng)物而聞名。大象是班迪普爾的主要物種之一,它們經(jīng)常穿越該地區,有時(shí)還會(huì )橫穿馬路。這樣的邂逅凸顯了野生動(dòng)物保護的重要性,以及人類(lèi)在自然棲息地與動(dòng)物共存的必要性。
說(shuō)到盆景,它們是生長(cháng)在小盆中的微型樹(shù)木,經(jīng)過(guò)精心造型和修剪以保持其小巧的體型。盆景栽培是一種古老的藝術(shù)形式,起源于東亞,現已風(fēng)靡全球。由于根部空間有限,盆景景樹(shù)要定期澆水以防止干枯。小盆會(huì )導致土壤迅速干燥,因此監測濕度并相應地澆水至關(guān)重要。
最后,您提到透過(guò)窗戶(hù)觀(guān)察到一只鳥(niǎo)俯沖一只小花栗鼠。這種觀(guān)察反映了大自然的一個(gè)行動(dòng)瞬間,一只鳥(niǎo)可能正在覓食。眾所周知,猛禽和某些鳥(niǎo)類(lèi)(如鷹或貓頭鷹)會(huì )俯沖花栗鼠等小型哺乳動(dòng)物,這是它們自然狩獵行為的一部分。目睹這種互動(dòng)令人著(zhù)迷,因為它們能讓我們對動(dòng)物王國的活力有更深的了解。
總之,這些自然片段--無(wú)論是涉及大樹(shù)、大象、盆景樹(shù)還是鳥(niǎo)類(lèi)捕食--都突出了我們周?chē)匀皇澜绲亩鄻有院推婷钚浴?/p>
這個(gè)答案似乎更加全面。ChatGPT使用的是在數萬(wàn)億文檔中訓練出來(lái)的內部知識,并結合了所給的上下文。
但是,假設您有不止4個(gè)文檔--也許是成千上萬(wàn)個(gè),您無(wú)法在ChatGPT 提示中找到。在這種情況下,您可以使用矢量搜索來(lái)縮小最有可能包含答案的上下文范圍,并將其附加到提示中, 然后提出如下相同的問(wèn)題:
這是它現在給出的(截斷的)答案:
ChatGPT answer | Skanda Vivek
您可以有一個(gè)數據庫,存儲文檔和嵌入。另一個(gè)數據庫存儲查詢(xún),并根據查詢(xún)找到最相關(guān)的文檔:

Document DB (左)和 Quey DB (右) | Skanda Vivek
一旦您通過(guò)查詢(xún)獲得了最相似的文檔,您就可以將其輸入到任何LLM,如ChatGPT。通過(guò)這個(gè)簡(jiǎn)單的技巧,您就利用文檔檢索增強了您的 LLM!這也被稱(chēng)為檢索增強生成(RAG)。
使用 RAG 建立特定行業(yè)的問(wèn)答模型RAG原型 | Skanda Vivek
上圖概述了如何構建一個(gè)基本的RAG,利用自定義文檔的LLM進(jìn)行問(wèn)題解答。第一部分是將多個(gè)文檔分割成易于管理的塊,相關(guān)參數是最大分塊長(cháng)度。這些塊應該是包含典型問(wèn)題答案的典型(最?。┪谋敬笮?。這是因為有時(shí)您提出的問(wèn)題可能在文檔的多個(gè)位置都有答案。例如,您可能會(huì )問(wèn)"X 公司從2015 年到 2020 年的業(yè)績(jì)如何?而您可能有一個(gè)大型文檔(或多個(gè)文檔),在文檔的不同部分包含了公司多年來(lái)業(yè)績(jì)的具體信息。在理想情況下,您希望捕獲包含這些信息的文檔的所有不同部分,將它們連接在一起,并根據這些經(jīng)過(guò)過(guò)濾和連接的文檔塊傳遞給 LLM 進(jìn)行回答。
最大上下文長(cháng)度基本上是將各種語(yǔ)塊連接在一起的最大長(cháng)度--為問(wèn)題本身和輸出答案留出一些空間(請記住,像 ChatGPT 這樣的 LLM 有嚴格的長(cháng)度限制,包括所有內容:?jiǎn)?wèn)題、上下文和答案。
相似度閾值是將問(wèn)題與文檔塊進(jìn)行比較的方法,以找到最有可能包含答案的頂級文檔塊。余弦函數是典型的度量方法,但您可能希望使用不同的度量方法。例如,包含關(guān)鍵詞的上下文的權重更高。例如,當您向LLM 提出總結文檔的問(wèn)題時(shí),您可能希望對包含 "摘要 "或 "總結 "字樣的上下文進(jìn)行加權。
如果您想通過(guò)一種簡(jiǎn)單的方式測試自定義文檔上的生成式問(wèn)答,請查看我的API (https://rapidapi.com/skandavivek/api/chatgpt-powered-question-answering-over-documents)和在后臺使用 ChatGPT 的代碼(https://github.com/skandavivek/web-qa)。
由 RAG 推動(dòng)的 ChatGPT 原型機讓我們通過(guò)一個(gè)例子來(lái)說(shuō)明RAG的作用。EMAlpha 是一家調研新興市場(chǎng)的公司--基本上是印度、中國、巴西等新興國家的經(jīng)濟(完全披露--我是 EMAlpha 的顧問(wèn))。該公司正在開(kāi)發(fā)一個(gè)由 ChatGPT 支持的app,根據用戶(hù)輸入生成對新興經(jīng)濟體的觀(guān)點(diǎn)。儀表盤(pán)看起來(lái)像這樣--你可以比較 ChatGPT 和RAG 版ChatGPT(EM-GPT)的輸出,后者能夠在后臺查詢(xún)國際貨幣基金組織(IMF)的金融文件:
EMAlpha中的EM-GPT 從|斯坎達-維韋克
以下是ChatGPT 對 "尼泊爾每年的 GDP 是多少?"這個(gè)問(wèn)題的回答:

ChatGPT回答| Skanda Vivek
ChatGPT 只返回 2019 年之前的 GDP,它說(shuō)如果您想了解更多信息,請訪(fǎng)問(wèn) IMF。但是,如果您想知道這些數據在IMF 網(wǎng)站的什么位置,那就很難了,您需要對網(wǎng)站上的文件存儲位置有所了解。經(jīng)過(guò)一番搜索,您會(huì )發(fā)現文件就在這里。即便如此,要想知道 GDP 信息到底在哪里,也需要進(jìn)行大量的滾動(dòng)。
國際貨幣基金組織關(guān)于尼泊爾經(jīng)濟的文件| Skanda Vivek
你可以看到,找到這些數據是很難的。但是,當您向 EM-GPT 提出同樣的問(wèn)題時(shí),它會(huì )追蹤相關(guān)上下文,并找到如下答案:

EM-GPT答案 | Skanda Vivek
下面是發(fā)送給ChatGPT 回答這個(gè)問(wèn)題的確切提示。令人印象深刻的是,它能夠理解這些格式化的文本,提取正確的信息,并將其格式化為人類(lèi)可讀的格式!

使用基于查詢(xún)的上下文進(jìn)行聊天GPT 提示 | Skanda Vivek
我花了半個(gè)小時(shí)才在IMF網(wǎng)站上找到這些信息,而 RAG 修改后的 ChatGPT 只花了幾秒鐘。僅靠矢量搜索是不行的,因為它最多只能找到 "名義 GDP"這個(gè)詞,而不能將數字與年份聯(lián)系起來(lái)。ChatGPT 已經(jīng)在過(guò)去的多個(gè)此類(lèi)文檔中接受過(guò)訓練,因此一旦添加了相關(guān)上下文,它就知道文本的哪些部分包含答案,以及如何將答案格式化為可讀的格式。
結論RAG提供了一種在自定義文檔中使用LLM 的好方法。微軟、谷歌和亞馬遜等公司都在競相開(kāi)發(fā)企業(yè)可以”即插即用“的應用程序。然而,該領(lǐng)域仍處于起步階段,在自定義文檔上使用矢量搜索驅動(dòng)的 LLM 的特定行業(yè)應用程序可以成為先行者,并在競爭中脫穎而出。
當有人問(wèn)我應該使用哪種LLM,以及是否要對自定義文檔進(jìn)行微調或完全訓練模型,他們低估了LLM 和矢量搜索之間的同步工程的作用。以下是一些可以顯著(zhù)提高或降低響應質(zhì)量的注意事項:
1. 文檔塊的長(cháng)度。如果正確答案更有可能包含在文本的不同部分,并且需要拼接在一起,則應將文檔分割成較小的塊,以便在查詢(xún)時(shí)附加多個(gè)上下文。
2. 相似性和檢索度量。有時(shí),單純的余弦相似性是不夠的。例如,如果許多文檔包含關(guān)于同一主題的相互矛盾的信息,您可能希望根據這些文檔中的元數據將搜索限制在某些文檔上。因此,除了相似度之外,您還可以使用其他過(guò)濾指標。
3. 模型結構。我所展示的架構只是一個(gè)原型。為了提高效率和可擴展性,必須考慮各個(gè)方面,包括矢量嵌入模型、文檔數據庫、提示、LLM 模型選擇等。
4. 避免幻覺(jué)。您可能已經(jīng)注意到我上面展示的例子幾乎是正確的。增強的 ChatGPT 得到了尼泊爾GDP 的正確數字--但是年份錯了。在這種情況下,需要在選擇提示、以更好的格式提取數據、評估出現幻覺(jué)的案例比例以及有效的解決方案之間進(jìn)行大量的反饋。
現在,您已經(jīng)知道如何將LLM應用到您的自定義數據中,去構建基于 LLM 的超棒產(chǎn)品吧!
原文標題: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
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。