這是我現在正在進行的一個項目,我正在嘗試為生成式人工智慧訪談編制問題和答案清單。
我使用這個參考文獻作為基礎,感謝他們的編譯,但是,我在編輯問題和答案方面有很多自由,它們完全是我自己的。
注意:我試圖將自己寫的答案保持在最低限度,因為我絕不是或形成該主題的權威來源。我將盡我所能提供參考。我沒有添加任何形式的視覺輔助以提高可讀性並將維護的複雜性降至最低。我引用的資源和參考文獻包含大量信息,其中大部分帶有視覺效果。
我計劃將其擴展到一般的生成人工智慧,而不僅僅是語言,涵蓋從擴散模型到視覺語言模型的所有內容。一旦我確定了基本結構並且對初步結果感到滿意,我將致力於建立一種有效的方法來為這個存儲庫做出貢獻,然後我將開放它以供貢獻,但現在,我想保留它簡單而專注。
重要的:
我認為可能有必要澄清一下,我提供的答案,無論它們是我自己寫的還是我引用的來源,都不是以任何方式或形式確定的,我想做的是讓你開始在正確的道路上,並讓您大致了解會發生什麼,您絕對應該閱讀我提供的所有資源,然後是一些。如果您希望這是您的最後一站,那麼這裡不適合您。這就是事情的開始。
另外,如果您剛開始,我的唯一建議是:
舒適地閱讀論文,因為它們永遠不會結束。
關於如何閱讀論文的論文:如何閱讀論文
1. LLM和提示基礎知識
2. 檢索增強生成(RAG)
3. 分塊策略
4. 嵌入檢索模型
5.向量檢索、資料庫和索引
6. 進階搜尋演算法
7. 語言模型內部運作原理
讓我們考慮一個資料集,其中每個資料點代表一隻貓。讓我們將其傳遞給每種類型的模型,看看它們有何不同:
讓我們從頭開始建立大型語言模型 (LLM) 的定義:
延伸閱讀:普通爬行
大型語言模型通常分多個階段進行訓練,這些階段通常稱為預訓練、微調和對齊。
此階段的目的是以無監督的方式將模型暴露給所有語言,這通常是訓練中最昂貴的部分,並且需要大量計算。預訓練通常在 Common Crawl 資料集等資料上進行,資料集的處理版本(例如 FineWeb 和 RedPajama)通常用於預訓練。為了促進這種廣泛的學習,我們可以使用多種訓練任務,例如遮罩語言建模(MLM)、下一句預測(NSP)等。
掩碼語言建模基於完形填空測試,我們在句子中掩飾一個單詞,並要求模型對其進行預測。類似於填空測試。它與要求模型預測句子中的下一個單字不同,因為它要求模型理解句子的上下文,而不僅僅是單字的序列。
下一個句子預測是一項任務,模型被給予兩個句子,它必須預測第二個句子是否在第一個句子之後。聽起來很簡單,它要求模型理解第一個句子的上下文以及兩個句子之間的關係。
BERT 論文是了解更多有關這些任務的絕佳資源。
這個階段比預訓練簡單得多,因為模型已經學習了很多關於語言的知識,現在我們只需要教它特定的任務。此階段我們需要的只是輸入資料(提示)和標籤(回應)。
這個階段往往是最關鍵和最複雜的階段,它需要使用單獨的獎勵模型,使用不同的學習範式(例如強化學習)等等。
此階段的主要目的是使模型的預測與人類的偏好保持一致。這個階段常常與微調階段交織在一起。這一階段的必讀文章是 InstructGPT 論文,該論文介紹了使用近端策略優化的人類回饋強化學習(RLHF)的概念。
將模型的預測與人類偏好保持一致的其他方法包括:
標記是模型可以理解的最小文字單元,它們可以是單字、子字或字元。
分詞器負責將文字轉換為標記,它們可以像用空格分割文字一樣簡單,也可以像使用子詞分詞一樣複雜。分詞器的選擇會對模型的表現產生重大影響,因為它會影響模型理解文字上下文的能力。
一些常見的分詞器包括:
推薦閱讀(和觀看):
這是一個非常沉重的問題,但這裡有一些資源可以進一步探討這個主題:
參數包括:
可以調整每個參數以提高模型的性能以及生成文字的品質。
推薦閱讀:
解碼策略用於選擇序列中的下一個標記,它們的範圍可以從簡單的貪婪解碼到更複雜的取樣策略。
一些常見的解碼策略包括:
較新的解碼策略包括推測解碼(輔助解碼),這是一個瘋狂的概念,它涉及使用來自較小(因此更快)模型的候選標記來非常快速地從較大模型產生響應。
推薦閱讀:
在解碼過程中,LLM 一次自回歸產生一個標記的文字。有幾個停止標準可用於確定何時停止產生文字。一些常見的停止標準包括:
A prompt contains any of the following elements:
Instruction - a specific task or instruction you want the model to perform
Context - external information or additional context that can steer the model to better responses
Input Data - the input or question that we are interested to find a response for
Output Indicator - the type or format of the output.
參考:快速工程指南
推薦閱讀:
參考:快速工程指南
推薦閱讀:
情境學習是自然語言處理中非常直覺且易於理解的學習範式。它包含諸如小樣本學習之類的概念。它可以很簡單,只需提供一些您希望模型執行的任務的範例,模型將從這些範例中學習並相應地產生回應。
推薦閱讀:
事實證明,只有當模型縮放到一定大小並且模型接受不同任務集的訓練時,上下文學習才能出現。當模型無法執行複雜的推理任務時,情境學習可能會失敗。
推薦閱讀:
這是一個非常廣泛的問題,但以下內容將幫助您對如何為特定任務設計提示形成基本了解:
另外,較新的研究方向研究使用最佳化提示的演算法方式,這已在 DSPy 套件中進行了廣泛的探索,它提供了實現此目的的方法,他們的工作也發表在本文中。
這個問題沒有答案,我把它當作連結這個參考文獻的藉口:
有多種方法可以讓 LLM 產生每次都可解析的結構化輸出,常用方法取決於 LLM 中函數呼叫的概念。
推薦閱讀與觀看:
The term describes when LLMs produce text that is incorrect, makes no sense, or is unrelated to reality
參考: Nexla 的 LLM 幻覺 — 類型、原因和解決方案
推薦閱讀:
眾所周知,思維鏈提示的概念可以增強法學碩士的推理能力。該技術涉及將複雜的任務分解為一系列更簡單的任務,並向模型提供每個任務的中間輸出,以指導其實現最終輸出。
推薦閱讀:
檢索增強生成 (RAG) 是一種常見的設計模式,用於將 LLM 答案建立在事實基礎上。該技術涉及從知識庫檢索相關信息,並使用它來指導法學碩士生成文本。
推薦閱讀:
檢索增強生成 (RAG) 由兩個主要部分組成:
RAG 背後的直覺是,透過結合基於檢索和基於生成的模型的優勢,我們可以創建一個能夠生成基於事實的文本的系統,從而限制幻覺。
RAG 通常是回答基於知識庫的複雜問題的首選技術,因為它允許模型利用外部資訊來提供更準確、資訊更豐富的答案。在專有資料上微調模型並不總是可行,而 RAG 提供了一種無需微調即可合併外部知識的方法。
利用 RAG 回答基於知識庫的複雜問題的完整解決方案將涉及以下步驟:
這是一個非常沉重的問題,但這裡有一些資源可以進一步探討這個主題:
文字分塊是將大塊文字分解為更小、更易於管理的區塊的過程。在 RAG 系統的上下文中,分塊很重要,因為它允許檢索器組件有效地從知識庫中檢索相關資訊。透過將查詢分解為更小的區塊,檢索器可以專注於檢索與每個區塊相關的信息,這可以提高檢索過程的準確性和效率。
在嵌入模型(通常用作檢索器)的訓練過程中,使用正文本對和負文本對來指示哪些文本片段相互對應,示例包括維基百科頁面上的標題、標題和副標題及其相應的段落、reddit帖子及其投票最高的評論等。
通常嵌入使用者查詢並查詢索引,如果索引中包含要查詢前 k 個命中的整個文檔,則檢索器將無法返回最相關的信息,因為要查詢的文檔太大而無法理解。
總而言之,我們對文字進行分塊,因為:
假設我們有一本書,包含24章,總共240頁。這意味著每章包含 10 頁,每頁包含 3 個段落。假設每個段落包含 5 個句子,每個句子包含 10 個單字。總共有:每章 10 * 5 * 3 * 10 = 1500 字。整本書我們還有1500 * 24 = 36000字。為了簡單起見,我們的分詞器是一個空白分詞器,每個單字都是一個標記。
我們知道,我們最多有一個能夠嵌入 8192 個 token 的嵌入模型:
所有這些都是為了說明,沒有固定的方法來對文字進行分塊,對文字進行分塊的最佳方法是進行實驗,看看哪種方法最適合您的用例。
關於這個主題的權威來源是 Greg Kamradt 的優秀筆記本和隨附視頻,他們在其中解釋了不同級別的文本分割。
這本筆記本還介紹了評估和視覺化不同層級的文字分割的方法,以及如何在檢索系統中使用它們。
推薦觀看:
向量嵌入是將文本語義映射到 N 維空間,其中向量表示文本,在向量空間內,相似的文本由相似的向量表示。
推薦閱讀:
嵌入模型是為了向量化文本而訓練的語言模型,它們通常是 BERT 衍生品,並在大型文本語料庫上進行訓練以學習文本的語義,但最近的趨勢也表明可以使用更大的語言模型為此目的,例如Mistral 或Llama。
推薦閱讀與觀看:
嵌入模型通常用作檢索器,為了利用其檢索功能,使用語義文本相似性,其中使用點積、餘弦相似性等指標來測量模型產生的向量的相似性。
推薦閱讀:
嵌入模型使用對比損失進行訓練,從簡單的對比損失到更複雜的損失函數,例如 InfoNCE 和 Multiple Negative Ranking Loss。訓練期間也使用了一種稱為「硬負挖掘」的過程。
推薦閱讀:
對比學習是一種用於訓練嵌入模型的技術,它涉及學習區分正負文本對。該模型經過訓練以最大化正對之間的相似度並最小化負對之間的相似度。
推薦閱讀:
交叉編碼器和雙編碼器是用於文字檢索任務的兩種模型。兩者之間的主要區別在於它們如何對查詢和文件進行編碼。
重排序器通常是交叉編碼器,它們將查詢和文件一起編碼,並計算兩者之間的相似度。這使它們能夠捕獲查詢和文件之間的交互,並以更高的計算複雜度為代價產生比雙編碼器更好的結果。
文字嵌入模型通常是雙編碼器,它們分別對查詢和文件進行編碼,並計算兩個嵌入之間的相似度。這使得它們比交叉編碼器具有更高的計算效率,但它們無法捕獲查詢和文件之間的明確互動。
單向量密集表示通常是文字嵌入模型中的標準,它們通常是透過在模型前向傳遞後池化上下文嵌入來產生的,池化技術包括平均值池化、最大池化和 CLS 令牌池化。單向量密集表示背後的直覺是它們易於實現,可用於廣泛的任務,並且易於索引和檢索。密集表示也能夠捕獲文字的語義,並且經常用於第二階段排名。
多向量密集表示已被證明可以產生比單向量密集表示更好的結果,它們是透過跳過池化步驟並使用矩陣形式的上下文嵌入來產生的,然後使用查詢和文件嵌入來計算查詢和文件嵌入之間的相似度第二,ColBERT 等模型已證明可以產生優於單向量密集表示的結果。 MaxSim 等運算子用於計算查詢和文件嵌入之間的相似度。多向量密集表示背後的直覺是,它們能夠捕獲更多有關文本的信息,並產生比單向量密集表示更好的結果,ColBERT 等模型還提供預先計算文檔嵌入的能力,從而實現非常高效的檢索。密集表示也能夠捕獲文字的語義,並且經常用於第二階段排名。
推薦閱讀:
稀疏文字表示是資訊檢索中最古老的向量空間模型形式,它們通常基於 TF-IDF 導數和 BM25 等演算法,並且仍然是文字檢索系統的基線。它們的稀疏性源自於嵌入的維度通常與詞彙量的大小相對應。稀疏表示背後的直覺是它們是可解釋的、計算效率高、易於實現並且對於索引和檢索極其高效。稀疏表示也注重詞彙相似性,常用於第一階段排名。
推薦閱讀:
稀疏文字嵌入允許在檢索期間使用倒排索引。
推薦閱讀:
用於對嵌入模型的性能進行基準測試的指標包括:
推薦閱讀與觀看:
選擇嵌入模型可能是檢索系統效能的關鍵因素,選擇時應仔細考慮。這是一個涉及實驗的廣泛過程,以下資源將幫助您做出明智的決定:
推薦觀看:
向量資料庫是針對儲存和查詢向量資料進行最佳化的資料庫。它允許有效儲存和檢索向量嵌入,並且通常用於需要語義相似性搜尋的應用程式。向量資料庫是一種新範式,作為滿足 GenAI 應用需求所需的技術堆疊的一部分而出現。
推薦觀看:
傳統資料庫針對儲存和查詢結構化資料(例如文字、數字和日期)進行了最佳化。它們並不是為有效處理向量資料而設計的。另一方面,向量資料庫是專門為儲存和查詢向量資料而設計的。他們使用專門的索引技術和演算法來實現快速且準確的相似性搜索,例如向量的量化和聚類。
向量資料庫通常包含向量的索引,這些索引包含向量嵌入的矩陣,通常也使用圖資料結構,以可以有效查詢的方式排序。進行查詢時,提供文字或向量嵌入作為輸入,在文字的情況下,它被嵌入,並且向量資料庫將查詢適當的索引以基於距離度量檢索最相似的向量。通常,使用餘弦相似度、點積或歐幾里德距離等指標來比較向量。向量還涉及元資料字典,其中可能包含文檔 ID、文檔標題、相應文字等資訊。
向量資料庫中的搜尋策略包括:
推薦閱讀:
一旦向量被索引,它們通常會被聚集以減少搜尋空間,這樣做是為了減少搜尋過程中需要比較的向量的數量。聚類是透過將相似的向量分組在一起,然後對聚類進行索引來完成的。進行查詢時,首先在簇層級執行搜索,然後在簇內的向量層級執行搜尋。 K-means 等演算法經常用於聚類。
推薦閱讀:
這顯然是一個非常沉重的問題,但這裡有一些資源可以進一步探討這個主題:
Vector quantization, also called "block quantization" or "pattern matching quantization" is often used in lossy data compression. It works by encoding values from a multidimensional vector space into a finite set of values from a discrete subspace of lower dimension.
參考:向量量化
One general approach to LSH is to “hash” items several times, in such a way that similar items are more likely to be hashed to the same bucket than dissimilar items are.
參考:海量資料集挖掘,第3版,第3章,第3.4.1節
推薦閱讀:
In short, PQ is the process of:
- Taking a big, high-dimensional vector,
- Splitting it into equally sized chunks — our subvectors,
- Assigning each of these subvectors to its nearest centroid (also called reproduction/reconstruction values),
- Replacing these centroid values with unique IDs — each ID represents a centroid
參考:乘積量化
推薦閱讀:
The Inverted File Index (IVF) index consists of search scope reduction through clustering.
參考:倒排檔索引
推薦閱讀:
分層可導航小世界 (HNSW) 通常被認為是向量檢索中最先進的技術,它是一種基於圖的演算法,可建立向量圖,並使用它來執行近似最近鄰搜尋。
推薦閱讀:
向量檢索中使用的距離和相似度量包括:
推薦觀看:
這是一個非常活躍的研究主題,不存在權威來源,但這裡有一些資源可以進一步探討這個主題:
另外值得注意的是,搜尋、檢索和重新排名系統是建立在資訊檢索、推薦系統和搜尋引擎領域已建立的模式和架構之上的。
您可能想要探索的一些系統架構包括:
在大型系統中實現良好的搜尋需要結合有效的索引、檢索和排名技術。在大型系統中實現良好搜尋的一些策略包括:
您可能會注意到,整個過程是分階段完成的,複雜性不斷增加,稱為分階段排名或多階段檢索。
推薦閱讀:
但在大型系統中實現良好搜尋的最重要方面是試驗和迭代您的檢索和排名策略,並持續監控和評估系統的效能。
推薦閱讀:
關於改進搜尋、檢索和 RAG 系統的建議演講:
實現快速搜尋涉及優化索引和檢索過程,這需要不平凡的工程工作,以下是當前搜尋和檢索優化領域的一些範例:
目前向量檢索的最新技術表明多向量嵌入(後期交互)比單向量嵌入表現更好,然而,優化它們的檢索提出了重大的工程挑戰,下面深入討論多向量嵌入及其檢索:
BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms appearing in each document, regardless of their proximity within the document.
參考:BM25
重新排序模型是經過訓練以獲得一對查詢和文件並輸出原始相似度分數的序列分類模型。
推薦閱讀、觀看和觀看:
評估 RAG 系統需要試驗和評估系統的各個組件,例如擷取器、生成器和重新排序器。
推薦閱讀:
注意:從這裡開始,我將盡可能避免回答,只是連結論文和參考文獻,這部分可以說是更複雜的部分之一,所以它需要大量的閱讀和理解。
要理解注意力,您需要熟悉 Transformer 架構及其前身架構。以下是一些可幫助您入門的資源:
自註意力的主要瓶頸是其相對於序列長度的二次複雜度。要了解自我注意力的缺點,您需要熟悉注意力的替代方案,以下內容將幫助您入門:
LLM 中對位置資訊進行編碼的方法有多種,最常見的方法是使用正弦位置編碼,稱為絕對位置編碼。其他方法包括相對位置編碼和更新的方法,例如旋轉位置嵌入。以下是一些可幫助您入門的資源:
要了解 KV Cache,您需要熟悉 Transformer 架構及其限制。
推薦閱讀:
專家混合是法學碩士的一種架構,要了解其工作原理,您應該瀏覽以下資源,其中涵蓋了最著名的教育部模型: