生成式AI模型的訓練和應用仰賴大量的資料和運算資源,如何有效地利用這些資源是提升模型效能的關鍵。本篇著重於偏好最佳化,讓模型更精準地理解使用者需求,並探討長距離上下文理解如何提升模型生成內容的連貫性。此外,專家混合模型的架構設計,結合不同模型的優勢,能進一步提升生成結果的品質和多樣性。同時,模型最佳化和量化策略,能有效降低模型的運算和儲存成本,讓生成式AI技術更容易佈署到各種裝置上。

偏好最佳化

偏好最佳化是一種重要的研究方向,旨在提高生成式模型對使用者偏好的理解和滿足程度。透過偏好最佳化,模型可以更好地學習使用者的需求和偏好,從而生成更符合使用者需求的內容。

長距離上下文

長距離上下文是另一項重要的研究領域,旨在提高生成式模型對長距離上下文的理解和處理能力。透過長距離上下文,模型可以更好地捕捉文字或影像中的長距離依賴關係,從而生成更連貫和更合理的內容。

專家混合

專家混合是一種新的模型結構,旨在結合多個專家的知識和能力,以生成更高品質的內容。透過專家混合,模型可以更好地利用不同專家的優勢,從而生成更豐富和更多樣的內容。

最佳化和量化

最佳化和量化是生成式AI技術的重要組成部分,旨在提高模型的執行效率和儲存效率。透過最佳化和量化,模型可以更好地執行在資源有限的裝置上,從而使生成式AI技術更廣泛地應用於各個領域。

資料

資料是生成式AI技術的生命線,高品質的資料對於模型的訓練和最佳化至關重要。透過收集和處理大量的資料,模型可以更好地學習和理解使用者的需求和偏好,從而生成更高品質的內容。

一個模型統治所有

一個模型統治所有是一種新的研究方向,旨在開發出一個可以處理所有任務和應用場景的模型。透過一個模型統治所有,模型可以更好地利用分享的知識和能力,從而生成更高品質和更多樣的內容。

內容解密:

以上內容介紹了生成式AI技術的快速發展領域,包括偏好最佳化、長距離上下文、專家混合、最佳化和量化、資料和一個模型統治所有等。這些領域的快速發展為各個行業帶來了新的機會和挑戰,也為生成式AI技術的未來發展提供了新的方向和思路。

  flowchart TD
    A[生成式AI] --> B[偏好最佳化]
    A --> C[長距離上下文]
    A --> D[專家混合]
    A --> E[最佳化和量化]
    A --> F[資料]
    A --> G[一個模型統治所有]

圖表翻譯:

以上圖表展示了生成式AI技術的快速發展領域,包括偏好最佳化、長距離上下文、專家混合、最佳化和量化、資料和一個模型統治所有等。這些領域的快速發展為各個行業帶來了新的機會和挑戰,也為生成式AI技術的未來發展提供了新的方向和思路。

前言

生成式人工智慧(Generative AI)是一項革命性的技術,已經迅速地從實驗室應用轉移到現實世界中,影響著數十億人。它可以建立新的內容,包括圖片、文字、音訊、影片等,並且可以用於資料增強、任務自動化等方面。例如,一個訓練好的音樂模型可以創作新的旋律,而一個訓練好的文字模型可以生成故事或甚至程式設計程式碼。

本章不是為了專家而寫,而是為了所有想要了解這個迷人領域的人。我們不會關注從零開始構建模型或深入複雜的數學,而是利用現有的模型來解決現實問題,幫助讀者建立對這些技術的直覺和基礎知識。這種實踐方法將幫助您快速和有效地使用生成式人工智慧,學習如何使用預先訓練好的模型,根據您的需求進行調整,並使用它們生成新的資料。同時,您還會學習如何評估生成資料的品質和探索使用生成式人工智慧可能出現的倫理和社會問題。

誰應該閱讀這本章

如果您對生成式人工智慧感興趣,無論是出於好奇、興趣還是想要更深入地瞭解相關產品(如ChatGPT),本章都適合您。透過生成式人工智慧,我們可以做很多事情,包括:

  • 寫新聞摘要
  • 根據描述生成圖片
  • 提升圖片品質
  • 轉錄會議
  • 生成合成語音
  • 將新主題或風格融入圖片生成模型中

