那么,是什么造就了一個(gè)好的數(shù)據(jù)檢索系統(tǒng)呢?

兩個(gè)詞:相關(guān)性和相似性。

       相關(guān)性是指檢索到的信息與用戶的查詢相關(guān)的相關(guān)性或重要性,而相似性在數(shù)據(jù)檢索的上下文中是指用戶的查詢與可用數(shù)據(jù)之間的相似性或相似性。

similarity = word matching,relevancy = context matching.

? ? ? ?矢量數(shù)據(jù)庫有助于識(shí)別語義相近的內(nèi)容(相似性),但識(shí)別相關(guān)性或檢索相關(guān)內(nèi)容更復(fù)雜的方法(可以參考:https://www.youtube.com/watch?v=TRjq7t2Ms5I)。

二、高級(jí)數(shù)據(jù)處理實(shí)現(xiàn)更好的數(shù)據(jù)檢索

2.1 分塊策略

? ? ? ?在自然語言處理的背景下,“分塊”是將文本分解為可管理、清晰和重要的塊的過程。在這種情況下,使用較小的文本片段而不是較大的文檔可以使RAG系統(tǒng)更快、更準(zhǔn)確地發(fā)現(xiàn)相關(guān)上下文。

? ? ? ?確保選擇的分塊是合適的,這對(duì)分塊策略的成功至關(guān)重要。這些文本段落的水平和組織對(duì)這種策略的效果有很大影響。為了找到和提取捕捉RAG系統(tǒng)所需的基本細(xì)節(jié)或上下文的文本段落,需要仔細(xì)檢查內(nèi)容和上下文。智能分塊策略提高了系統(tǒng)遍歷和理解自然語言的能力,最終實(shí)現(xiàn)了更準(zhǔn)確、更有效的信息處理。

? ? ? ? 在本文中,塊大小為1024似乎會(huì)產(chǎn)生更好的結(jié)果

較大的塊可以捕獲更多的上下文,但由于它們產(chǎn)生的噪聲,處理它們需要更長的時(shí)間和更多的錢。雖然較小的片段可能無法完全傳達(dá)必要的上下文,但它們的噪音確實(shí)較小。平衡這兩個(gè)要求的一種方法是具有重疊部分。組合塊的查詢可能能夠從各種向量中獲得足夠的相關(guān)信息,以產(chǎn)生適當(dāng)?shù)纳舷挛幕鸢浮?/p>

2.2 這種策略有什么不好的地方?

      該策略假設(shè)需要訪問的每一條信息都可以位于一個(gè)文檔中,這是其局限性之一。如果相關(guān)上下文分布在多個(gè)單獨(dú)的文檔上,請(qǐng)使用具有遞歸方法的多文檔代理和子查詢等解決方案。

2.3 小到大分塊與小到大檢索相結(jié)合

? ? ? ?這個(gè)想法是,選擇最佳的塊大小有時(shí)不是最佳的,因?yàn)榍度?檢索大文本塊并不總是最好的選擇。大的文本塊可能包含大量的填充內(nèi)容,這些填充內(nèi)容模糊了語義表示并降低了檢索性能。如果我們可以根據(jù)更集中、更小的比特進(jìn)行提取或嵌入,同時(shí)為LLM保持足夠的上下文以做出適當(dāng)?shù)捻憫?yīng),該怎么辦?將用于合成的文本塊與用于檢索的文本塊分離可能是有益的。較大的文本塊提供更多的上下文信息,而較小的文本塊提高了檢索的準(zhǔn)確性。小到大檢索背后的概念是在檢索過程中使用較小的文本塊,然后將檢索到的文本所屬的較大文本塊提供給大語言模型。

   在(https://towardsdatascience.com/advanced-rag-01-small-to-big-retrieval-172181b396d4)文章中,作者對(duì)分塊大小進(jìn)行了兩種方案的簡(jiǎn)單比較,從小到大似乎效果更好,但缺點(diǎn)是查詢時(shí)間更長,而且重新嵌入數(shù)據(jù)的成本也更高。

       如果想體驗(yàn)一下從小到大的方案,可以使用LlamaHub包,鏈接:https://llamahub.ai/l/llama_packs-recursive_retriever-small_to_big?from=all

2.4 文檔層次結(jié)構(gòu)

? ? ? ?構(gòu)建數(shù)據(jù)結(jié)構(gòu)以增強(qiáng)信息檢索的一種有效方法是創(chuàng)建文檔層次結(jié)構(gòu)。文檔層次結(jié)構(gòu)可以與RAG系統(tǒng)的目錄進(jìn)行比較。通過構(gòu)建塊,RAG系統(tǒng)可以更快地檢索和處理相關(guān)數(shù)據(jù)。因?yàn)槲臋n層次結(jié)構(gòu)有助于LLM選擇包含要提取的最相關(guān)數(shù)據(jù)的部分,所以文檔層次結(jié)構(gòu)對(duì)RAG的效率至關(guān)重要。

