吳恩達大模型教程筆記-十一-

绝不原创的飞龙發表於2024-10-01

吳恩達大模型教程筆記(十一)

LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P96:5.L4-rerank.zh - 吳恩達大模型 - BV1gLeueWE5N

歡迎來到第四課,我非常興奮要向您展示一種我特別喜歡的方法,叫做重新排名。

現在您已經學習了關鍵詞搜尋和密集檢索,重新排名是一種改進兩者方法的方式,而且,它是語義搜尋的第二個組成部分。

除了密集檢索之外,重新排名是大型語言模型排序搜尋結果的一種方式,從最佳的兩個詞開始,基於它們與查詢的相關性。

現在,讓我們在實驗室中看到重新排名的實際操作,那麼讓我們從Coherent和Viviate中獲取API金鑰,然後,我們將匯入Cohere,並匯入V8,下一步,我們將建立我們的客戶端。

這將儲存所有維基百科條目,現在,讓我們使用密集檢索進行搜尋,這是我們在上一節課中學到的,我們將匯入密集檢索函式,現在,讓我們搜尋以下查詢,加拿大的首都是什麼,我們將呼叫答案為密集檢索結果。

並且要得到這些結果,我們將使用密集檢索函式,使用查詢和客戶端作為輸入,現在如果你記得我們之前有一個可以幫助我們列印結果的函式,很巧它被叫做print result,所以當我們列印結果時,我們得到以下。

所以讓我們來看看這些結果,第一個是正確的,它是渥太華,然後我們有一些嘈雜的,多倫多不是加拿大的首都,然後我們還有魁北克市,這是錯誤的答案,那麼為什麼這會發生呢,讓我來在這裡給你展示一個小的示意圖。

答案不同,但它是為了理解,所以查詢說加拿大的首都是什麼,讓我們假設可能的響應是這些五個,加拿大的首都是渥太華,哪個是正確的,多倫多在加拿大,雖然正確,但與問題無關,法國的首都是巴黎,這也是正確的。

但不是問題的答案,然後一句錯誤的句子,加拿大的首都是悉尼,這不是正確的,然後一句話說安大略省的首都是多倫多,這是真的,但也沒有回答問題,當我們在這裡做好密集檢索時,會發生什麼,假設這些句子在這裡。

加拿大的首都是渥太華,多倫多在加拿大,法國的首都是巴黎,加拿大的首都是悉尼和安大略省的首都是多倫多,所以在嵌入中,讓我們想象它們位於這裡,現在,記住密集檢索的工作方式是,它將查詢放入嵌入中。

然後返回最接近的響應,在這種情況下是安大略省的首都是多倫多,密集檢索看相似性,所以它返回與問題最相似的響應,這可能不是正確答案,這可能甚至不是真實的陳述,這只是一個恰巧接近問題的句子,因此。

密集檢索有潛力返回並非必然是答案的東西,我們如何修復這個問題,這就是排名的作用,現在,讓我為您展示一個小型的重新排名的例子,假設查詢是加拿大的首都是什麼,我們有十個可能的答案,如您所見,一些與問題相關。

一些則不相關,當我們使用密集檢索,它給我們返回前五,假設是五個最相似的查詢響應,並假設它們是這些,但我們不知道哪個是響應,我們只有有五個句子非常接近查詢,這就是重新排名的作用。

重新排名將為每個查詢響應對分配一個相關性得分,它告訴您答案的相關性與查詢的多少,它也可以是文件,所以文件與查詢的相關性是多少,如您所見,最高相關性在這裡是0。9,對應於加拿大的首都是渥太華。

這是正確答案,這就是重新排名的作用,您可能想知道排名是如何訓練的,嗯,重新排名的訓練方法是給它很多良好的對,這就是一個對,其中查詢和響應非常相關,或者當查詢和文件非常相關時。

並且訓練它給出那些高相關性的分數,然後也給它一個大量的錯誤查詢響應,所以查詢響應,其中響應不匹配查詢的,可能很接近,但可能不匹配,或者也是一個文件,一個可能不匹配查詢的文件。

如果你訓練一個模型來給好查詢響應對的高分數,和壞查詢響應對的低分數,那麼你就有重新排名的模型,它分配一個相關性,當您有一個查詢和一個響應時,相關性很高,因為它們非常相關。