無論您的原因是什麼,您都決定了要學習生成式人工智慧,本章將引導您完成這個過程。

前置知識

本章假設您熟悉Python程式語言,並且對機器學習有基本的瞭解,包括使用PyTorch或TensorFlow等框架的經驗。雖然實際訓練模型的經驗不是必需的,但它將有助於您更深入地理解本章的內容。如果您需要復習相關知識,可以參考以下資源:

  • 《 Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 》
  • 《 Deep Learning for Coders with fastai and PyTorch 》

如果您感到害怕,不要擔心!本章的設計目的是增強您的直覺和提供實踐方法幫助您開始。

本章結構

本章分為三部分:

  1. 利用開放模型:介紹生成式人工智慧的基礎建設塊。我們將學習如何使用預先訓練好的模型生成文字和圖片。
  2. 轉移學習_for_生成模型:關注微調,展示如何將現有的模型適應您的需求。
  3. 進一步探索:延伸前兩部分的想法,生成新的模態,如音訊,並探索新的應用。

在讀完本章後,您將對生成式應用程式背後的方法和技術有深刻的理解。

如何閱讀本章

我們設計本章可以按順序閱讀,但也盡量保持每章的自包含性,因此您可以根據自己的興趣跳躍到最感興趣的部分。許多在本章中涵蓋的想法適用於多種模態,即使您只對某一特定領域(如圖片生成)感興趣,您仍可能發現其他章節有價值。

我們在整本章中加入了練習和程式碼範例,以幫助您實踐所學內容。盡量完成這些練習,並嘗試將範例應用於您的使用案例中。親自嘗試會幫助您更深入地理解材料。

最後,大多數章節結尾都會列出額外的資源供進一步閱讀。當您有興趣更深入地探索某些主題時,可以回到這些資源中繼續學習。

軟體和硬體要求

為了充分利用本章,我們強烈建議邊讀邊執行程式碼範例。與變換器和擴散模型合作可能會很耗費計算資源,因此能夠存取配備NVIDIA GPU的電腦將非常有幫助。雖然GPU不是必需的,但它能夠顯著加速訓練速度。

您可以使用Google Colaboratory和Kaggle Notebooks等線上選項。按照以下指示設定您的環境並跟隨教程:

使用Google Colab 大多數程式碼都應該能夠在任何Google Colab例項上執行。對於有訓練迴圈的章節,我們建議使用GPU執行時。

執行環境設定

要在您的電腦上執行程式碼,需要建立一個 Python 3.10 的虛擬環境。您可以使用 conda 來完成這一步,以下是具體指令:

conda create -n genaibook python=3.10
conda activate genaibook

效能最佳化

為了獲得最佳的效能,建議使用 CUDA 相容的 GPU。如果您不熟悉 CUDA,不要擔心,因為這本章會對此進行解釋。另外,對於蘋果公司的 Apple Silicon 處理器,也可以嘗試使用 MPS 裝置,但請注意,我們尚未對這種組態進行廣泛的測試。

安裝套件

在開始之前,您需要安裝 genaibook 套件,這將會同時安裝其他必要的函式庫,包括 transformers、diffusion 模型、PyTorch、matplotlib、numpy 等。您可以使用 pip 來完成安裝:

pip install genaibook

程式碼與資源

所有的程式碼範例和補充材料都可以在這本章的 GitHub 倉函式庫中找到。您可以在 Jupyter Notebook 中互動式地執行所有的範例,倉函式庫將會定期更新,以提供最新的資源。

書中慣例

以下是本章中使用的幾個重要的排版慣例:

  • 斜體文字 用於表示新的術語、URL、電子郵件地址、檔案名稱和檔案副檔名。
  • 固定寬度文字 用於程式清單,以及在段落中參照程式元素,如變數或函式名稱、資料函式庫、資料型別、環境變數、陳述式和關鍵字。
  • 這個符號表示提示或建議。
  • 這個符號表示一般性註解。
  • 這個符號表示警告或注意事項。

使用程式碼範例

附帶的材料(程式碼範例、練習等)可在網站上下載。如果您在使用程式碼範例時遇到技術問題或疑問,請聯絡我們。一般而言,如果本章提供了程式碼範例,您可以在您的程式和檔案中使用它們,不需要事先聯絡我們。但是,如果您要重製書中程式碼的重大部分,則需要取得許可。例如,撰寫一個使用了本章多個程式碼片段的程式不需要許可,但將本章的程式碼範例出售或分發則需要許可。

聯絡我們

如果您對這本章有任何疑問或建議,請聯絡出版社:

O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472

電話:800-889-8969(美國或加拿大) 電話:707-827-7019(國際或本地) 傳真:707-829-0104

我們也有這本章的網頁,列出了勘誤表、範例和其他額外資源。

技術進步

在生成性 AI 領域中,技術進步非常快速,最高水準的模型和技術也在不斷演進。本章旨在提供生成性 AI 的基礎知識,但由於這個領域的快速發展,當您閱讀這本章時,可能已經有新的模型和技術問世。雖然如此,本章仍然會給您提供理解生成性 AI 模型工作原理的基本原則,這些原則即使在技術不斷演進的情況下,也仍然有用。

致謝

我們要對 O’Reilly 團隊表示最深的感謝,他們在本章的出版過程中提供了不可思議的支援和幫助。

生成媒體簡介

近年來,生成模型已經廣泛流行。如果您正在閱讀這本章,很可能您曾經與生成模型進行過互動。也許您曾經使用過 ChatGPT 生成文字,或者在 Instagram 等應用中使用過風格轉換,或者看到過那些在頭條新聞中出現的深度偽造影片。所有這些都是生成模型在行動的例子!

在這本章中,我們將探索生成模型的世界,從兩個家族的基礎開始:變換器和擴散模型,然後逐步深入到更高階的主題。我們將涵蓋生成模型的型別、它們的工作原理以及如何使用它們。在本章中,我們將簡要介紹了我們如何到達當前的狀態,並探索玄貓提供的功能,我們將在整本章中更深入地探討。

那麼,什麼是生成模型呢?其核心是教導一個模型生成新的資料,使其類別似於其訓練資料。例如,如果我在一組貓的影像資料集上訓練一個模型,我就可以使用該模型生成新的貓影像,使其看起來像是來自原始資料集。這是一個強大的想法,它有廣泛的應用範圍,從建立新影像和影片到生成具有特定風格的文字。

在整本章中,您將發現流行的工具,使得使用現有的生成模型變得直接。機器學習(ML)世界提供了許多開放存取的模型,這些模型是在大資料集上訓練的,任何人都可以使用。從頭開始訓練這些模型可能很昂貴且耗時,但開放存取模型提供了一種實用且高效的替代方案。這些預先訓練的模型可以生成新資料、分類別現有資料,並適應新的應用。找到開放存取模型的一個最受歡迎的地方是 Hugging Face,一個具有超過200萬個模型的平臺,適用於許多ML任務,包括影像生成。

影像生成

作為一個開源函式庫的例子,我們將從diffusers開始。這個流行函式庫提供了對狀態藝術(SOTA)擴散模型的存取。它是一個強大且簡單的工具箱,允許我們快速載入和訓練擴散模型。

透過玄貓(text-to-image),我們可以找到一些最受歡迎的模型,例如Stable Diffusion和SDXL。我們將使用Stable Diffusion 1.5,一個能夠生成高品質影像的擴散模型。如果您瀏覽模型網站,您可以閱讀模型卡,一個對於發現和可複製性的基本檔案。在那裡,您可以閱讀關於模型、它如何被訓練、預期用途等資訊。

假設我們有一個模型(Stable Diffusion)和一個工具來使用該模型(diffusers),我們現在可以生成我們的第一個影像!當我們載入模型時,我們需要將其傳送到特定的硬體裝置,例如CPU(cpu)、GPU(cuda或cuda:0)或Mac硬體稱為Metal(mps)。在前言中提到的genaibook函式庫有一個實用函式,可以根據您執行示例程式碼的位置選擇適合的裝置。例如,以下程式碼將在您具有GPU的情況下將cuda分配給裝置變數:

device = get_device()
print(f"Using device: {device}")

接下來,我們將載入Stable Diffusion 1.5。diffusers函式庫提供了一個方便、高階別的包裝器,稱為StableDiffusionPipeline,非常適合此使用案例。目前不要擔心所有引數——以下是亮點:

  • 有很多具有Stable Diffusion架構的模型,因此我們需要指定要使用哪一個。我們將使用stable-diffusion-v1-5/stable-diffusion-v1-5,一個由玄貓發布的原始Stable Diffusion 1.5模型的映象。
  • 我們需要指定載入模型時要使用的精確度。精確度是您稍後將學習到的東西。在高層次上,模型由許多引數(數百萬或數十億)組成。每個引數都是在訓練期間學習到的數字,我們可以以不同的精確度儲存這些引數(換句話說,我們可以使用更多位元來儲存模型)。更大的精確度允許模型儲存更多資訊,但也需要更多記憶體和計算。另一方面,我們可以使用較低的精確度,如float16,並使用比預設float32少得多的記憶體。當執行模型(以花哨的方式說“執行”)時,使用float16通常就足夠了。

首次執行此程式碼時可能需要一點時間:管道下載了幾個GB的大型模型!如果您第二次載入管道,它只會在Hugging Face上託管模型的遠端儲存函式庫發生更改時重新下載模型。

Hugging Face函式庫在本地快取中儲存模型,使後續載入速度大大加快:

import torch
from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained(
    "stable-diffusion-v1-5/stable-diffusion-v1-5",
    torch_dtype=torch.float16,
    variant="fp16",
).to(device)

現在模型已載入,我們可以定義一個提示——模型將接收到的文字輸入。然後,我們可以將提示傳遞給模型並根據該文字生成我們的第一個影像!嘗試輸入以下提示:

prompt = "一張宇航員騎馬的照片"

圖表翻譯:

  graph LR
    A[開始] --> B[載入Stable Diffusion 1.5]
    B --> C[定義提示]
    C --> D[生成影像]
    D --> E[顯示結果]

內容解密:

上述程式碼示例展示瞭如何使用diffusers函式庫載入Stable Diffusion 1.5模型並生成影像。首先,我們需要選擇適合的裝置(CPU、GPU或Mac Metal),然後載入模型,指定精確度和變體。接下來,我們定義一個提示,然後透過管道傳遞提示以生成影像。最終結果是根據輸入提示生成的一張影像。

生成媒體簡介

生成媒體是一種利用人工智慧技術建立新內容的方法,例如圖片、文字、音訊等。這種技術可以用於各種應用,包括圖片生成、文字生成、音訊生成等。

圖片生成

圖片生成是一種利用人工智慧技術建立新圖片的方法。這種技術可以用於各種應用,包括藝術、設計、廣告等。例如,利用diffusion模型可以生成新的圖片,該模型使用隨機性來生成圖片,因此每次執行程式碼都會生成不同的圖片。

import torch

torch.manual_seed(0)

文字生成

文字生成是一種利用人工智慧技術建立新文字的方法。這種技術可以用於各種應用,包括聊天機器人、文字摘要、語言翻譯等。例如,利用transformers函式庫可以實作文字生成,該函式庫提供了一個標準化的介面來執行變換器模型。

from transformers import pipeline

classifier = pipeline("text-classification", device=device)
print(classifier("This movie is disgustingly good!"))

音訊生成

音訊生成是一種利用人工智慧技術建立新音訊的方法。這種技術可以用於各種應用,包括音樂生成、語音合成、音效生成等。例如,利用MusicGen模型可以生成新的音訊,該模型可以根據輸入的文字提示生成相應的音訊。

pipe = pipeline("text-to-audio", model="facebook/musicgen-small", device=device)

data = pipe("electric rock solo, very intense")
print(data)

道德和社會影響

生成媒體的廣泛採用引發了重要的道德和社會問題。例如,圖片生成可以用於偽造圖片,文字生成可以用於生成虛假新聞,音訊生成可以用於生成虛假語音等。因此,需要注意生成媒體的道德和社會影響,並採取措施來防止其被濫用。