在文檔層次結(jié)構(gòu)中,節(jié)點(diǎn)以父子關(guān)系排列,塊與節(jié)點(diǎn)鏈接。數(shù)據(jù)的摘要存儲(chǔ)在每個(gè)節(jié)點(diǎn)上,這有助于快速遍歷數(shù)據(jù),并幫助RAG系統(tǒng)確定要提取哪些塊。

2.5 但是…為什么你需要一個(gè)文檔層次結(jié)構(gòu)?

? ? ? ?文檔層次結(jié)構(gòu)可以與文件目錄或目錄進(jìn)行比較。雖然LLM能夠從矢量數(shù)據(jù)庫中提取相關(guān)的文本片段,但通過使用文檔層次結(jié)構(gòu)作為預(yù)處理步驟來識(shí)別最相關(guān)的文本段,可以提高檢索速度和可靠性。除了提高速度、可重復(fù)性和檢索可靠性外,這種策略還可以減少塊提取問題帶來的幻覺。構(gòu)建文檔層次結(jié)構(gòu)可能需要特定領(lǐng)域或問題的知識(shí),以確保摘要與當(dāng)前工作完全相關(guān)。

在左側(cè)菜單中,存在多個(gè)部分,每個(gè)部分都包含自己的一組子部分,而每個(gè)子部分又包含其唯一的文檔和隨后的信息層。在一種基本的分塊方法中,矢量查詢可能會(huì)從不同的部分檢索類似的代碼片段,這可能會(huì)在沒有適當(dāng)排名的情況下導(dǎo)致混亂。

? ? ? ?通過實(shí)現(xiàn)文檔層次結(jié)構(gòu),RAG系統(tǒng)可以顯著增強(qiáng)其在給定部分內(nèi)為特定問題提供準(zhǔn)確答案的能力。這種層次結(jié)構(gòu)能夠更細(xì)致地理解上下文,防止共享相似代碼但存在細(xì)微差異的部分之間的潛在混淆。例如,當(dāng)解決有關(guān)SageMaker處理的特定方面的問題時(shí),系統(tǒng)可以準(zhǔn)確地識(shí)別與該特定部分相關(guān)的信息并對(duì)其進(jìn)行優(yōu)先級(jí)排序,避免與SageMaker模型構(gòu)建無意中混淆,后者可能有共同之處,但需要不同的考慮。這種方法降低了幻覺的風(fēng)險(xiǎn),并有助于建立一個(gè)更可靠和上下文感知的RAG系統(tǒng)。

 具體實(shí)現(xiàn),可以參考:https://docs.llamaindex.ai/en/stable/examples/retrievers/auto_merging_retriever.html和https://llamahub.ai/l/llama_packs-auto_merging_retriever?from=llama_packs

2.6 知識(shí)圖譜

       知識(shí)圖譜是為文檔層次結(jié)構(gòu)提供數(shù)據(jù)基礎(chǔ)的好方法,而數(shù)據(jù)基礎(chǔ)對(duì)于保持一致性至關(guān)重要。從本質(zhì)上講,知識(shí)圖是不同概念和實(shí)體之間連接的確定性映射。與矢量數(shù)據(jù)庫中的相似性搜索不同,知識(shí)圖提供了可靠、準(zhǔn)確地檢索相關(guān)規(guī)則和概念的能力,大大降低了產(chǎn)生幻覺的可能性。