現在,讓我們看更多的重新排名示例,讓我們用它來改進關鍵詞搜尋,所以我們將匯入我們在第一課中使用的關鍵詞搜尋函式,再次讓我們問它加拿大的首都是什麼,所以現在讓我們使用關鍵詞搜尋來找到這個查詢的答案。

我們將開始由輸出三個答案,它們並不好,早期現代時期和加拿大國旗。

為什麼它不工作那麼好,因為關鍵詞搜尋正在找到大量與查詢共有很多詞的文件,但關鍵詞搜尋無法真正告訴您是否回答了問題,所有這些文章都與查詢有很多詞共有,但它們不是答案,所以讓我們讓它大一點。

讓我們說實際上問它要五百個結果,我不會列印文字,只列印標題,所以這裡我們有五百個頂級結果,那太多了,我們如何找到,如果其中一個有答案,嗯,這就是重新排名的作用,這個函式在這裡重新排名列表,並輸出前十個。

現在讓我們叫答案,文字,讓我們應用它重新排名列表,其中我們輸入查詢,和結果,最後讓我們列印前十個,重新排名列表結果,注意,這實際上捕捉到了答案,它捕捉到了渥太華作為加拿大的首都,相關性得分非常高。

因為它非常接近一,它是0。988,注意,第二好的文章也非常好,因為它討論了加拿大歷史上有過的不同首都,這個的有一個相關性得分為0。97,正如你可以看到,第三個也相當好並重新排名。

實際上從關鍵詞搜尋表面挑選了前十個答案,那是相關性最高的,現在讓我們做最後一個例子,使用密集檢索,所以再次我將使用此密集檢索函式,讓我們給它一個稍微困難的問題,讓我們給它的問題歷史上最高的人是誰。

這將是關鍵詞搜尋的困難問題,因為它可能會表面包含歷史或人的詞彙的文章,它可能不會實際上抓住問題的含義,但我們希望緊張檢索能做得更好,所以我們將呼叫函式來獲取一些結果,現在讓我們列印出這些結果,注意。

這實際上得到了正確的答案,羅伯特·瓦德洛是斑點,這也選擇了其他文件,但我們仍然可以使用rerank來幫助我們出什麼事情,當我們重寫這些結果時,所以讓我們叫結果文字,現在讓我們叫排名為函式。

再次是檢查文字與給我們提供的查詢的相關性,以我們給它的查詢為參考,當我們列印答案時,那麼我們確實得到那個相關性最高的,0。97屬於羅伯特·瓦德洛,對於其他文章,它們給它了一些相關性,但不是很高。

rerank實際上幫助我們識別問題的正確答案,在密集檢索表面出現的文章之中,現在我建議你暫停這裡並實際上嘗試你自己的例子,所以製作你自己的查詢,找到搜尋結果,然後使用rerank來找到正確的答案。

現在我們有了所有這些搜尋系統,你可能在 wonder 如何評估它們,有許多方法可以評估它們,其中一些是平均準確率或map,平均反向排名或mrr和歸一化,折扣累積收益或ndcg。

那麼如何製作一個測試集來評估這些模型,嗯,一個好的測試集應該是包含查詢和正確響應的,然後您可以比較這些正確響應與模型給您的響應,以您將找到分類模型的準確性或精確度或召回率相同的方式。

如果您想要了解更多關於評估搜尋系統的資訊,我們將在資源中放置一些關於文章的連結,以便您更仔細地檢視,現在,你已經學會了如何使用搜尋和重新排序,以檢索包含特定問題的文件,在下一節課。

你將學習一些真的很酷的東西,你將學習如何將搜尋系統和生成模型結合在一起,以在句子模式中輸出查詢的答案。

LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P97:6.L5-generating answer.zh - 吳恩達大模型 - BV1gLeueWE5N

本課內容,將生成步驟加入搜尋管道的末尾。

這樣可得到答案而非搜尋結果。

例如,這是一種構建使用者可與文件或書籍聊天的應用的好方法,如本課所示,一篇文章,大型語言模型擅長許多事情,然而,需要它們提供幫助的用例,舉個例,假設你有一個問題,當你開始學習AI時,邊專案重要嗎?

