
如何快速實現REST API集成以優化業務流程
2023年是迄今為止NLP發展最快的一年。這年,ChatGPT與許多其他大型語言模型層出不窮,包括開源的和閉源的。
? ? ? ?與此同時,各個行業對個性化和全面運營的RAG的需求也在飆升,每個客戶都渴望擁有自己的量身定制的解決方案。
本文將介紹9中提高RAG技術的方法:
? ? ? ?由于我們索引的數據決定了RAG答案的質量,因此在建立索引之前,需要對數據做很多預處理操作來保證數據質量非常關鍵。
? ? ? ?在構建RAG時,塊大小是一個關鍵參數,它決定了我們從矢量存儲中檢索的文檔的長度。小的塊大小可能會導致文檔錯過一些關鍵信息,而大的塊大小則會引入不相關的噪聲。
可以通過在測試集上運行評估和計算度量來找到最佳塊大小。LlamaIndex有一些有趣的功能可以做到這一點,可以參考[2]:
將元數據與索引向量結合有助于提高搜索相關性。以下是元數據有用的一些場景:
? ? ? ?LLM和RAG功能強大,因為它們提供了用自然語言表達查詢的靈活性,從而降低了數據探索和更復雜任務的進入門檻。
然而,有時,用戶以幾個單詞或短句的形式制定的輸入查詢與索引文檔之間會出現錯位,索引文檔通常以長句甚至段落的形式編寫。
讓我們通過一個例子來理解這一點。
以下是一段關于發動機的內容(來源:ChatGPT)
The motor engine stands as an engineering marvel, propelling countless vehicles and machinery with its intricate design and mechanical prowess. At its core, a motor engine converts fuel into mechanical energy through a precisely orchestrated series
of combustion events. This process involves the synchronized movement of pistons, a crankshaft, and a complex network of valves, all carefully calibrated to optimize efficiency and power output. Modern motor engines come in various types, such as internal combustion engines and electric motors, each with its
unique set of advantages and applications. The relentless pursuit of innovation continues to enhance motor engine technology, pushing the boundaries of performance, fuel efficiency, and environmental sustainability. Whether powering a car on the open road or driving industrial machinery, the motor engine
remains a driving force behind the dynamic movement of our modern world.
如果你提出一個簡單的查詢,比如“Can you tell how the motor engine works in a nutshell?”并計算其與段落的余弦相似性,你就會得到0.72的值。
還不錯,但我們能做得更好嗎?
要做到這一點,我們將不再通過嵌入來索引段落,而是通過嵌入它所回答的問題來索引段落。
讓我們來考慮這段話所回答的三個問題。
如果我們計算它們與輸入查詢的相似性,我們分別獲得這些值。
0.864
0.841
0.845
這些值越高,表示輸入查詢與問題匹配得越精確。
用他們回答的問題對塊進行索引會稍微改變問題,但有助于解決對齊問題并提高搜索相關性:我們不優化與文檔的相似性,而是優化與潛在問題的相似性。
雖然矢量搜索有助于檢索給定查詢的語義相關塊,但它有時在匹配特定關鍵字方面缺乏準確性。
想象一下,搜索數百萬電子商務產品的矢量數據庫,查詢“Adidas ref XYZ sneakers white”,最熱門的結果包括白色阿迪達斯運動鞋,但沒有與確切的XYZ參考相匹配。
這將是相當令人失望的。
為了解決這個問題,混合檢索是一種解決方案。該策略充分利用了矢量搜索和關鍵字搜索等不同檢索技術的優勢,并將它們智能地組合在一起。使用這種混合方法,您仍然可以匹配相關的關鍵字,同時保持對查詢意圖的控制。 混合搜索的案例,可以參考Pinecone的入門指南[3]。
當您查詢向量庫時,前K個結果不一定以最相關的方式排序。假設它們都是相關的,但這些相關塊中最相關的塊可以是數字#5或#7,而不是#1或#2
這就是ReRank的用武之地。重新排序已在各種框架中成功實現,包括LlamaIndex、LangChain和HayStack。
例如,Diversity Ranker專注于基于文檔多樣性的重新排序,而LostInTheMiddleRanker則在上下文窗口的開頭和結尾交替放置最佳文檔。
? ? ? ?研究表明,檢索到的上下文中的噪聲會對RAG性能產生不利影響,更準確地說,是LLM生成的答案??梢栽跈z索后應用后處理步驟來壓縮不相關的上下文,突出顯示重要段落,并減少整體上下文長度。
? ? ??Selective Context和LLMLingua使用小LLM來計算Prompt的互信息或困惑度,從而估計文本的重要性。
? ? ? ? 當進行查詢時,HyDE指示LLM生成一個假設答案。隨后,無監督對比學習編碼器(例如,Contriever)將文檔轉換為嵌入向量。
該矢量用于精確定位語料庫嵌入空間中的鄰域,從而能夠基于矢量相似性檢索相似的真實文檔。在第二步中,生成的文檔被錨定到實際語料庫,編碼器的密集瓶頸有效地過濾掉了不正確的細節。
實驗表明,HyDE始終優于最先進的無監督密集檢索器Contriever,并在各種任務(如網絡搜索、QA和事實驗證)和語言中表現出與微調檢索器相當的穩健性能。
? ? ? ?當用戶與RAG交互時,用戶的查詢格式不一定是很好的,也不能完全表達與向量庫中的文檔有效匹配的意圖。
? ? ? ?為了解決這個問題,我們指示LLM在將該查詢發送到RAG之前在后臺重寫該查詢。這可以通過添加中間LLM調用來輕松實現,但也存在其他復雜的技術[4]。
[1] https://towardsdatascience.com/9-effective-techniques-to-boost-retrieval-augmented-generation-rag-systems-210ace375049
[2] https://blog.llamaindex.ai/evaluating-the-ideal-chunk-size-for-a-rag-system-using-llamaindex-6207e5d3fec5
[3] https://www.pinecone.io/learn/hybrid-search-intro/
[4]?https://arxiv.org/abs/2305.03653
本文章轉載微信公眾號@ArronAI