內容解密:

上述程式碼示例展示瞭如何使用diffusion模型生成新的圖片,如何使用transformers函式庫實作文字生成,如何使用MusicGen模型生成新的音訊。這些程式碼示例可以用於各種應用,包括藝術、設計、廣告等。

圖表翻譯:

下圖展示瞭如何使用Mermaid語法建立一個簡單的流程圖,該流程圖描述了生成媒體的基本流程。

  flowchart TD
    A[開始] --> B[輸入提示]
    B --> C[生成內容]
    C --> D[輸出內容]
    D --> E[結束]

這個流程圖描述了生成媒體的基本流程,包括輸入提示、生成內容、輸出內容等步驟。

第一章:生成媒體導論

私隱與同意

生成模型能夠根據少量資料生成真實的影像和影片,對私隱提出重大挑戰。例如,根據個人少量真實影像生成合成影像,引發了使用個人資料而未經同意的問題。同時,也增加了生成「深偽造」(deepfakes)的風險,這些深偽造可以用於傳播誤導資訊或傷害個人。

偏見與公平性

生成模型是在大型資料集上訓練的,這些資料集可能包含偏見。這些偏見可能會被生成模型繼承和放大,如我們將在第二章中探討的。例如,訓練影像生成模型的偏見資料集可能會生成刻板或歧視性的影像。因此,考慮如何減輕這些偏見並確保生成模型的公平使用至關重要。

監管

由於生成模型的潛在風險,目前有越來越多的呼聲要求監管監督和問責機制,以確保負責任的開發。這包括透明度要求、倫理和法律框架,以應對生成模型的濫用。

生成AI模型的建立

生成AI模型的建立通常需要大量資源或開源協作。近年來,許多令人印象深刻的生成模型都是由玄貓、private公司或開源社群建立的。開放AI開發了ChatGPT、DALL·E和Sora;Google構建了Imagen、Bard和Gemini;Meta 建立了Llama和Code Llama。

生成AI的發展與應用

生成AI領域正處於快速發展階段,得益於近年來研究、資源和開發的迅速擴張。一個日益壯大的社群、豐富的開源生態系統以及促進佈署的研究成果,已經帶來了廣泛的應用和使用案例。自2023年以來,一新一代能夠生成高品質影像、文字、程式碼、影片等內容的模型已經出現,例如ChatGPT、DALL·E、Imagen、Stable Diffusion、Llama、Mistral等。

轉換器(Transformers)

轉換器是2017年引入的一類別模型,它們對於最近一波生成AI的進步做出了重要貢獻。轉換器最著名的應用是強大的大語言模型(LLMs),如Llama和GPT-4,它們被玄貓廣泛使用。轉換器已經成為現代AI應用的骨幹,驅動從聊天機器人和搜尋系統到機器翻譯和內容摘要等各種應用。它們甚至擴充套件到了文字以外的領域,如電腦視覺、音樂生成和蛋白質折疊。

在本章中,我們將探索轉換器背後的核心思想以及它們如何運作,著重於其中一個最常見的應用:語言建模。在深入轉換器細節之前,讓我們先退一步瞭解什麼是語言建模。語言模型(LM)是一種機率模型,它學習根據前面的單詞(或令牌)預測序列中的下一個單詞(或令牌)。這樣做就能夠捕捉語言底層的結構和模式,使得模型能夠生成真實且連貫的文字。

內容解密:

轉換器被設計用於高效且富有表達力的方式處理長距離依賴和單詞之間複雜的關係。例如,如果你想使用一個LM來總結一篇新聞文章,而這篇文章可能包含數百甚至數千個單詞,傳統的LM如迴圈神經網路(RNNs)在長上下文中會遇到困難,因此總結可能會跳過文章開始部分的關鍵細節。然而,根據轉換器的LM顯示出強大的結果。此外,轉換器具有高品質生成、訓練的高效平行化、可擴充套件性和知識轉移等特性,使其在多個任務中都很受歡迎。在這項創新背後的心臟機制是一種稱為自注意力(self-attention)的機制,它允許模型根據整個序列的上下文對每個單詞進行權重分配。