? ? ? ?使用知識(shí)圖譜來表示文檔層次結(jié)構(gòu)的一個(gè)明顯好處是,它們可以用于將信息檢索過程轉(zhuǎn)換為LLM能夠理解的指令。例如,當(dāng)LLM被呈現(xiàn)有特定的查詢(例如,X)時(shí),知識(shí)圖可以通過指示數(shù)據(jù)必須從某個(gè)文檔(例如,文檔a)中提取,然后被引導(dǎo)將提取的數(shù)據(jù)與另一個(gè)文檔(如,文檔B)進(jìn)行比較來引導(dǎo)LLM。這種有條不紊的技術(shù)提高了知識(shí)檢索的準(zhǔn)確性,并使LLM能夠通過遵循邏輯步驟生成上下文良好的回復(fù),從而提高了RAG系統(tǒng)的整體功效。

知識(shí)圖譜使用自然語言映射關(guān)系,這意味著即使是非技術(shù)用戶也可以構(gòu)建和修改規(guī)則和關(guān)系,以控制他們的企業(yè)RAG系統(tǒng)。例如,規(guī)則可能會(huì)說,要響應(yīng)有關(guān)SageMaker內(nèi)置算法的查詢,應(yīng)首先查閱適當(dāng)?shù)腟ageMaker文檔,然后查找其中的特定算法。

  (https://neo4j.com/developer-blog/advanced-rag-strategies-neo4j/)這篇文章介紹了使用LlamaIndex是如何來操作知識(shí)圖譜的。官方文檔:https://docs.llamaindex.ai/en/stable/examples/index_structs/knowledge_graph/Neo4jKGIndexDemo.html。如果想尋求簡(jiǎn)單的實(shí)現(xiàn),請(qǐng)查看此LlamaHub包的實(shí)現(xiàn):https://llamahub.ai/l/llama_packs-neo4j_query_engine?from=llama_packs

       除了討論的基本分塊策略之外,再討論兩種更高級(jí)的數(shù)據(jù)檢索。

三、兩項(xiàng)數(shù)據(jù)檢索技術(shù)

3.1 查詢?cè)鰪?qiáng)

? ? ? ?RAG中的一個(gè)主要問題是查詢的措辭不當(dāng),可以通過查詢擴(kuò)充來解決,為查詢提供進(jìn)一步的上下文來解決查詢?nèi)狈μ囟▓?chǎng)景的情況,從而確保生成的答案具有最佳相關(guān)性。這種方法提高了系統(tǒng)理解和處理更廣泛?jiǎn)栴}的能力,最終提高了RAG框架的性能和用戶滿意度。

? ? ? ?糟糕的問題表述往往是由語言的復(fù)雜性造成的。例如,根據(jù)上下文的不同,同一個(gè)單詞可以有兩種不同的含義。

即使是像GPT-4這樣的高級(jí)模型仍然不知道所指的LLM的上下文。這在很大程度上是一個(gè)特定于領(lǐng)域的問題。

? ? ? ?那么,如果你想使用特定于行業(yè)或領(lǐng)域的術(shù)語來將LLM上下文化呢?公司縮寫詞就是一個(gè)簡(jiǎn)單的例子(例如,MLA ak度量日志聚合)。大多數(shù)LLM發(fā)現(xiàn)很難區(qū)分這些術(shù)語。然而,當(dāng)涉及到MLA時(shí),MLA(現(xiàn)代語言協(xié)會(huì))、MLA(醫(yī)學(xué)實(shí)驗(yàn)室助理)或MLA(最大似然估計(jì))是兩種不同的東西。我的方法包括預(yù)處理查詢,并添加特定于公司的上下文以引用相關(guān)分段來映射“MLA”。我使用的另一種更昂貴的方法是微調(diào)嵌入或微調(diào)LLM模型。

PS:查詢?cè)鰪?qiáng)可以參考llamaindex的實(shí)現(xiàn):https://docs.llamaindex.ai/en/latest/optimizing/advanced_retrieval/query_transformations.html#

3.2 子問題規(guī)劃

       子問題規(guī)劃代表了生成子問題的過程,這些子問題需要適當(dāng)?shù)貙⑵渖舷挛幕⑸纱鸢?,?dāng)這些答案組合在一起時(shí),可以完全回答原始問題。添加相關(guān)上下文的過程在原理上可以類似于查詢擴(kuò)充。

讓我們以個(gè)人理財(cái)顧問中的一個(gè)問題為例:

投資者簡(jiǎn)介:John,45歲,風(fēng)險(xiǎn)承受能力中等,擁有由個(gè)股組成的多元化投資組合。他旨在評(píng)估股票投資的表現(xiàn),并將其與相關(guān)基準(zhǔn)進(jìn)行比較。

