在當今科技發展的浪潮中,生成式AI(Generative AI)已成為人工智慧領域最具革命性的突破之一。與傳統的判別式模型不同,生成式AI不僅能識別和分類別資料,更能創造全新的、看似原創的內容。本文將帶領讀者深入瞭解生成式AI的基礎概念、發展歷程,以及推動這一領域的核心技術。
生成式AI與判別式AI的根本區別
要理解生成式AI的獨特之處,我們必須先明確它與傳統判別式AI模型的區別:
判別式模型(Discriminative Models)專注於學習輸入資料與目標輸出之間的對映關係。這類別模型擅長分類別和預測任務,例如判斷一張圖片是貓還是狗,或預測股票價格的走勢。它們透過尋找資料中的決策邊界來對輸入進行分類別。
相比之下,生成式模型(Generative Models)則學習資料的內在分佈特性,目的是能夠生成與訓練資料相似的新資料。這些模型透過捕捉資料中的統計模式和特性,能夠創造出全新但看似真實的內容,如逼真的人臉影像、流暢的文字或自然的語音。
玄貓在研究這兩種模型時發現,生成式模型雖然也能用於分類別任務,但其分類別結果往往難以解釋,因為它們不是專門為學習決策邊界而設計的。當模型解釋性很重要時,判別式模型通常是更好的選擇。
生成式AI的核心技術
生成式AI的發展依賴於幾種關鍵技術的突破,這些技術各自具有獨特的優勢和適用場景:
生成對抗網路(GANs)
生成對抗網路由兩個相互競爭的神經網路組成:生成器(Generator)和判別器(Discriminator)。生成器負責創造看似真實的合成資料,而判別器則試圖區分真實資料和合成資料。
這種對抗關係使得生成器不斷改進其生成能力,最終能夠產生高度逼真的合成資料。GANs特別擅長於影像生成,能夠創造出令人驚嘆的逼真影像。
在實際應用中,我曾使用GANs為一個時尚設計專案生成創新的服裝設計概念。透過訓練模型學習現有設計的特徵,GANs能夠提出全新的設計靈感,大加速了創意過程。
變分自編碼器(VAEs)
變分自編碼器採用獨特的學習方法,將資料壓縮成更簡單的形式(潛在表示)。這個過程涉及一個編碼器和一個解碼器共同工作。
雖然VAEs在影像品質方面可能不是最佳選擇,但它們在有效分離和理解複雜資料模式方面表現出色。VAEs能夠學習資料的潛在空間表示,使其特別適合於生成具有特定屬性的新資料。
擴散模型(Diffusion Models)
擴散模型透過在多個步驟中不斷向資料增加高斯噪聲來破壞原始資料。高斯噪聲可以理解為應用於訊號的隨機變化,用於扭曲原始訊號,創造「噪聲」。
擴散模型訓練的目標是學習如何消除增加的噪聲,從而還原始資料分佈。這種逆向工程過程使擴散模型能夠生成多樣化、高品質的樣本,這些樣本能夠緊密複製原始資料分佈。
在我的一個研究專案中,擴散模型展現出驚人的能力,能夠從簡單的文字描述生成高度詳細的產品影像,這在電子商務領域有著巨大的應用潛力。
自迴歸Transformer
自迴歸Transformer利用可平行化的自注意力機制來模擬複雜的序列依賴關係,在語言相關任務中表現出色。預訓練模型如GPT-4或Claude已經展示了在自然語言任務中泛化的能力和令人印象深刻的類別人文字生成能力。
儘管存在倫理問題和濫用擔憂,Transformer已成為語言建模和多模態生成的領先者。這種架構的強大之處在於它能夠捕捉長距離依賴關係,並在不同上下文中理解語言的微妙之處。
澄清生成式AI的常見誤解
在探討生成式AI的應用之前,讓我們先澄清一些常見的誤解:
誤解1:生成式模型無法像判別式模型那樣有效地識別模式。
事實:最先進的生成式模型以其令人印象深刻的模式識別能力而聞名,在某些方面甚至可以與判別式模型相媲美。儘管主要專注於創意合成,生成式模型也展現出分類別能力。然而,生成式模型的分類別結果可能難以解釋,因為它們不是專門為學習決策邊界而設計的。
誤解2:生成式AI最終將取代判別式AI。
事實:這是一個常見的誤解。判別式模型一直是高風險預測任務的首選,因為它們直接專注於學習類別之間的決策邊界,確保高精確度和可靠性。更重要的是,判別式模型可以事後解釋,使它們成為醫療保健、金融和安全等關鍵應用領域的最佳選擇。
誤解3:生成式模型會不斷從使用者輸入中學習。
事實:並非如此。生成式大模型語言採用靜態訓練方法。這意味著它們從大量訓練資料語料函式庫中學習,而其知識僅限於該訓練視窗中包含的訊息。雖然模型可以透過額外資料或上下文訊息進行增強以幫助它們進行上下文化,從而給人一種實時學習的印象,但底層模型本質上是凍結的,不會實時學習。
生成式AI的演進歷程
生成式AI領域經歷了前所未有的加速發展,導致了基礎模型(如GPT系列)的興起和廣泛採用。然而,這一勢頭已經積累了數十年,由機器學習和自然語言生成研究的持續重大進展推動。這些發展使我們達到了當前一代最先進的模型。
自然語言處理的傳統方法
自然語言處理(NLP)技術使機器能夠理解、解釋和生成人類語言。它源於傳統的統計技術,如n-gram和隱馬爾可夫模型(HMMs),這些技術將語言結構轉換為機器可以理解的數學模型。
最初,n-gram和HMMs是NLP中使用的主要方法。N-gram根據最後的「n」個詞預測序列中的下一個詞,而HMMs透過將每個詞視為馬爾可夫過程中的一個狀態來建模序列。這些早期方法善於捕捉語言中的區域性模式和短距離依賴關係。
隨著計算能力和資料可用性的增長,更複雜的自然語言處理技術出現了。其中包括迴圈神經網路(RNN),它管理跨擴充套件序列的關係,並在先前上下文影響未來預測的任務中被證明是有效的。
隨後,長短期記憶網路(LSTMs)被開發出來。與傳統的RNN不同,LSTMs具有保留相關長期訊息同時忽略不相關資料的獨特能力,在延長序列中保持語義關係。
進一步的進展導致了序列到序列模型的引入,這些模型通常使用LSTMs作為其底層結構。這些模型透過顯著提高效率和有效性,徹底改變了機器翻譯和文字摘要等領域。
Transformer架構的出現與演進
2017年發表的研究論文《Attention is All You Need》標誌著自然語言處理領域的正規化轉變。這篇關鍵論文介紹了Transformer模型,這是一種架構創新,為翻譯等序列語言任務提供了前所未有的方法。
Transformer模型與之前的模型形成對比,後者序列處理序列。相反,它同時處理輸入序列的不同部分,根據任務確定其相關性。這種創新的處理方式解決了序列中長距離依賴關係的複雜性,使模型能夠提取任務所需的關鍵語義訊息。Transformer是如此關鍵的進步,幾乎每個最先進的生成式大模型語言都應用了原始架構的某種衍生版本。
隨著Transformer的出現,自然語言處理領域取得了重大進展,包括GPT-1(生成式預訓練Transformer 1)。GPT-1引入了一種新穎的定向架構來解決各種NLP任務。
與GPT-1同時出現的是BERT(來自Transformer的雙向編碼器表示),這是Transformer基礎模型家族中的開創性工作。BERT在其前輩中脫穎而出,正向和反向(或雙向)分析句子。這種雙向分析使BERT能夠更有效地捕捉語義和句法細微差別。當時,BERT在應用於命名實體識別、問答和情感分析等複雜自然語言任務時取得了前所未有的結果。
後來,GPT-2作為GPT-1的更大繼任者,引起了極大關注,因為它在各種任務中的表現大超過了其前輩。事實上,GPT-2在生成類別人輸出方面的能力前所未有,以至於對潛在影響的擔憂導致其最初發布被推遲。
在早期擔憂中,OpenAI跟進開發了GPT-3,標誌著大模型語言潛力的飛躍。開發人員展示了大規模訓練的潛力,達到1750億引數(或在訓練期間學習的可調整變數),超過了其兩個前輩。GPT-3是一個「通用」學習器,能夠執行各種自然語言任務,這些任務是從其訓練語料函式庫中隱式學習的,而不是透過特定任務的微調。這種能力引發了基礎模型開發的探索,用於跨各種領域和任務的通用使用。GPT-3的獨特設計和前所未有的規模導致了一代生成式模型,這些模型可以執行無限數量的日益複雜的下游任務,這些任務是透過其廣泛訓練隱式學習的。
GPT-4的發展與影響
OpenAI開發的GPT-4標誌著大規模多模態模型潛力的重大進步。GPT-4能夠處理影像和文字輸入並生成文字輸出,代表了比前輩又一次巨大的飛躍。
GPT-4在各種專業和學術基準測試中表現出人類水平的表現。例如,它透過了模擬律師資格考試,得分落入考生的前10%。
GPT-4的一個關鍵區別在於預訓練後發生的事情。OpenAI應用了人類反饋的強化學習(RLHF)——一種風險/獎勵訓練,源自用於教授自動駕駛車輛根據它們遇到的環境做出決策的相同技術。在GPT-4的情況下,模型學會了適當地回應無數場景,同時納入人類反饋。這種新穎的精煉策略大提高了模型對事實性的傾向及其對期望行為的遵守。RLHF的整合展示了模型如何能夠更好地與人類判斷保持一致,朝著負責任的AI的目標邁進。
然而,儘管展示了突破性的能力,GPT-4仍有類別似於早期GPT模型的侷限性。它不是完全可靠的,並且有限的上下文視窗(或輸入大小)。這意味著它不能接收大型文字或檔案作為輸入。它也容易產生幻覺。幻覺是一種擬人化的方式,描述模型傾向於生成不根據事實或現實的內容。幻覺發生是因為生成式語言模型(沒有增強)純粹根據語義上下文合成內容,而不執行任何邏輯處理來驗證事實性。這種弱點帶來了有意義的風險,特別是在以事實為基礎的結果至關重要的情況下。
生成式AI的應用
生成式AI已經開始在各個領域產生變革性影響,從增強語言相關任務到重塑數字藝術。以下是生成式AI在不同領域的實際應用範例:
當前應用領域
傳統自然語言處理:大模型語言,如OpenAI的GPT系列,已經提升了傳統的NLP和自然語言生成(NLG)。這些模型具有生成連貫、相關和類別人文字的獨特能力。當GPT-3在幾項語言任務中超越經典和現代方法時,這些模型的潛力得到了展示,顯示出對人類語言前所未有的理解。GPT-4和Claude 3的發布標誌著另一個里程碑,進一步提高了最先進模型的標準。
數字藝術創作:「生成式藝術」的出現證明瞭生成式AI在數字藝術領域的根本性影響。例如,藝術家可以使用AI生成模型建立複雜的設計,使他們能夠專注於藝術的概念方面。它簡化了過程,減少了對高水平技術專業知識的需求。
音樂創作:在音樂產業中,生成式AI可以增強作曲過程。幾個平台提供高品質的AI驅動音樂創作工具,可以生成結合不同音樂風格的長形式音樂作品,跨越各個時代和流派。
簡化業務流程:幾家企業已經開始採用生成式AI來實作更快、更高效的流程。生成式AI支援的營運效率使員工能夠專注於更具戰略性的任務。例如,完全整合的LLM電子郵件客戶端可以組織電子郵件,並(結合其他技術)學習隨著時間的推移優先處理關鍵電子郵件。
娛樂:雖然仍然主要是實驗性的,但LLM顯示出破壞創意寫作和講故事的潛力,特別是在遊戲產業。例如,程式化遊戲可以應用LLM來增強動態講故事並創造更吸引人、個人化的使用者經驗。隨著技術的進步,我們可能會看到LLM在遊戲中的更多主流採用,為互動敍事開闢新的可能性。
時尚:在時尚產業中,生成式模型幫助設計師創新。透過使用最先進的生成式AI模型,設計師可以透過簡單調整一些設定來建立和視覺化新的服裝風格。
建築和建設:在建築世界中,生成增強工具可以幫助建築師和城市規劃師最佳化和生成設計解決方案,導致更高效和可持續的建築設計。
食品產業:新興的AI驅動烹飪助手可以生成獨特的食物組合、新穎的食譜和針對高度特定飲食需求的修改食譜。
教育:生成式AI增強的教育平台提供自動建立學習輔助工具,可以促進個人化學習體驗,並可以自動生成量身定製的內容,以適應特定和多樣化的學習風格。
與挑戰
生成式AI的不懈進步預示著一個充滿新穎創新和應用的未來。想像一個未來,一個在世界領先氣候變化研究上訓練的生成式模型可以提供實用但突破性的對抗策略,並詳細説明它們的應用。
然而,當我們擁抱一個日益以AI為中心的未來時,我們不應忽視現有的挑戰。這些涉及AI工具的潛在濫用、不可預見的影響以及AI採用背後的深刻倫理考慮。此外,可持續和環保的發展是關鍵,因為訓練大規模型可能是資源密集型的。
在加速進步的時代,所有利益相關者之間的合作至關重要——從資料科學家、AI愛好者和政策制定者到行業長官者。透過配備全面的監督、強大的指導方針和戰略教育倡議,協調努力可以保障一個生成式AI無處不在的未來。
儘管這些障礙,生成式AI的變革潛力仍然不容置疑。憑藉其重塑行業、重新定義社會基礎設施以及改變我們生活、學習和工作方式的能力,生成式AI提醒我們,我們正在經歷一個關鍵時刻——一個由數十年的科學研究和計算巧妙推動的時刻,這些正在融合,推動我們作為一個社會向前發展。
生成式AI的型別與模式
在前面的章節中,我們探討了生成式AI的基礎概念與發展歷程。現在,讓我們更深入地瞭解生成式AI的不同型別和模式,特別是生成對抗網路(GANs)、擴散模型和Transformer這三種核心技術。
GANs的深入解析
GANs由Goodfellow等人於2014年提出,主要由兩個神經網路組成——生成器(G)和判別器(D)。G的目標是建立類別似於真實資料的合成資料,而D則努力區分真實資料和合成資料。
在這個設定中,發生以下情況:
- G從「潛在空間」接收輸入,這是一個表示結構化隨機性的高維空間。這種結構化隨機性作為生成合成資料的種子,將其轉化為有意義的訊息。
- D評估生成的資料,試圖區分真實(或參考)資料和合成資料。
簡而言之,該過程從G從潛在空間匯出隨機噪聲以建立資料開始。這些合成資料,連同真實資料,被提供給D,然後D嘗試區分兩者。來自D的反饋通知G的引數以改進其資料生成過程。對抗性互動繼續,直到達到平衡。
- GANs中的平衡發生在D不再能夠區分真實和合成資料時,為兩者分配相等的0.5機率。達到這種狀態表明G產生的合成資料與真實資料無法區分,這是合成過程的核心目標。
GANs的成功對各個行業產生了有意義的影響。在汽車行業,GANs被用於模擬自動駕駛車輛測試的真實世界場景。在娛樂行業,GANs被佈署用於為電影製作和遊戲設計生成數字角色和逼真環境。在藝術世界中,GANs可以創造出全新的作品。此外,GANs的發展多年來不斷前進,在品質、控制和整體效能方面有顯著改進。
GANs的進步
自誕生以來,GAN技術已經顯著發展,有幾個值得注意的進步:
條件GANs(cGANs):由Mirza和Osindero在2014年引入,條件GANs在資料生成過程中納入了特定條件,實作了更受控制的輸出。cGANs已被用於影像到影像轉換等任務(例如,將照片轉換為繪畫)。
深度卷積GANs(DCGANs):在2015年,Radford等人透過整合卷積層增強了GANs,這有助於在小的、重疊的區域分析影像資料以捕捉精細的粒度,大提高了合成輸出的視覺品質。DCGANs可以為時尚設計等應用生成逼真的影像,模型從現有趨勢中演化出新設計。
Wasserstein GANs(WGANs):由Arjovsky等人在2017年引入,Wasserstein GANs將Wasserstein距離度量應用於GANs的目標函式,促進了真實和合成資料之間差異的更準確測量。具體來説,該度量有助於找到使生成的資料分佈類別似於真實資料分佈的最有效方式。這個小調整導致了更穩定的學習過程,最小化了訓練期間的波動性。WGANs已幫助生成逼真的醫學影像,以幫助訓練診斷AI演算法,提高模型從合成到實際資料的泛化能力。
在我的研究中,我發現GANs的一個主要挑戰是訓練過程中的不穩定性。特別是在處理複雜資料集時,模式當機(mode collapse)問題常出現,導致生成器只能產生有限種類別的樣本。這促使研究者們開發出更穩定的生成模型,如擴散模型。
擴散模型的工作原理
擴散模型提供了一種與GANs不同的生成方法。它們透過一個前向擴散過程逐步向資料增加噪聲,然後透過一個學習的反向過程逐步去除噪聲,還原始資料。
擴散模型的基礎是建立在兩個主要過程上:
前向擴散過程:這個過程從乾淨資料(x₀)開始,迭代地引入高斯噪聲,類別似於逐漸應用霧狀濾鏡,將資料轉變為無法區分的噪聲(xₜ)。
學習的反向模型:在前向擴散之後,「反向模型」(pθ)嘗試從噪聲資料(xₜ)中消除(或去霧)噪聲,旨在還原到原始乾淨狀態(xₜ₋₁)。具體來説,這種還原是透過估計從噪聲狀態回到清晰狀態的轉換機率來協調的,使用條件分佈表示為pθ(xₜ₋₁|xₜ)。
在我的一個專案中,我使用擴散模型生成高品質的醫學影像,這些影像在訓練診斷演算法時非常有價值。擴散模型的漸進式去噪過程使其特別適合於需要高度控制和精確度的應用場景。
擴散模型的進步
自其誕生以來,擴散模型技術在影像生成能力方面見證了關鍵進步:
簡化的訓練目標:Ho等人提出了簡化的訓練目標,直接預測高斯噪聲,消除了對條件均值的需求,並促進了對更複雜資料集的應用。這一進步促進了處理更複雜的資料集,可能有助於異常檢測或複雜資料合成等任務,這些任務使用傳統模型可能是資源密集型的。
帶有自注意力的UNet模組:Ho等人還將帶有自注意力的UNet模組納入擴散模型架構,受Salimans等人(2017年)的PixelCNN++啟發,增強了模型在複雜資料集上的效能。再次,增強複雜資料集上的效能促進了更好的影像還原,這在醫學成像或衞星影像分析等領域特別有益,在這些領域高保真度影像重建至關重要。
與SDEs同步:Song等人將擴散模型定義為隨機微分方程(SDEs)的解,將分數學習與去噪分數比對損失聯絡起來,並擴充套件模型用於影像生成、編輯、修復和著色。
Transformer在生成式AI中的應用
Transformer架構是現代生成式語言模型的核心。它的自注意力機制使其能夠捕捉序列中的長距離依賴關係,這對於生成連貫與上下文相關的文字至關重要。
Transformer的核心元件包括:
自注意力機制:允許模型在處理每個詞時考慮整個序列中的所有其他詞,從而捕捉複雜的上下文關係。
多頭注意力:透過平行執行多個注意力機制,模型可以同時關注序列的不同方面,增強其理解能力。
位置編碼:由於Transformer不像RNN那樣按順序處理資料,位置編碼被增加到輸入中,以提供關於詞在序列中位置的訊息。
在我的實踐中,我發現Transformer特別擅長於理解和生成複雜的語言結構。例如,在一個自然語言生成專案中,Transformer能夠生成既符合語法又保持長距離語義一致性的文字,這是早期模型難以實作的。
Transformer的進步
Transformer架構自2017年提出以來,已經有了多種變體和改進:
BERT:利用雙向上下文理解來增強語言表示。
GPT系列:透過自迴歸方式生成文字,每次預測下一個詞。
T5:將所有NLP任務統一為文字到文字的轉換問題。
多模態Transformer:如DALL-E和CLIP,能夠處理文字和影像等多種模態的資料。
這些進步使Transformer成為了當今最強大的生成式AI架構之一,能夠應用於從文字生成到影像合成的各種任務。
自然語言處理的基礎與Transformer的影響
Transformer架構是現代生成式語言模型的關鍵突破,自2017年引入以來,它已成為自然語言處理(NLP)的基礎,顯著提升了文字生成能力。深入理解Transformer架構對於掌握現代大模型語言(LLMs)的機制至關重要。
NLP的早期方法
在神經網路廣泛應用於語言處理之前,NLP主要根據計數詞的方法。兩種特別值得注意的技術是計數向量和詞頻-逆檔案頻率(TF-IDF)。本質上,計數向量統計了每個詞在檔案中出現的頻率。在此基礎上,Dadgar等人在2016年將TF-IDF演算法(歷史上用於訊息檢索)應用於文字分類別。該方法根據詞在一個檔案中的重要性相對於其在檔案集合中的出現情況來分配權重。這些根據計數的方法在搜尋和分類別任務中取得了成功。然而,它們存在一個關鍵限制,即無法捕捉詞之間的語義關係,這意味著它們無法解釋上下文中詞的細微含義。這一挑戰為探索神經網路鋪平了道路,提供了一種更深入、更細微的方式來理解和表示文字。
神經語言模型的出現
2003年,蒙特利爾大學的Yoshua Bengio團隊引入了神經網路語言模型(NNLM),這是語言技術領域的一種新穎方法。NNLM旨在使用特定型別的神經網路根據先前的詞預測序列中的下一個詞。該設計突出特徵是學習詞嵌入的隱藏層,這些嵌入是捕捉詞核心語義含義的緊湊向量表示。這一方面在根據計數的方法中是缺失的。然而,NNLM在解釋較長序列和處理大型詞彙方面仍然有限。儘管有這些限制,NNLM引發了對語言建模中神經網路的廣泛探索。
NNLM的引入突顯了神經網路在語言處理中的潛力,特別是使用詞嵌入。然而,它在長序列和大型詞彙方面的限制表明需要進一步研究。
分散式表示
在NNLM誕生之後,NLP研究被推向了開發高品質詞向量表示的方向。這些表示可以最初從大量未標記的文字資料中學習,然後應用於各種任務的下游模型。這一時期見證了兩種突出方法的出現:Word2Vec(由Mikolov等人在2013年引入)和全域向量(GloVe,由Pennington等人在2014年引入)。這些方法應用分散式表示來開發高品質的詞向量表示。分散式表示將詞等專案不是作為唯一識別符號,而是作為連續值或向量的集合來描繪。在這些向量中,每個值對應於專案的特定特徵或特性。與傳統表示不同,傳統表示中每個專案都有一個唯一的符號,分散式表示允許這些專案與其他專案分享特徵,使其能夠更人工智慧地捕捉資料中的底層模式。
這些方法在建立有意義的向量表示方面的成功為NLP中的遷移學習鋪平了道路。這些向量提供了一個分享的語義基礎,促進了跨不同任務的學習關係的轉移。
迴圈神經網路與長短期記憶網路
儘管分散式詞向量在編碼區域性語義關係方面表現出色,但建模長距離依賴關係需要更複雜的網路架構。這導致了迴圈神經網路(RNNs)的使用。RNNs(最初由Elman在1990年引入)是一種神經網路架構,透過迭代序列的每個元素同時維持捕捉關於先前元素訊息的動態內部狀態來處理資料序列。與傳統的前饋網路不同,前饋網路獨立處理每個輸入,RNNs引入了迭代,允許訊息從序列中的一個步驟傳遞到下一個步驟,使它們能夠捕捉資料中的時間依賴性。RNNs中的迭代處理和動態更新使它們能夠學習和表示文字中的關係。這些網路可以捕捉跨句子甚至整個檔案的上下文連線和相互依賴性。
然而,標準RNNs在處理長序列時有技術限制。這導致了長短期記憶(LSTM)網路的發展。LSTMs最初由Hochreiter和Schmidhuber在1997年引入。它們是一類別特殊的RNNs,旨在解決消失梯度問題,這是一個挑戰,即隨著序列變長,網路無法從序列的早期部分學習。LSTMs應用了獨特的門控架構來控制網路內訊息的流動,使它們能夠在不受消失梯度問題影響的情況下維持和存取長序列的訊息。
LSTMs在許多語言建模和文字分類別基準上獲得了最先進的結果。由於它們能夠捕捉短距離和長距離的上下文關係,它們成為NLP任務的主導神經網路架構。
LSTMs的成功展示了神經架構在捕捉語言中固有的複雜關係方面的潛力,顯著推進了NLP領域。然而,對更高效和有效模型的持續追求引導社群探索其他神經網路架構。
卷積神經網路的興起
大約在2014年,NLP領域見證了卷積神經網路(CNNs)在解決NLP任務方面的流行度上升,這一顯著轉變由Yoon Kim長官。CNNs(最初由LeCun等人為影像識別提出)根據卷積層操作,這些層透過在輸入資料上移動過濾器(或核)來掃描輸入,在每個位置計算過濾器權重和輸入資料的點積。在NLP中,這些層在區域性n-gram視窗(n個詞的連續序列)上工作,以識別模式或特徵,如文字中特定的詞序或字元序列。
CNNs雖然高效,但在其卷積操作中有一個限制,它只處理來自較小或附近區域的區域性資料,從而錯過了整個輸入資料的更大部分之間的關係,稱為全域訊息。這導致了注意力增強的卷積網路的出現,它將自注意力與卷積結合起來解決這一限制。自注意力,最初用於序列和生成建模,被適應用於影像分類別等視覺任務,使網路能夠處理和捕捉整個輸入資料之間的關係。然而,注意力增強,結合卷積和自注意力,產生了最佳結果。這種方法保留了CNNs的計算效率並捕捉了全域訊息,標誌著影像分類別和物體檢測任務的進步。我們將在後面詳細討論自注意力,因為它成為了Transformer的關鍵元件。
CNNs處理資料多個部分的能力標誌著計算效率的顯著進步,為NLP中神經網路架構的進一步創新鋪平了道路。隨著領域的進步,注意力增強的神經網路的出現標誌著一個關鍵轉變,引入了一個新的正規化,即模型如何處理序列資料。
Transformer架構的出現
在2017年,受CNNs能力和注意力機制創新應用的啟發,Vaswani等人在開創性論文《Attention is All You Need》中引入了Transformer架構。原始Transformer應用了幾種新穎方法,特別強調了注意力的工具性影響。它採用了自注意力機制,允許輸入序列中的每個元素關注序列的不同部分,以結構化方式捕捉依賴關係,無論它們在序列中的位置如何。「自」在「自注意力」中指的是注意力機制如何應用於輸入序列本身,意味著序列中的每個元素都與其他每個元素進行比較,以確定其注意力分數。
Transformer的核心元件包括:
編碼器和解碼器堆積積堆積疊:Transformer由多層編碼器和解碼器組成,每層都包含自注意力機制和前饋神經網路。
自注意力機制:這允許模型在處理每個詞時考慮整個序列,從而捕捉長距離依賴關係。
多頭注意力:透過平行執行多個注意力機制,模型可以同時關注序列的不同方面。
位置編碼:由於Transformer不像RNN那樣按順序處理資料,位置編碼被增加到輸入中,以提供關於詞在序列中位置的訊息。
在我的研究中,我發現Transformer的平行處理能力是其最大的優勢之一。與RNNs不同,Transformer可以同時處理整個序列,大加速了訓練過程。這使得訓練更大的模型成為可能,這些模型可以捕捉更複雜的語言模式。
語言模型的演進與生成式AI
Transformer架構的引入標誌著NLP領域的一個轉折點,導致了一系列越來越強大的語言模型的發展:
2018 – BERT:Google的BERT模型透過在預訓練期間在其編碼器層中利用雙向上下文來創新Transformer架構。它是最早理解根據整個句子(左右兩側)的詞上下文的模型之一,顯著提高了各種NLP任務的效能,特別是那些需要深入理解上下文的任務。
2018 – GPT-1:OpenAI的GPT-1模型是NLP領域的一個里程碑,採用了具有Transformer的解碼器模型的生成式預訓練方法。它在多樣化的文字資料語料函式庫上進行了預訓練,並針對各種任務進行了微調,使用從左到右順序生成文字的單向方法,特別適合生成式文字應用。
2019 – GPT-2:GPT-2建立在GPT-1奠定的基礎上,保持其解碼器架構,但在資料集和模型大小方面顯著擴充套件。這使得GPT-2能夠生成更連貼和上下文相關的文字,跨越更廣泛的主題,展示了擴大Transformer模型規模的力量。
2020 – GPT-3:OpenAI的GPT-3將Transformer模型的規模推向了1750億引數的邊界,使得各種任務能夠以最少的輸入執行,通常是零樣本學習或少樣本學習。這表明Transformer可以跨任務和資料型別泛化,通常不需要大量的任務特定資料或微調。
2021 – InstructGPT:GPT-3的最佳化變體,InstructGPT專門針對遵循使用者指令和生成對齊的回應進行了微調,納入了強調安全性和相關性的反饋迴圈。這代表了建立能夠更準確解釋和回應人類提示的AI模型的重點。
2023 – GPT-4:GPT-4是OpenAI的Transformer模型向多模態空間的演進,能夠根據文字和影像理解和生成內容。該模型旨在產生更安全和更具上下文細微差別的回應,展示了模型處理複雜任務和生成創意內容的能力的顯著進步。
這些模型的發展軌跡展示了Transformer架構的可擴充套件性和適應性,使其成為現代生成式AI的根本。
自然語言生成的基礎與應用
自然語言生成(NLG)是自然語言處理的一個子領域,專注於使電腦系統能夠產生人類可理解的自然語言輸出。NLG系統將結構化資料轉換為流暢、連貼的文字,模仿人類的寫作風格和語言使用。
NLG的基本元件
NLG系統通常包括以下核心元件:
內容確定:決定要傳達什麼訊息。這涉及從可用資料中選擇相關訊息,並確定訊息的呈現順序。
檔案規劃:組織選定的內容成一個連貼的結構。這包括決定段落的劃分、主題的順序,以及訊息如何流動。
聚合:將相關訊息組合成更緊湊的表達。例如,將「約翰喜歡蘋果。約翰喜歡香蕉。」聚合為「約翰喜歡蘋果和香蕉。」
詞彙選擇:為概念選擇適當的詞彙。這涉及選擇最能傳達預期含義的詞,同時考慮風格、語域和目標受眾。
指代表達:決定何時使用代詞或其他指代表達。例如,用「他」或「她」代替重複使用人名。
實作:將所有這些決定轉化為實際的文字輸出,確保語法正確性和流暢性。
在我的NLG專案中,我發現內容確定和詞彙選擇是最具挑戰性的方面。特別是在處理技術內容時,選擇既準確又易於理解的詞彙需要仔細平衡專業術語和可存取性。
根據規則的NLG與神經NLG
NLG系統可以分為兩大類別:根據規則的系統和根據神經網路的系統。
根據規則的NLG:
- 使用預定義的範本和規則來生成文字
- 高度可控和可預測
- 適用於結構化和重複性強的內容
- 缺乏靈活性和創造性
神經NLG:
- 使用神經網路模型(如RNNs、LSTMs和Transformers)來生成文字
- 能夠學習複雜的語言模式和風格
- 生成更自然、多樣化的文字
- 可能缺乏可控性和一致性
在實踐中,我發現混合方法通常效果最佳。例如,在一個產品描述生成專案中,我使用根據規則的系統來確保關鍵產品訊息的包含,同時使用神經模型來增強描述的創意性和吸引力。
預訓練生成模型的應用
預訓練的生成模型,如GPT系列,已經徹底改變了NLG領域。這些模型在大量文字上進行預訓練,然後可以針對特定任務進行微調或直接用於生成高品質文字。以下是一些應用範例:
內容創作:生成文章、部落格文章、產品描述和創意寫作。
對話系統:為聊天機器人和虛擬助手生成自然、上下文相關的回應。
摘要生成:建立長文字的簡潔摘要,保留關鍵訊息。
程式碼生成:根據自然語言描述生成程式碼片段。
翻譯:將文字從一種語言翻譯成另一種語言,保持原意和風格。
在我的工作中,我發現這些預訓練模型特別擅長於理解上下文和生成連貼的長文字。例如,在一個客戶服務專案中,預訓練模型能夠生成既解決客戶問題又保持品牌語調的回應,這是根據規則的系統難以實作的。
NLG的挑戰與考慮因素
儘管NLG取得了顯著進展,但仍然面臨一些挑戰:
幻覺:生成模型可能會產生看似合理但實際上不準確或虛構的內容。
偏見:模型可能會反映或放大訓練資料中的偏見。
控制性:在保持文字自然流暢的同時控制生成內容的特定方面仍然具有挑戰性。
評估:評估生成文字的品質是主觀的,缺乏標準化的度量。
計算資源:大型生成模型需要大量計算資源進行訓練和推理。
在處理這些挑戰時,我發現實施強大的人類審查流程和使用多種評估指標的組合是至關重要的。例如,在一個新聞摘要專案中,我們結合了自動度量(如ROUGE和BLEU)和人類評估,以全面評估生成摘要的品質。
未來趨勢
NLG領域正在快速發展,一些令人興奮的趨勢包括:
多模態生成:結合文字、影像和音訊的生成模型,創造更豐富的內容。
可控生成:開發更精細的控制機制,允許使用者指定生成文字的各個方面。
效率改進:建立更小、更高效的模型,減少計算需求同時保持高品質輸出。
領域特定模型:為特定領域(如醫療、法律或技術)微調的模型,提供更準確和相關的內容。
倫理考慮:增加對生成模型中偏見、公平性和透明度的關注。
在我看來,NLG的未來將越來越多地關注負責任和可控的生成,確保生成的內容不僅高品質,而與準確、公平和符合倫理。
生成式AI和自然語言生成已經從學術研究領域轉變為改變我們與技術互動方式的實用工具。隨著這些技術的繼續發展,它們將為創新應用和解決方案開闢新的可能性,同時也帶來需要謹慎導航的新挑戰。
生成式AI的發展正處於一個令人興奮的階段,我們只是開始探索其潛力。透過理解這些技術的基礎和演進,我們可以更好地利用它們來創造有意義的應用,同時應對它們帶來的挑戰。
使用CLIP模型評估產品描述與圖片的對齊度
在生成式AI應用中,評估文字與影像的對齊程度是確保高品質輸出的關鍵步驟。本文將探討如何使用CLIP模型來評估產品描述與相應圖片的比對度,並分析不同模型在產品描述生成任務中的表現差異。
CLIP模型評分機制實作
CLIP (Contrastive Language-Image Pretraining) 模型能夠計算文字與影像之間的相似度,這使其成為評估產品描述與圖片比對程度的理想工具。以下是實作CLIP評分的核心函式:
def clip_scores(images, descriptions, model="openai/clip-vit-base-patch32", processor=clip_processor):
scores = []
# 批次處理所有圖片和描述
inputs = process_inputs(processor, descriptions, images)
# 取得模型輸出
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image # 影像到文字的邏輯分數
# 矩陣對角線給出每對影像-描述的分數
for i in range(logits_per_image.size(0)):
score = logits_per_image[i, i].item()
scores.append(score)
return scores
這個函式接收影像和描述列表,然後計算每對影像-描述的對齊分數。關鍵步驟包括:
- 使用處理器將影像和描述轉換為模型可接受的格式
- 將處理後的輸入傳遞給CLIP模型
- 取得每個影像-描述對的邏輯分數
- 從邏輯分數矩陣的對角線提取每對的分數值
這種評分機制能夠量化描述與影像的語義比對程度,為產品描述的品質評估提供客觀指標。
比較生成描述與參考描述
在實際應用中,我們需要比較AI生成的描述與人工撰寫的參考描述在影像對齊方面的表現:
reference_images = [
load_image_from_path(image_path)
for image_path in reference_data.product_image_path
]
gpt3_generated_scores = clip_scores(
reference_images, gpt3_descriptions
)
reference_scores = clip_scores(
reference_images, reference_descriptions
)
# 比較分數
for i, (gen_score, ref_score) in enumerate(zip(gpt3_generated_scores, reference_scores)):
print(f"影像 {i}: 生成描述分數 = {gen_score:.2f}, 參考描述分數 = {ref_score:.2f}")
這段程式碼執行以下操作:
- 載入參考產品影像
- 計算GPT-3生成描述與影像的CLIP分數
- 計算人工參考描述與影像的CLIP分數
- 並排比較每個影像的生成描述和參考描述分數
CLIP分數的解讀很重要:它們表示特定描述與影像的對齊程度相對於批次中其他描述的優勢百分比。例如,33.79的分數表示該描述比批次中其他描述更好地與影像對齊33.79%。
多維度評估模型表現
為了全面評估生成模型的表現,我們需要從多個維度進行分析:
詞彙相似度評估
詞彙相似度指標衡量生成描述與參考描述在用詞和關鍵字方面的相似程度:
模型 | BLEU | ROUGE | METEOR |
---|---|---|---|
GPT-3.5 | 0.147 | 0.094 | 0.261 |
GPT-Neo | 0.132 | 0.05 | 0.059 |
這些指標各有側重:
- BLEU評估短語比對的精確度
- ROUGE關注內容的召回率
- METEOR結合精確度和召回率,並考慮同義詞比對
從資料可見,GPT-3.5在所有詞彙相似度指標上都優於GPT-Neo,特別是在METEOR分數上差距顯著,表明GPT-3.5生成的描述在詞彙選擇和內容覆寫方面更接近人工標準。
語義相似度評估
語義相似度測量生成文字與參考文字在含義上的接近程度,超越了簡單的詞對詞比對:
模型 | 平均餘弦相似度 |
---|---|
GPT-3.5 | 0.8192 |
GPT-Neo | 0.2289 |
這裡的差距更為明顯。GPT-3.5展示了與參考文字的高度語義一致性,而GPT-Neo的顯著較低分數表明其生成的描述在語義上與人類撰寫的描述有根本性差異。
CLIP分數比較
CLIP分數告訴我們生成的描述在視覺上與相應影像的比對程度:
模型 | 平均CLIP分數 | 參考差異 |
---|---|---|
GPT-3.5 | 26.195 | 2.815 |
GPT-Neo | 22.647 | 6.363 |
GPT-3.5再次展現優勢,其CLIP分數更接近參考描述的分數,表明其生成的描述不僅在文字上連貫,而與在視覺上更準確地描述了產品影像。
模型選擇的權衡考量
雖然GPT-3.5在所有量化指標上都明顯優於GPT-Neo,但選擇模型時還需考慮其他因素:
- 成本效益:GPT-3.5通常成本更高,延遲更長
- 可擴充套件性:隨著使用量增加,按需成本可能顯著上升
- 品質與資源效率的平衡:需要評估更高品質是否值得額外成本
在這種情況下,StyleSprint團隊需要進行定性分析,確定GPT-Neo的描述是否符合品牌和期望,從而判斷使用更好模型的成本是否合理。
負責任的AI考量因素
在佈署生成式AI系統時,必須考慮以下負責任AI因素:
偏見識別與緩解
即使是簡單的產品描述也可能無意中強化刻板印象或排除特定群體。例如,將特定體型或膚色與特定產品關聯,或不必要地使用性別化語言。緩解策略包括:
- 專業環境檢查:建立支援性環境,實施舉報人保護機制
- 稽核框架選擇:考慮標準化方法以增強嚴謹性和透明度
- 關注公平性:進行交叉和小群體分析,超越法律保護類別
- 披露與透明度:公開稽核方法和結果,建立最佳實踐
- 混合方法分析:結合技術和定性分析,提供全面視角
- 社群和利益相關者參與:納入多元觀點,建立反饋迴圈
- 持續學習與改進:保持對新興標準和最佳實踐的更新
透明度與可解釋性
生成模型的可解釋性比傳統機器學習模型更為複雜。與根據特徵的決策模型不同,生成模型沒有明確的決策邊界或輸入特徵與預測之間的直接對映。
實用的透明度實踐包括:
- 向所有相關利益相關者提供清晰的檔案
- 建立對模型能力和用途的共同理解和期望
值得關注的是,Anthropic、OpenAI等機構的研究表明,稀疏自編碼器(一次只啟用少數神經元的神經網路)可能有助於識別抽象與可理解的模式,從而解釋網路行為。
最終佈署與維護
在選定最佳模型後,我們可以更新生產環境進行佈署。以下是佈署步驟:
- 更新依賴項:
fastapi==0.68.0
uvicorn==0.15.0
openai==0.27.0
langchain==0.1.0
- 更新Dockerfile:
FROM python:3.8-slim-buster
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 80
ENV NAME World
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "80"]
- 更新FastAPI應用:
from fastapi import FastAPI, HTTPException, Request
from langchain.llms import OpenAI
import os
app = FastAPI()
# 使用LangChain設定GPT-3.5
llm = OpenAI(model_name='text-davinci-003',
temperature=0.7,
max_tokens=256,
api_key=os.environ['OPENAI_API_KEY'])
@app.post("/generate/")
async def generate_text(request: Request):
data = await request.json()
prompt = data.get('prompt')
if not prompt:
raise HTTPException(status_code=400,
detail="Prompt is required")
response = llm(prompt)
return {"generated_text": response}
維護與可靠性
確保系統可靠性的關鍵措施包括:
- 監控工具:整合監控工具以持續追蹤系統效能和模型指標
- 警示機制:建立警示機制,在檢測到異常時通知維護團隊
- 自動修復:利用Kubernetes的自我修復功能和自定義指令碼
- 容錯移轉機制:設定次要伺服器和資料函式庫,確保服務連續性
- 透過CI/CD定期更新:使用CI/CD管道管理、測試和佈署更新
透過這些措施,我們可以為StyleSprint佈署建立堅實的可靠性和可維護性基礎。
本文詳細介紹瞭如何將StyleSprint生成式AI原型轉變為生產就緒的佈署,用於在電子商務平台上建立吸引人的產品描述。我們探討了從環境設定、模型選擇到最終佈署的完整流程,強調了量化基準測試和定性評估的重要性。
透過遵循這些策略,團隊可以獲得將生成式AI原型成功轉變為可維護與增值的生產系統所需的見解和步驟。在實際應用中,需要不斷評估和調整,以確保系統持續提供高品質的產品描述,同時保持成本效益和負責任的AI實踐。
隨著生成式AI技術的不斷發展,未來可能會出現更多最佳化方法,包括模型微調、領域適應和提示工程等技術,這些都將進一步提升產品描述生成的品質和效率。
微調生成式模型以應對特定任務
在數位時代,生成式AI模型已經成為許多企業的重要工具。然而,從通用模型到專門解決特定業務問題的轉變,往往需要一個關鍵步驟:微調(Fine-tuning)。本文將探討如何有效地微調生成式模型,使其能夠精確執行特定任務,特別是問答系統的建立。
微調的基礎與相關性
微調是一個利用在大型資料集上預訓練的模型,並在較小的、任務特定資料集上繼續訓練的過程,目的是提高模型在該特定任務上的表現。這種方法可分為兩種主要型別:
- 領域適應微調:調整模型以適應新領域的細微差別,這部分我們將在下一章詳細討論。
- 任務特定微調:針對特定任務(如問答、摘要、分類別等)最佳化模型表現,這是本章的重點。
以問答系統為例,微調過程涉及在產品相關資訊和客戶互動的精選資料集上有選擇性地訓練模型,使其能夠以知情與符合品牌調性的精確度回應。
引數高效微調技術(PEFT)
隨著模型規模的增長,傳統微調方法變得越來越不切實際,因為需要大量計算資源和時間來訓練和更新所有模型引數。對於大多數企業,包括較大的組織,傳統微調方法的成本過高,實際上難以實施。
引數高效微調(PEFT)方法只修改模型引數的一小部分,減少計算負擔的同時仍能達到最先進的效能。這種方法對於將大型模型適應特定任務而無需大規模重新訓練特別有利。
LoRA(低秩適應)
LoRA方法專注於選擇性地微調Transformer架構中的特定元件,以提高LLM的效率和效能。LoRA針對Transformer自注意力模組中的權重矩陣,包括四個矩陣:wq(查詢)、wk(鍵)、wv(值)和wo(輸出)。
LoRA的方法僅適應下游任務的注意力權重,而前饋網路(FFN)中的權重保持不變。這種專注於注意力權重並凍結FFN的決定是為了簡化和引數效率。這樣,LoRA確保了更易於管理與資源效率更高的微調過程。
這種選擇性微調策略使LoRA能夠有效地為特定任務定製模型,同時保持預訓練模型的整體結構和優勢。這使LoRA成為以減少計算負擔的方式將LLM適應新任務的實用解決方案。
AdaLoRA(自適應低秩適應)
AdaLoRA是LoRA的進階版本,其關鍵區別在於其自適應性。LoRA在整個模型中應用一致的低秩方法進行微調,而AdaLoRA根據每一層的需求定製更新,提供更靈活與可能更有效的方式來微調大型模型。
AdaLoRA的主要創新在於其自適應分配引數預算給預訓練模型的權重矩陣。許多PEFT方法傾向於在所有預訓練權重矩陣中均勻分配引數預算,可能忽略了不同權重引數的不同重要性。AdaLoRA透過為這些權重矩陣分配重要性分數並相應地分配引數預算來克服這一點。
此外,AdaLoRA應用奇異值分解(SVD)來有效組織模型微調過程中的增量更新。SVD允許有效地修剪與不太重要的更新相關的奇異值,減少微調所需的整體引數預算。
AdaLoRA已在各種領域進行了實證測試,包括自然語言處理、問答和自然語言生成。廣泛的實驗證明瞭其在提高模型效能方面的有效性,特別是在問答任務中。
微調與上下文學習的比較
上下文學習(In-context learning)是一種技術,模型根據輸入提示中提供的幾個範例生成回應。這種方法利用模型的預訓練知識和提示中包含的特定上下文或範例來執行任務,無需引數更新或重新訓練。
上下文學習的核心是少樣本提示(few-shot prompting)的概念,這對於使模型能夠適應和執行任務而無需額外的訓練資料至關重要,而是依賴於其預訓練知識和輸入提示中提供的上下文。
讓我們比較零樣本(zero-shot)和少樣本(few-shot)方法:
零樣本提示:模型根據其廣泛的預訓練和輸入提示中描述的特定任務或指令來回應。這些模型計算給定輸入序列x的條件機率分佈。模型計算潛在輸出序列y的可能性,表示為P(y|x)。這種計算是在沒有特定於任務的先前範例的情況下執行的,完全依賴於模型的一般預訓練。
少樣本提示:使用少樣本方法,我們向模型提供一個提示,並配對幾個範例。這些範例與提示(表示為x)連線,形成一個擴充套件的輸入序列。然後,LLM計算給定這個擴充套件輸入序列x的特定輸出序列y的機率。
在實際應用中,少樣本方法的效能一致地顯示出比零樣本行為顯著的提升。
實作專案:使用PEFT進行問答微調
在我們的實作專案中,我們將使用AdaLoRA高效地微調模型,並將其直接與使用上下文學習的最先進模型的輸出進行比較。
問答微調背景
我們的專案使用Hugging Face訓練管道函式庫,這是機器學習社群中廣泛認可的資源。該函式庫提供了各種預建管道,包括用於問答的管道,允許我們以最少的設定微調預訓練模型。
當使用問答訓練管道時,重要的是要理解模型不僅是記住問答對,它學習問題和答案之間的連線。此外,為了適當地回答,模型不能完全依賴訓練。它還需要額外的上下文作為輸入來組成相關答案。
Python實作
首先,我們安裝所需的函式庫:
!pip install transformers peft sentence-transformers
然後,我們從transformers函式庫匯入問答模組。對於我們的專案,我們將使用Google的Flan T5(small):
from transformers import (
AutoModelForQuestionAnswering, AutoTokenizer)
model_name = "google/flan-t5-small"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForQuestionAnswering.from_pretrained(model_name)
接下來,我們設定模型以使用AdaLoRA適應其訓練過程:
from peft import AdaLoraConfig
# 範例設定;根據需要調整引數
adapter_config = AdaLoraConfig(target_r=16)
model.add_adapter(adapter_config)
微調依賴於訓練資料的品質和大小。我們構建一個簡單的資料集:
demo_data = [{
"question": "什麼是最新的街頭服飾趨勢?",
"answer": "最新的街頭服飾系列包括連帽衫和圖形T恤,所有這些都受到最新嘻哈時尚趨勢的啟發。"
...
}]
為了將我們的資料集與問答管道整合,我們建立一個類別來適應我們的資料集以滿足訓練器的期望:
from torch.utils.data import Dataset
class StylesprintDataset(Dataset):
def __init__(self, tokenizer, data):
tokenizer.pad_token = tokenizer.eos_token
self.tokenizer = tokenizer
self.data = data
準備好訓練集並設定我們的管道以應用AdaLoRA方法後,我們可以進行訓練步驟:
from transformers import Trainer, TrainingArguments
# 將模擬資料集分為訓練和評估集(50/50)
train_data = StylesprintDataset(
tokenizer, demo_data[:len(demo_data)//2])
eval_data = StylesprintDataset(
tokenizer, demo_data[len(demo_data)//2:])
# 訓練引數
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=10,
per_device_train_batch_size=16,
per_device_eval_batch_size=64,
warmup_steps=500,
weight_decay=0.01,
logging_dir="./logs",
logging_steps=10,
)
# 初始化Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_data,
eval_dataset=eval_data
)
# 開始訓練
trainer.train()
訓練完成後,我們使用我們新微調的模型進行推斷或預測:
import torch
# 儲存引數
model.save_pretrained("./stylesprint_qa_model")
def ask_question(model, question, context):
# 標記問題和上下文
inputs = tokenizer.encode_plus(question, context,
add_special_tokens=True, return_tensors="pt")
# 取得模型預測
with torch.no_grad():
outputs = model(**inputs)
# 取得開始和結束位置
answer_start_scores = outputs.start_logits
answer_end_scores = outputs.end_logits
# 找到具有最高`start`和`end`分數的標記
answer_start = torch.argmax(answer_start_scores)
answer_end = torch.argmax(answer_end_scores) + 1
# 將標記轉換為答案字元串
answer = tokenizer.convert_tokens_to_string(
tokenizer.convert_ids_to_tokens(
inputs["input_ids"][0][answer_start:answer_end]
)
)
return answer
question = "線上購買的退貨政策是什麼?"
context = """從搜尋回傳的退貨政策摘錄。"""
answer = ask_question(model, question, context)
print(answer)
結果評估
為了評估我們的模型結果,我們可以使用簡單的語義相似性度量將模型的輸出與黃金標準回應進行比較:
from sentence_transformers import SentenceTransformer, util
import pandas as pd
# 人類撰寫的黃金標準答案範例
gs = "我們的政策是接受30天內的線上購買退貨,條件是物品未使用並保持原始狀態。"
# 使用上下文學習的GPT 3.5的答案範例
gpt_35 = "接受購買後30天內的退貨,前提是物品未穿過與處於原始狀態。"
# 載入您的資料集
dataset = pd.DataFrame([
(gs, gpt_35, answer)
])
dataset.columns = ['gold_standard_response',
'in_context_response', 'fine_tuned_response']
# 載入預訓練的句子轉換器模型
eval_model = SentenceTransformer('all-MiniLM-L6-v2')
# 計算語義相似性的函式
def calculate_semantic_similarity(model, response, gold_standard):
response_embedding = model.encode(
response, convert_to_tensor=True)
gold_standard_embedding = model.encode(gold_standard,
convert_to_tensor=True)
return util.pytorch_cos_sim(response_embedding,
gold_standard_embedding).item()
# 測量語義相似性
dataset['in_context_similarity'] = dataset.apply(
lambda row:calculate_semantic_similarity(
eval_model, row['in_context_response'],
row['gold_standard_response']
), axis=1)
dataset['fine_tuned_similarity'] = dataset.apply(
lambda row:calculate_semantic_similarity(
eval_model, row['fine_tuned_response'],
row['gold_standard_response']
), axis=1)
# 列印語義相似性
print("上下文學習的語義相似性:",
dataset['in_context_similarity'])
print("微調模型的語義相似性:",
dataset['fine_tuned_similarity'])
評估結果顯示,上下文學習的答案與我們的黃金標準參考更接近。然而,微調模型也不遠。這告訴我們,使用更強大的訓練資料集和更多的訓練週期,微調模型可能與GPT 3.5相當。
本文探討了微調與上下文學習在生成式AI模型中的應用與比較。微調方法,特別是引數高效微調(PEFT)技術如LoRA和AdaLoRA,提供了一種資源高效的方式來適應預訓練模型以執行特定任務。上下文學習,尤其是少樣本學習,則提供了一種不需要額外訓練的替代方法。
選擇微調還是上下文學習不僅是技術決策,也是戰略決策,與公司的營運目標、資源分配和期望的客戶體驗密切相關。透過進行比較測試並使用可靠的指標評估結果,企業可以做出明智的決策,選擇最適合其需求的AI策略。