圖表翻譯:

  graph LR
    A[開始] --> B[語言建模]
    B --> C[轉換器]
    C --> D[自注意力機制]
    D --> E[高效平行化]
    E --> F[可擴充套件性]
    F --> G[知識轉移]

此圖表描述了從語言建模到轉換器,再到自注意力機制、高效平行化、可擴充套件性和知識轉移的過程,展示了轉換器如何透過其核心機制來支援高效且富有表達力的語言處理。

##Transformer模型的基本工作原理 Transformer模型是一種深度學習模型,特別適用於自然語言處理(NLP)任務。它的工作原理是將輸入的文字序列轉換為數字序列,然後使用自注意力機制(self-attention)來處理這些數字序列。

###載入預訓練模型 首先,我們需要載入一個預訓練的Transformer模型。這些模型已經在大量的文字資料上進行了訓練,可以用於各種NLP任務。一些流行的預訓練模型包括GPT-2、Qwen2和SmolLM。

###文字分詞(Tokenization) Transformer模型不能直接處理文字輸入,因此需要將文字轉換為數字序列。這個過程稱為分詞(Tokenization)。有幾種分詞策略,包括:

  • 字元級分詞(Character-Level Tokenization):每個字元都被賦予一個唯一的數字ID。
  • 詞級分詞(Word-Level Tokenization):每個詞都被賦予一個唯一的數字ID。
  • 子詞級分詞(Subword-Level Tokenization):文字被分成子詞,每個子詞都被賦予一個唯一的數字ID。

###使用Qwen分詞器 讓我們使用Qwen分詞器來分詞一句話。首先,我們需要載入Qwen分詞器,然後使用它來分詞輸入的文字。然後,我們可以使用decode()方法將每個ID轉換回其對應的子詞。

from transformers import AutoTokenizer

# 載入Qwen分詞器
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B")

# 輸入的文字
prompt = "It was a dark and stormy"

# 分詞輸入的文字
input_ids = tokenizer(prompt).input_ids

# 將每個ID轉換回其對應的子詞
subwords = [tokenizer.decode([id]) for id in input_ids]

###子詞化示例 下面是一個子詞化的示例:

子詞ID
It1
was2
a3
dark4
and5
stormy6

在這個示例中,每個子詞都被賦予一個唯一的數字ID。

###Transformer模型的優點 Transformer模型有幾個優點,包括:

  • 能夠處理長距離依賴關係
  • 能夠平行化計算
  • 能夠學習到複雜的語言結構

然而,Transformer模型也有一些缺點,包括:

  • 訓練時間長
  • 需要大量的計算資源
  • 可能會過度擬合

###結論 Transformer模型是一種強大的深度學習模型,特別適用於自然語言處理任務。它的工作原理是將輸入的文字序列轉換為數字序列,然後使用自注意力機制來處理這些數字序列。透過使用預訓練模型和子詞化,我們可以快速地實作高效能的NLP系統。

瞭解 Tokenizer 的作用

在自然語言處理(NLP)中,tokenizer 是一個非常重要的工具,它負責將輸入的文字拆分成單個的 token,以便模型能夠理解和處理。不同的模型通常都有自己的 tokenizer,例如 Qwen 和 GPT-2。

Tokenizer 的工作原理

當我們輸入一段文字時,tokenizer 會將其拆分成單個的 token。每個 token 都會被賦予一個唯一的 ID,以便模型能夠識別它。例如,在上面的例子中,輸入的文字 “It was a dark and stormy” 被拆分成以下 token:

  • 2132:It
  • 572:was
  • 264:a
  • 6319:dark
  • 323:and
  • 13458:storm
  • 88:y

可以看到,tokenizer 將每個單詞拆分成單個的 token,並賦予它們唯一的 ID。

不同 Tokenizer 的差異

不同的 tokenizer 可能會有不同的拆分方式。例如,Qwen 和 GPT-2 的 tokenizer 會將 “stormy” 拆分成 “storm” 和 “y” 兩個 token,而 SmolLM 的 tokenizer 則不會拆分這個單詞。