問題:“作為一名風(fēng)險(xiǎn)承受能力中等的45歲投資者,John如何評(píng)估其個(gè)人股票投資的表現(xiàn),并將其與基準(zhǔn)進(jìn)行比較,以確保其與他的長期財(cái)務(wù)目標(biāo)相一致?”

子問題:

  1. John目標(biāo)的度量標(biāo)準(zhǔn)選擇:考慮到John的投資目標(biāo)和風(fēng)險(xiǎn)承受能力,在評(píng)估投資組合中個(gè)股的表現(xiàn)時(shí),他應(yīng)該優(yōu)先考慮哪些具體指標(biāo)?
  2. 為John量身定制的基準(zhǔn):考慮到John的投資狀況,他如何確定一個(gè)符合其多元化投資組合并反映其財(cái)務(wù)目標(biāo)的基準(zhǔn)?
  3. 審查頻率與John的策略一致:考慮到John繁忙的日程安排和長期的投資前景,什么頻率的績效評(píng)估對(duì)他來說是實(shí)用和有益的?
  4. 符合John偏好的風(fēng)險(xiǎn)調(diào)整后回報(bào):考慮到John適度的風(fēng)險(xiǎn)承受能力和對(duì)穩(wěn)定、長期增長的渴望,他如何將風(fēng)險(xiǎn)調(diào)整后的指標(biāo)納入績效評(píng)估?
  5. 為John的投資組合量身定制的相對(duì)績效分析:John可以通過什么方式進(jìn)行相對(duì)績效分析,具體考慮其多元化投資組合中所代表的行業(yè)和行業(yè)?
  6. 股息再投資策略與John的目標(biāo)一致:考慮到John對(duì)長期增長的偏好,他應(yīng)該如何處理股息的再投資,以優(yōu)化他的整體投資組合表現(xiàn)?
  7. 符合John目標(biāo)的長期關(guān)注:鑒于John強(qiáng)調(diào)長期財(cái)務(wù)目標(biāo),在評(píng)估股票表現(xiàn)時(shí),他應(yīng)該如何平衡短期波動(dòng)和持續(xù)增長?
  8. 調(diào)整和戰(zhàn)略與John的財(cái)務(wù)目標(biāo)保持一致:根據(jù)績效評(píng)估,John應(yīng)該考慮哪些具體調(diào)整(如果有的話),以確保他的股票投資與他更廣泛的財(cái)務(wù)戰(zhàn)略和退休計(jì)劃保持一致?

PS:現(xiàn)有的子查詢引擎能夠做到這一點(diǎn)有點(diǎn)牽強(qiáng)。然而,考慮到用于微調(diào)LLM的訓(xùn)練數(shù)據(jù)集的數(shù)量。

? ? ? ?這種方法因在推理過程中引入人工參與以及不可能為每個(gè)可能的問題想象每個(gè)可能的子問題而受到批評(píng)。這是準(zhǔn)確的??紤]到LLM的當(dāng)前狀態(tài),應(yīng)該避免試圖重現(xiàn)每一個(gè)潛在的子問題,而是只在LLM即將失敗時(shí)才采用外部推理規(guī)則進(jìn)行干預(yù)。

四、將高級(jí)數(shù)據(jù)處理與高級(jí)數(shù)據(jù)檢索相結(jié)合

? ? ? ?要么得到響應(yīng)的速度,要么用金錢和時(shí)間換取更好的RAG響應(yīng)。

? ? ? ?把它想象成一個(gè)樂高游戲,把所有的碎片疊在一起。你在上面放的樂高越多,你的樂高就越好,但過程也就越慢。你必須嘗試多種組合,找出最適合你的文檔的組合。沒有一個(gè)適合所有人的建筑師可以使用。

  上圖說明了如何將多個(gè)檢索放在查詢引擎的頂部以產(chǎn)生更好的結(jié)果。除此之外,還可以嘗試上面討論的多種數(shù)據(jù)處理技術(shù)。

知識(shí)圖可以對(duì)已知關(guān)系的某些關(guān)鍵主題和概念進(jìn)行一致檢索。

       例如:除了上面的摘要索引、矢量索引和圖形索引外,還可以添加另一個(gè)具有文檔層次結(jié)構(gòu)的矢量索引,也可以添加一個(gè)具有句子窗口或從小到大分塊的矢量索引。