你可以問大型語言模型,它們中的一些可能會給出有趣的答案,但真正有趣的是,如果你問專家或專家的寫作,例如,你可以問安德魯·恩格或顧問。

安德魯關於這個問題的寫作,像這樣,幸運的是,我們可以訪問安德魯的一些寫作,所以你可以深入學習,AI有一個名為《批次》的新聞通訊,你可以找到名為《如何在AI中建立職業生涯》的一系列文章,它包含多篇文章。

我們將使用本課程所學來搜尋,然後使用生成性大型語言模型從這篇文章中生成答案,讓我們視覺化並確切描述我們的意思。

你可以問大型語言模型一個問題,它們能回答許多問題,但有時我們想讓他們從特定文件或檔案中回答,這就是你可以在生成步驟之前新增搜尋元件以改進這些生成的原因,當你依賴大型語言模型的直接答案時。

你依賴於它儲存在內部的世界資訊,但你可以提供上下文,使用先前的搜尋步驟,例如,當你在提示中提供上下文以改善案例的生成時,當你希望將模型錨定到特定領域、文章或文件時,或我們的文字檔案,這也提高了事實生成。

因此,在許多情況下,當你想從模型中檢索事實時,並使用上下文增強它,像這樣,這提高了模型生成事實性的機率。

這兩個步驟的區別在於,不是僅僅向生成模型提問,並檢視它列印出的結果,我們可以首先將問題呈現給搜尋系統,就像我們在本課程早期構建的那樣,然後檢索其中的一些結果,將它們與問題一起放在提示中提供給生成模型。

除此之外,然後得到基於上下文的響應,我們將在下一個程式碼示例中檢視如何做到這一點,所以這是我們的問題。

讓我們為這個用例構建文字檔案。

我們只需開啟這些文章並複製文字,我們可以複製並貼上到該變數中,我們可以稱之為text,只需將它們全部放入其中,我們可以複製三個,所以這是第二篇文章,這裡有一個包含三篇文章文字的變數,你可以做更多。

並且它是,我認為可能在七或八部分,但我們可以用三個例子來做,你以前見過的熟悉程式碼,執行這裡設定環境,還有一些熟悉的程式碼,因此我們可以匯入cohere,因為接下來我們將嵌入此文字,將首先將其拆分為塊。

然後嵌入它,然後構建我們的語義搜尋索引,所以這是我們拆分的部分,讓我們看看text現在看起來像什麼,讓我們看看前三個示例,所以這是前三個塊,人工智慧的快速崛起導致人工智慧職位的快速崛起。

職業成長的三個初步步驟,所以這是三個段落,安德烈文章中的三個段落,我們可以繼續設定cohersdk並嵌入文字,所以我們現在正在將其傳送到嵌入並獲取嵌入,讓我們構建我們的文字檔案,我們進行一些匯入。

我們以前都見過所有這些,這是annoy,這是向量搜尋庫,Numpy pandas將不使用正規表示式,但處理文字時總是最好備有它們,所以相同的程式碼也在這裡執行,這是,我們只是將其轉換為numpy陣列。

所以這是我們得到的向量,所以這是嵌入,我們建立一個新的索引,一個向量索引,我們將向量插入其中,然後構建並儲存到檔案中,我們有向量搜尋,現在定義函式,命名為搜尋,安德魯的文章,給它查詢。

在此資料集上執行搜尋,為此,步驟與過去相同,嵌入查詢,對檔案進行向量搜尋,比較查詢與,文字中每段落的嵌入,然後返回結果,現在可問搜尋系統問題,類似這樣的副業,在構建AI職業時是好主意。

我想知道安德魯會怎麼說,這裡返回第一個結果,這是長段落,與問題最接近,如果你看這裡,發展副業,即使你有全職工作,有趣的專案可能變大,激發創造力,這是大文字中答案。

這是為什麼,可用大型語言模型回答。

給它這個,提取相關資訊,接下來做,不是搜尋,我們要定義新函式,問安德魯的文章,並給它問題,生成次數,這裡有幾件事,在做事前,我們會搜尋,獲取相關上下文,嗯,從文章中獲取最佳結果,這是設計選擇。