模型訓練和 Tokenizer 訓練

模型訓練和 tokenizer 訓練是兩個不同的過程。模型訓練是一個隨機的過程,而 tokenizer 訓練則是一個確定的過程。Tokenizer 訓練的目的是找出最適合的 subword 方案,以便能夠有效地代表輸入的文字。

預測機率

GPT-2、Qwen 和 SmolLM 等模型都是因果語言模型(causal language model),它們被訓練來預測序列中的下一個 token。transformers 函式庫提供了高階工具,讓我們可以快速地使用這些模型來生成文字或執行其他任務。

使用 AutoModelForCausalLM

要使用 Qwen2 模型,我們可以使用 AutoModelForCausalLM 類別,並指定模型的名稱。transformers 函式庫會自動選擇合適的預設類別,根據模型的組態。

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B")

當我們將 tokenized 的句子輸入到模型中時,我們會得到一個結果,其中包含 151,936 個值,每個值對應於輸入字串中的每個 token。

圖表翻譯:

  graph LR
    A[輸入文字] --> B[Tokenizer]
    B --> C[Tokenized 文字]
    C --> D[模型輸入]
    D --> E[模型輸出]
    E --> F[預測機率]

這個圖表展示了從輸入文字到預測機率的整個過程。首先,輸入文字被 tokenizer 拆分成 tokenized 文字,然後被輸入到模型中,最後模型輸出預測機率。

使用 PyTorch 和 Transformers 進行語言模型預測

在這個例子中,我們將使用 PyTorch 和 Transformers 進行語言模型預測。首先,我們需要將輸入的 prompt 轉換為 PyTorch tensor,然後將其傳入模型中進行預測。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# 載入模型和tokenizer
tokenizer = AutoTokenizer.from_pretrained("qwen2")
model = AutoModelForCausalLM.from_pretrained("qwen2")

# 定義輸入的 prompt
prompt = "It was a dark and stormy"

# 將 prompt 轉換為 PyTorch tensor
input_ids = tokenizer(prompt, return_tensors="pt").input_ids

# 將 input_ids 傳入模型中進行預測
outputs = model(input_ids)

# 取得模型的輸出
logits = outputs.logits

# 將 logits 轉換為機率
probabilities = torch.nn.functional.softmax(logits, dim=-1)

# 取得最可能的下一個 token
final_logits = logits[0, -1]
final_logits_argmax = final_logits.argmax()

# 將最可能的下一個 token 解碼為文字
next_token = tokenizer.decode(final_logits_argmax)

print(next_token)  # Output: night

在這個例子中,我們使用了 AutoTokenizerAutoModelForCausalLM 來載入模型和 tokenizer。然後,我們將輸入的 prompt 轉換為 PyTorch tensor,並將其傳入模型中進行預測。最後,我們將模型的輸出轉換為機率,並獲得最可能的下一個 token。

圖表翻譯:

  graph LR
    A[輸入 prompt] --> B[轉換為 PyTorch tensor]
    B --> C[傳入模型中進行預測]
    C --> D[獲得模型的輸出]
    D --> E[轉換為機率]
    E --> F[獲得最可能的下一個 token]
    F --> G[解碼為文字]

從技術架構視角來看,生成式AI技術的快速發展,特別是偏好最佳化、長距離上下文理解和專家混合模型的出現,標誌著AI生成內容能力的顯著提升。深入分析這些技術核心,可以發現它們有效解決了以往生成模型在內容相關性、一致性和多樣性方面的侷限。然而,模型的訓練效率、可解釋性和潛在的偏見問題仍是當前技術發展的瓶頸,需要進一步的技術突破。對於追求高品質內容生成的應用場景,建議優先考慮結合偏好最佳化和長距離上下文理解的模型,並關注資料品質和模型的微調策略。展望未來,隨著「一個模型統治所有」的理念逐步實作,以及最佳化和量化技術的持續發展,生成式AI將在更廣泛的領域釋放其巨大潛力,徹底改變內容創作和消費模式。玄貓認為,生成式AI技術已進入快速發展的黃金時期,值得所有相關領域的技術人員密切關注並積極探索其應用價值。