當(dāng)涉及到檢索時(shí),可以進(jìn)行多次檢索加上混合搜索,然后使用重新排序來獲得與您的查詢最匹配的結(jié)果。

當(dāng)涉及到查詢引擎時(shí),可以嘗試上面討論的多種查詢規(guī)劃技術(shù),并將它們堆疊在一起。

來自多個(gè)查詢引擎的多個(gè)響應(yīng)將被發(fā)送到LLM以獲得最終答案。

五、RAG中未解決的問題

六、心得

? ? ? ?盡管我覺得LLM很吸引人,盡管有很多關(guān)于人工智能,特別是LLM如何改變行業(yè)的討論,但采用仍在緩慢進(jìn)行,主要是因?yàn)槠髽I(yè)不愿在市場(chǎng)上表明明確立場(chǎng)。這導(dǎo)致幾乎每家公司都進(jìn)入了“只會(huì)說話的人工智能階段”,而不是“行動(dòng)階段”。

? ? ? ?許多企業(yè)在將人工智能(包括LLM的強(qiáng)大功能)納入其內(nèi)部系統(tǒng)方面取得了進(jìn)展。但是,從內(nèi)部使用轉(zhuǎn)向廣泛的市場(chǎng)吸引力,并專注于當(dāng)前用戶,這帶來了一系列獨(dú)特的困難。它需要一種超越技術(shù)使用的戰(zhàn)略方法,探索用戶體驗(yàn)、市場(chǎng)動(dòng)態(tài)和行業(yè)接受度等領(lǐng)域。

? ? ? ? 特別是大型語言模型(LLM)和人工智能(AI),將在未來一年蓬勃發(fā)展,看看它們將如何融入通用產(chǎn)品中是非常有趣的。最終實(shí)現(xiàn)通用人工智能(AGI)的期望是由對(duì)人工智能初創(chuàng)公司的重大投資、最新進(jìn)步背后的創(chuàng)造性思維以及更強(qiáng)大但更實(shí)惠的芯片的可用性推動(dòng)的,盡管AGI完全融入我們的個(gè)人生活可能需要一段時(shí)間。

      未來幾年有望取得前所未有的進(jìn)步,使人工智能在廣泛的領(lǐng)域和應(yīng)用中離其革命性潛力又近了一步。

       2024年的已來,我一直在思考未來如何進(jìn)行軟件開發(fā)。我堅(jiān)信,初創(chuàng)公司和公司應(yīng)該重新集中精力創(chuàng)建平臺(tái),而不是專注于創(chuàng)建以人工智能為中心的個(gè)人產(chǎn)品或應(yīng)用程序。我相信,隨著通用人工智能(AGI)的發(fā)展,現(xiàn)有的以“應(yīng)用/產(chǎn)品”為中心的模型最終將失去其主導(dǎo)地位。

       企業(yè)應(yīng)通過投資平臺(tái)開發(fā),建立一個(gè)更靈活、更可擴(kuò)展的基礎(chǔ),支持一系列人工智能服務(wù)和功能。這一策略符合人工智能的發(fā)展方式,在人工智能中,許多應(yīng)用程序和領(lǐng)域之間的集成越來越普遍。平臺(tái)可以作為一個(gè)靈活的框架,促進(jìn)合作,促進(jìn)一系列用例的創(chuàng)新,并使各種人工智能技術(shù)能夠順利集成。隨著軟件開發(fā)格局的不斷變化,對(duì)平臺(tái)架構(gòu)的戰(zhàn)略關(guān)注表明了充分利用人工智能潛力的前瞻性戰(zhàn)略。

? ? ? ?為充滿進(jìn)步、擴(kuò)張和更多人工智能領(lǐng)域研發(fā)的光明2024干杯!

參考文獻(xiàn):

[1]?https://pub.towardsai.net/rag-in-action-beyond-basics-to-advanced-data-indexing-techniques-b7e07e3f5e43

本文章轉(zhuǎn)載微信公眾號(hào)@ArronAI

上一篇:

LLM之RAG理論(三)| 高級(jí)RAG技術(shù)全面匯總

下一篇:

LLM之RAG理論(五)| 使用知識(shí)圖譜增強(qiáng)RAG
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)