免費建站網(wǎng)站網(wǎng)站開發(fā)需要的技術
一.?embedding
????????簡單來說,embedding就是用一個低維的向量表示一個物體,可以是一個詞,或是一個商品,或是一個電影等等。這個embedding向量的性質(zhì)是能使距離相近的向量對應的物體有相近的含義,比如 Embedding(復仇者聯(lián)盟)和Embedding(鋼鐵俠)之間的距離就會很接近,但 Embedding(復仇者聯(lián)盟)和Embedding(亂世佳人)的距離就會遠一些?! ?br /> ????????除此之外Embedding甚至還具有數(shù)學運算的關系,比如Embedding(馬德里)-Embedding(西班牙)+Embedding(法國)≈Embedding(巴黎)
從另外一個空間表達物體,甚至揭示了物體間的潛在關系,上次體會這樣神奇的操作還是在學習傅里葉變換的時候,從某種意義上來說,Embedding方法甚至具備了一些本體論的哲學意義。
Embedding在大模型中的價值
前面說的其實都是Embedding在之前的價值。但是,大語言模型時代,例如ChatGPT這樣的模型流行之后,大家發(fā)現(xiàn)embedding有了新的價值,即解決大模型的輸入限制。
此前,OpenAI官方也發(fā)布了一個案例,即如何使用embedding來解決長文本輸入問題,我們DataLearner官方博客也介紹了這個教程:OpenAI官方教程:如何使用基于embeddings檢索來解決GPT無法處理長文本和最新數(shù)據(jù)的問題 | 數(shù)據(jù)學習者官方網(wǎng)站(Datalearner)
像 GPT-3 這樣的語言模型有一個限制,即它們可以處理的輸入文本量有限。這個限制通常在幾千到數(shù)萬個tokens之間,具體取決于模型架構和可用的硬件資源。
這意味著對于更長的文本,例如整本書或長文章,可能無法一次將所有文本輸入到語言模型中。在這種情況下,文本必須被分成較小的塊或“片段”,可以由語言模型單獨處理。但是,這種分段可能會導致輸出的上下文連貫性和整體連貫性問題,從而降低生成文本的質(zhì)量。
這就是Embedding的重要性所在。通過將單詞和短語表示為高維向量,Embedding允許語言模型以緊湊高效的方式編碼輸入文本的上下文信息。然后,模型可以使用這些上下文信息來生成更連貫和上下文適當?shù)妮敵鑫谋?#xff0c;即使輸入文本被分成多個片段。
此外,可以在大量文本數(shù)據(jù)上預訓練Embedding,然后在小型數(shù)據(jù)集上進行微調(diào),這有助于提高語言模型在各種自然語言處理應用程序中的準確性和效率。
如何基于Embedding讓大模型解決長文本(如PDF)的輸入問題?
這里我們給一個案例來說明如何用Embedding來讓ChatGPT回答超長文本中的問題。
如前所述,大多數(shù)大語言模型都無法處理過長的文本。除非是GPT-4-32K,否則大多數(shù)模型如ChatGPT的輸入都很有限。假設此時你有一個很長的PDF,那么,你該如何讓大模型“讀懂”這個PDF呢?
首先,你可以基于這個PDF來創(chuàng)建向量embedding,并在數(shù)據(jù)庫中存儲(當前已經(jīng)有一些很不錯的向量數(shù)據(jù)庫了,如Pinecone)。
接下來,假設你想問個問題“這個文檔中關于xxx是如何討論的?”。那么,此時你有2個向量embedding了,一個是你的問題embedding,一個是之前PDF的embedding。此時,你應該基于你的問題embedding,去向量數(shù)據(jù)庫中搜索PDF中與問題embedding最相似的embedding。然后,把你的問題embedding和檢索的得到的最相似的embedding一起給ChatGPT,然后讓ChatGPT來回答。
當然,你也可以針對問題和檢索得到的embedding做一些提示工程,來優(yōu)化ChatGPT的回答。
二、大模型
機器學習基礎
深度學習
通過構建和訓練深層神經(jīng)網(wǎng)絡來學習和提取數(shù)據(jù)中的特征,從而實現(xiàn)高度自動化和準確性能的模型訓練和預測。
深度學習和大模型:?大模型技術通常與深度學習相結合,因為深度學習網(wǎng)絡通常具有大量的參數(shù)和復雜的結構。大模型技術通過增加模型的規(guī)模和容量,例如增加網(wǎng)絡層數(shù)、神經(jīng)元的數(shù)量或卷積核的大小,以增強模型的表達能力和學習性能。大模型技術還包括優(yōu)化算法和訓練策略,以有效地訓練和優(yōu)化這些龐大的深度學習模型。
大模型概念
-
預訓練是指在大規(guī)模的未標記數(shù)據(jù)上進行的初始化模型訓練階段。模型通過對大量的文本數(shù)據(jù)進行自監(jiān)督學習,學習到語言的各種結構和表達方式。預訓練的目標是讓模型能夠在下游任務中具有更好的理解和表達能力。預訓練通常是通過自編碼器或掩碼語言建模的方式進行,其中模型要根據(jù)上下文預測缺失的詞或片段。
-
微調(diào):
微調(diào)是在預訓練完成后,將預訓練模型應用于特定任務并進行有監(jiān)督的訓練的過程。在微調(diào)階段,模型使用標記的訓練數(shù)據(jù)進行進一步的訓練,以適應特定任務的要求。微調(diào)以較低的學習率進行,以避免過度調(diào)整預訓練模型的參數(shù),從而保留預訓練模型所學到的知識。通常,微調(diào)的數(shù)據(jù)集規(guī)模相對較小,因此可以使用更少的計算資源和時間來完成。 -
語料:
語料是指用于模型訓練的文本數(shù)據(jù)集。對于預訓練大模型來說,用于預訓練的語料庫通常是非常龐大的,例如大規(guī)模的網(wǎng)頁文本、維基百科、書籍、新聞等。預訓練模型需要處理大量的語料來學習普遍的語言知識。對于微調(diào)階段,語料可以是特定任務的標記訓練集。
預訓練、微調(diào)和語料是在大型NLP模型中實現(xiàn)強大性能的重要因素。通過預訓練技術,模型可以從大量無監(jiān)督的數(shù)據(jù)中學習語言特征,從而提高模型的泛化能力。通過微調(diào)過程,模型可以將預訓練知識轉移到特定任務中,并根據(jù)特定任務的訓練數(shù)據(jù)進行細化調(diào)整。同時,使用多樣化且廣泛的語料庫可以提高模型對不同領域和上下文的理解能力。
需要注意的是,預訓練和微調(diào)的過程是基于大量的計算資源和大規(guī)模的數(shù)據(jù)集進行的。這也導致了建立和訓練大型模型的門檻相對較高,并且模型可能帶來較大的計算和存儲要求。
三、LangChain
參考:什么是LangChain - 知乎
LangChain是一個開源框架,允許從事人工智能的開發(fā)者將例如GPT-4的大語言模型與外部計算和數(shù)據(jù)來源結合起來。該框架目前以Python或JavaScript包的形式提供。
假設,你想從你自己的數(shù)據(jù)、文件中具體了解一些情況(可以是一本書、一個pdf文件、一個包含專有信息的數(shù)據(jù)庫)。LangChain可以將GPT-4和這些外部數(shù)據(jù)連接起來,甚至可以讓LangChain幫助你采取你想采取的行動,例如發(fā)一封郵件。
三個重要概念:
- Components
-LLM Wrapper:包裝器,允許我們連接到大語言模型,例如GPT-4或HuggingFace的模型。
-Prompt Templates:提示模板,使我們不必對文本進行硬編碼,而文本是LLM的輸入。
-Indexes for relevant information retrieval:相關內(nèi)容的索引,允許我們?yōu)長LM提取相關信息。
- Chains
允許我們將多個組件組合在一起,以解決一個特定的任務,并建立一個完整的LLM應用程序。
- Agents
允許LLM與外部API互動。
二、 原理
將你的文件切成小塊,把這些小塊存儲在一個矢量數(shù)據(jù)庫中,這些塊被存儲為embedding,意味著它們是文本的矢量表示。
pipeline執(zhí)行流程:
>>一個用戶提出了初始問題。
>>然后,這個問題被發(fā)送到大語言模型,并將該問題的向量表示在向量數(shù)據(jù)庫中做相似性搜索。
>>獲取相關的信息塊,將其反饋給大語言模型。
>>大語言模型通過初始問題和來自矢量數(shù)據(jù)庫的相關信息,提供一個答案或采取一個行動。