你想在提示中注入1個結果還是2或3個,我們使用1個,因為這是最簡單的,提示可以像這樣,來自安德魯·王關於如何構建AI職業文章的摘錄,這是提示工程技巧,提供越多上下文給模型,它越能更好地完成任務。

在此注入接收到的上下文,這是文章中的段落,然後提出問題,給出指令或命令給模型說,從提供的文字中提取答案,如果不在那裡,告訴我們不可用,然後我們說需要傳送給模型的預測,現在我們有提示,我們說co。

generate_prompt等於,提示最大標記,假設七十,其中一些傾向於較長模型,我們想使用稱為command nightly的模型,這是Cohere上更新最快的生成模型。

所以如果你使用command nightly,你使用的是平臺上可用的最新模型,這往往是比較實驗性的模型,但它們是最新的,通常也是最好的,嗯,我們可以在這裡停止,我們還沒有使用它們生成。

但我們可以稍後使用,然後我們會返回預測生成,這就是我們的程式碼現在,確切這個問題,讓我們在這裡提出,而不是這是一個搜尋練習,我們希望這是一個對話練習,由搜尋提供資訊,並向語言模型提出,嗯,如果我們執行它。

我們得到這個答案,是的,副專案是個好主意,當試圖在AI領域建立職業時,它們可以幫助你發展技能和知識,也可以是一個很好的方式與其他人士建立聯絡,但你應該小心不要與僱主產生衝突,並且你應該確保你沒有評估。

然後我們在這裡用完了標記,所以我們可以在這裡增加標記數,如果你想得到更長的答案,所以這是一個如何工作的快速演示,你可以試試,問它幾個問題,其中一些可能需要一點提示工程,但這是一個這些應用的總體概述。

有很多人正在用這些東西做有趣的事情,例如,向Lex Friedman播客提問,這確實實現了這個流程,因此,對整個播客的轉錄進行語義搜尋,有人也對Andrew Huberman的播客做了同樣的事情。

你看到的是,um,YouTube的轉錄,書籍的影片,這是人們使用大型語言模型構建的常見事物,它通常由這個驅動,兩步搜尋後生成,可加入重排以改進搜尋元件,請暫停嘗試,執行程式碼至此,更改問題。

或獲取感興趣的資料集,不必總是複製程式碼,僅快速示例,使用llama index和lang chain從pdf匯入文字,若要工業規模工作。

記住num generations引數,開發時的小技巧,測試模型行為時,每次呼叫API多次,可傳遞給程式碼生成的引數,num_generations=num_generations,提問時。

num_generations=3,無需列印,嗯,要列印多個,嗯,這裡發生的是,這個問題將給語言模型,語言模型將被要求同時給出三個不同的生成,不只是一個,所以它像批處理一樣執行它們。

然後我們可以說對於jin結果,列印gen十代,基本上列印,這僅為我們檢視,除錯模型行為時,希望快速看到,好的,模型回答問題或響應提示,嗯,多次,嗯,正確與否,無需繼續逐一執行,可看3至5次。

我認為你能透過這,這是模型的一代,這是一個生成,它們都是對同一提示的響應,這是你進行提示工程的一種方式,並獲得模型對提示行為的句子響應。

LangChain_微調ChatGPT提示詞_RAG模型應用_agent_生成式AI - P98:7.Conclusion.zh - 吳恩達大模型 - BV1gLeueWE5N

"這是一門關於大規模語義搜尋語言模型的課程結束",我們非常感謝您的關注,"我們希望你們喜歡學習這個主題",我們邀請您去cohere的llm大學檢視更多的廣泛課程。"在這個課程中。

你可以學習到關於lms的許多更多主題。","此外,你也可以加入協作組","一個由我自己和其他人組成的Discord社群,我們將非常樂意回答任何問題。",你可能有關於LMS的資訊。

我們也要感謝許多沒有他們,這個課程就無法實現的人,像我或者阿米爾·阿德里安,莫里斯薩,埃利奧特,崔,伊萬,尚,尼爾斯,韻人,帕特里克·劉易斯,塞巴斯蒂安,霍夫斯塔特,Sylvie。

她和偉大的人們以及深度學習AI。

相關文章