近年來,大語言模型(LLM)在自然語言處理領域取得了顯著的進展。從基礎開始編碼一個LLM,有助於理解其內部機制和限制,也為根據開源LLM架構進行預訓練或微調,以適應特定領域的資料集或任務,奠定了基礎。目前主流LLM多以PyTorch深度學習函式庫實作。相較於通用LLM,自定義LLM在特定任務或領域,例如金融或醫療,能展現更優異的效能。同時,自定義LLM也能有效解決資料隱私、佈署靈活性以及成本控制等問題。構建LLM的過程通常包含預訓練和微調兩個階段。預訓練階段使用大量的未標記文字資料,例如網路文字、書籍、維基百科和研究文章等,讓模型學習通用的語言模式。

1.3 建立和使用LLMs的階段

為什麼我們要建立自己的LLMs?從基礎開始編碼一個LLM是一個很好的練習,可以幫助我們瞭解其機制和限制。另外,它也為我們提供了必要的知識,以便對現有的開源LLM架構進行預訓練或微調,以適應我們自己的特定領域資料集或任務。 注意:大多數現代LLMs都是使用PyTorch深度學習函式庫實作的,這也是我們將要使用的函式庫。讀者可以在附錄A中找到對PyTorch的全面介紹。 研究表明,當涉及模型效能時,自定義LLMs(為特定任務或領域量身定做)可以超越一般用途LLMs,例如由玄貓提供的那些,它們是為廣泛的應用而設計的。例如BloombergGPT(專門用於金融)和為醫學問題回答而量身定做的LLMs(見附錄B以取得更多詳細資訊)。 使用自定義LLMs提供了幾個優點,特別是在資料隱私方面。例如,公司可能不希望與第三方LLM提供商如OpenAI分享敏感資料,因為有保密問題。另外,開發小型自定義LLMs使得可以直接在客戶裝置上佈署,例如筆記型電腦和智慧手機,這是像Apple這樣的公司正在探索的東西。 使用者輸入

(指令)

模型輸出 圖1.2 LLM介面啟用使用者和AI系統之間的自然語言通訊。這個截圖顯示ChatGPT根據使用者規格撰寫一首詩。

建立自定義LLMs可以顯著降低延遲並減少伺服器相關成本。此外,自定義LLMs授予開發人員完全自主權,允許他們根據需要控制更新和修改模型。 建立LLM的一般過程包括預訓練和微調。“預”在“預訓練”中指的是初始階段,其中像LLM這樣的模型在一個大型、多樣化的資料集上進行訓練,以發展對語言的廣泛理解。然後,這個預訓練模型作為一個基礎資源,可以透過微調進一步改進,在微調過程中,模型在一個更具體的資料集上進行訓練,以適應特定的任務或領域。這種兩階段的訓練方法由預訓練和微調組成,如圖1.3所示。 建立LLM的第一步是訓練它在一個大型文字資料集上,有時稱為原始文字。在這裡,“原始”指的是這個資料只是普通文字,而沒有任何標籤資訊。(可能會應用過濾,例如刪除格式字元或未知語言的檔案。) 注意:具有機器學習背景的讀者可能會注意到,傳統機器學習模型和深度神經網路通常需要標籤資訊來進行監督學習。但是,這不是LLMs預訓練階段的情況。在這個階段,LLMs使用自監督學習,模型從輸入資料中生成自己的標籤。 • 網際網路文字 • 書籍 • 維基百科 • 研究文章

訓練

預訓練LLM

(基礎模型) 原始、未標記文字

(數萬億個單詞)

訓練

瞭解大語言模型

大語言模型(LLM)是一種人工智慧模型,能夠處理和生成自然語言。它們通常是透過預訓練和微調來完成特定任務的。預訓練是指在大量未標記的文字資料上訓練模型,以獲得基本的語言能力。微調則是在預訓練的基礎上,使用標記資料對模型進行進一步的訓練,以使其能夠完成特定的任務。

預訓練和微調

預訓練是一個重要的步驟,它使得模型能夠學習到基本的語言結構和語法規則。透過預訓練,模型可以獲得對語言的基本理解,包括詞彙、句法和語義等方面。微調則是指在預訓練的基礎上,使用標記資料對模型進行進一步的訓練,以使其能夠完成特定的任務。

微調型別

微調可以分為兩種型別:指令微調和分類別微調。指令微調是指使用標記資料對模型進行微調,使其能夠完成特定的任務,例如翻譯或摘要等。分類別微調則是指使用標記資料對模型進行微調,使其能夠將輸入文字分類別為不同的類別,例如垃圾郵件或非垃圾郵件等。

Transformer架構

Transformer架構是一種深度神經網路架構,於2017年提出。它由兩個子模組組成:編碼器和解碼器。編碼器負責處理輸入文字,將其編碼為一系列數值向量,捕捉輸入文字的上下文資訊。解碼器則負責生成輸出文字,根據編碼器輸出的向量序列。

自注意力機制

自注意力機制是一種重要的機制,允許模型權衡不同詞彙或token在序列中的重要性。這種機制使得模型能夠捕捉長距離依賴和上下文關係,生成更為連貫和相關的輸出。

變體和應用

Transformer架構有多種變體,例如BERT和GPT等。BERT是一種根據Transformer架構的編碼器子模組,設計用於掩碼詞彙預測任務。GPT則是一種根據Transformer架構的生成模型,設計用於生成任務。

BERT和GPT

BERT和GPT是兩種常見的Transformer架構變體。BERT設計用於掩碼詞彙預測任務,而GPT設計用於生成任務。這兩種模型都根據Transformer架構,但具有不同的訓練方法和應用場景。

圖表翻譯:
  graph LR
    A[預訓練] --> B[微調]
    B --> C[指令微調]
    B --> D[分類別微調]
    C --> E[翻譯]
    D --> F[垃圾郵件分類別]
    style A fill:#f9f,stroke:#333,stroke-width:4px
    style B fill:#f9f,stroke:#333,stroke-width:4px
    style C fill:#f9f,stroke:#333,stroke-width:4px
    style D fill:#f9f,stroke:#333,stroke-width:4px

內容解密:

上述圖表展示了大語言模型的預訓練和微調過程。預訓練是指在大量未標記的文字資料上訓練模型,以獲得基本的語言能力。微調則是在預訓練的基礎上,使用標記資料對模型進行進一步的訓練,以使其能夠完成特定的任務。指令微調和分類別微調是兩種常見的微調型別,分別用於完成特定的任務,如翻譯或垃圾郵件分類別等。

玄貓技術:神經機器翻譯流程

1. 輸入文字

輸入文字是神經機器翻譯的起點,玄貓接收到這些文字後會開始進行翻譯的準備工作。

8. 完整輸出

最終,玄貓會生成完整的翻譯輸出,這是整個過程的最終結果。

翻譯過程

在這個過程中,玄貓會使用先進的神經網路技術來完成翻譯任務。

5. 部分輸出

在翻譯過程中,玄貓會一邊生成一邊輸出翻譯結果,每次輸出一個詞彙,逐步完成整個翻譯任務。

3. 編碼器

編碼器是玄貓翻譯系統中的重要組成部分,它可以接觸到完整的輸入文字,並產生用於翻譯的文字編碼。

圖表示意

  flowchart TD
    A[輸入文字] --> B[編碼器]
    B --> C[解碼器]
    C --> D[翻譯輸出]

圖表翻譯:

此圖表示了玄貓的翻譯流程,從輸入文字開始,經過編碼器和解碼器,最終生成翻譯輸出。

7. 解碼器

解碼器是另一重要部分,它負責根據編碼器產生的編碼,一步一步地生成翻譯文字,每次生成一個詞彙,直到完成整個翻譯任務。

內容解密:

玄貓的翻譯過程涉及多個複雜的步驟,包括文字編碼、解碼和生成。編碼器首先將輸入文字轉換為機器可理解的編碼,然後解碼器根據這些編碼生成翻譯文字。這個過程需要大量的計算資源和先進的演算法支援,以確保翻譯的準確性和效率。

深度學習模型在自然語言處理中的應用

自然語言處理(NLP)是一個快速發展的領域,深度學習模型在其中發揮著重要作用。其中,Transformer架構是一種重要的模型,廣泛應用於語言翻譯、文字分類別等任務。

Transformer架構

Transformer架構由編碼器(Encoder)和解碼器(Decoder)兩部分組成。編碼器負責處理輸入文字,生成嵌入向量(Embedding Vector),這是一種數值表示,捕捉了文字中不同維度的資訊。解碼器則使用這些嵌入向量生成翻譯文字,一個詞彙一個詞彙地生成。

  graph LR
    A[輸入文字] --> B[編碼器]
    B --> C[嵌入向量]
    C --> D[解碼器]
    D --> E[翻譯文字]

內容解密:

上述流程圖展示了Transformer架構的基本工作流程。首先,輸入文字被送入編碼器中進行處理,生成嵌入向量。然後,解碼器使用這些嵌入向量生成翻譯文字。

BERT和GPT模型

BERT(Bidirectional Encoder Representations from Transformers)是一種預訓練模型,使用了Transformer架構的編碼器部分。它透過預測句子中某些詞彙的位置來進行訓練,從而學習到了文字中詞彙之間的關係。

GPT(Generative Pre-trained Transformer)則是一種根據Transformer架構的解碼器的模型,主要用於文字生成任務,如機器翻譯、文字摘要、創作等。

  graph LR
    A[BERT] --> B[編碼器]
    B --> C[預訓練模型]
    C --> D[文字分類別]
    D --> E[情感預測]
    E --> F[檔案分類別]
    
    G[GPT] --> H[解碼器]
    H --> I[文字生成]
    I --> J[機器翻譯]
    J --> K[文字摘要]
    K --> L[創作]

圖表翻譯:

上述圖表展示了BERT和GPT模型的基本工作流程。BERT使用編碼器進行預訓練,學習到了文字中詞彙之間的關係,而GPT則使用解碼器進行文字生成任務。

自然語言處理中的遮罩語言模型

在自然語言處理(NLP)領域中,BERT(Bidirectional Encoder Representations from Transformers)是一種著名的語言模型,它透過遮罩某些輸入詞彙來學習語言的內在結構和語義關係。在這種訓練方法中,部分詞彙被隨機遮罩,模型需要根據上下文預測被遮罩的詞彙。

遮罩語言模型的工作原理

當輸入詞彙被遮罩時,模型會嘗試根據剩餘的詞彙預測被遮罩的詞彙。這個過程可以看作是一種填空遊戲,模型需要根據上下文填入正確的詞彙。例如,給定一個句子「這是如何簡潔的範例,我可以是」,模型需要預測被遮罩的詞彙,以生成原始的句子「這是如何簡潔的範例,我可以簡潔」。

內容解密:

import torch
from transformers import BertTokenizer, BertModel

# 載入預訓練的BERT模型和分詞器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

# 定義一個句子,部分詞彙被遮罩
sentence = "這是如何簡潔的範例,我可以 [MASK]"

# 將句子轉換為BERT輸入格式
inputs = tokenizer(sentence, return_tensors='pt')

# 使用BERT模型預測被遮罩的詞彙
outputs = model(**inputs)

# 取得預測結果
predicted_token = torch.argmax(outputs.last_hidden_state[:, 0, :])

# 將預測結果轉換迴文字
predicted_word = tokenizer.convert_ids_to_tokens([predicted_token])[0]

print(predicted_word)

圖表翻譯:

  graph LR
    A[輸入句子] -->|被遮罩|> B[模型輸入]
    B -->|預測|> C[被遮罩的詞彙]
    C -->|填入|> D[原始句子]
    D -->|輸出|> E[最終結果]

圖表翻譯:

上述流程圖描述了遮罩語言模型的工作原理。首先,輸入句子被處理以生成模型輸入,其中部分詞彙被遮罩。然後,模型根據上下文預測被遮罩的詞彙,並將其填入原始句子中。最後,生成了最終結果,即填充完整的句子。這個過程展示了BERT等遮罩語言模型如何學習語言結構和語義關係,以實作高品質的自然語言生成和理解。

人工智慧語言模型的核心概念

人工智慧語言模型(LLM)是一種根據深度學習的技術,旨在理解和生成類別似人類語言的文字。其中,Transformer是一種常見的架構,廣泛應用於自然語言處理任務中。Transformer架構包括編碼器(encoder)和解碼器(decoder)兩個子模組。編碼器負責處理輸入文字,抽取有用資訊,而解碼器則根據這些資訊生成輸出文字。

大語言模型的訓練資料

大語言模型的訓練資料通常來自於大量的文字資料集。這些資料集包含了數十億個詞彙,涵蓋了多種主題、自然語言和電腦語言。例如,GPT-3的預訓練模型使用了一個龐大的資料集,包括了大量的文字資料。這些資料使得模型能夠學習到豐富的語言知識和模式,從而實作高品質的文字生成。

Transformer架構與LLM

雖然Transformer架構與LLM經常被混用,但它們並不完全相同。Transformer是一種更廣泛的架構,可以應用於電腦視覺等領域,而LLM則是一種特定的應用,專注於自然語言處理。目前,根據Transformer的LLM是最為常見和成功的應用,但也存在根據迴圈神經網路(RNN)和卷積神經網路(CNN)的LLM架構。這些替代架構旨在提高LLM的計算效率,但其效能和實用性仍需進一步評估。

文字生成和完成

文字生成和完成是LLM的一項基本功能。給定一個輸入序列,LLM可以生成一個合理的輸出序列。這項功能在多種應用中非常有用,例如自動回答、文字摘要和語言翻譯等。例如,給定一個英文句子,LLM可以生成其對應的德文翻譯。

圖表翻譯:

  graph LR
    A[輸入文字] --> B[編碼器]
    B --> C[解碼器]
    C --> D[輸出文字]

上述流程圖展示了LLM的基本工作流程,即從輸入文字到輸出文字的生成過程。

大語言模型的多功能性

大語言模型(LLM)如GPT系列,不僅能夠完成文字補全任務,還能夠根據輸入執行各種任務,而無需重新訓練、微調或更改模型架構。有時,提供目標的例子作為輸入是有幫助的,這被稱為少數示例設定。然而,GPT系列模型也能夠在沒有具體示例的情況下執行任務,這被稱為零示例設定。

資料集的重要性

表1.1列出了不同資料集的token數量,其中token是模型讀取的文字單位。第2章將詳細介紹tokenization,即將文字轉換為token的過程。最重要的是,這些模型的訓練資料集的規模和多樣性使得它們能夠在多種任務中表現良好,包括語言語法、語義和上下文,甚至需要一般知識的任務。

預訓練模型的優勢

這些預訓練模型的可塑性使得它們非常適合用於下游任務的微調,這也是為什麼它們被稱為基礎模型或基本模型的原因。預訓練LLM需要大量資源,並且非常昂貴。例如,GPT-3的預訓練成本估計為460萬美元。

GPT-3預訓練資料集

資料集名稱資料集描述token數量比例
CommonCrawl(過濾)網頁爬取資料410億60%
WebText2網頁爬取資料19億22%
Books1根據網際網路的書籍集12億8%
Books2根據網際網路的書籍集55億8%

內容解密:

上述表格展示了GPT-3預訓練資料集的組成,包括CommonCrawl、WebText2、Books1和Books2。這些資料集提供了豐富的文字資料,包括網頁內容和書籍內容,為GPT-3的預訓練提供了基礎。其中,CommonCrawl佔據了最大的比例,達到60%,而Books2佔據了8%的比例。

圖表翻譯:

  graph LR
    A[CommonCrawl] -->|60%|> B[GPT-3]
    C[WebText2] -->|22%|> B
    D[Books1] -->|8%|> B
    E[Books2] -->|8%|> B

上述Mermaid圖表展示了GPT-3預訓練資料集的組成,包括CommonCrawl、WebText2、Books1和Books2。每個資料集都對應一個特定的比例,共同組成了GPT-3的預訓練基礎。

從技術架構視角來看,構建自定義大語言模型(LLM)已成為提升特定領域自然語言處理能力的關鍵策略。本文深入探討了LLM的建立和使用階段,涵蓋了從預訓練到微調的完整流程,並闡述了Transformer架構、BERT、GPT等核心技術的應用。分析顯示,自定義LLM相比通用模型,在特定任務上展現出更優異的效能,尤其在金融、醫療等領域,BloombergGPT和醫學LLM的成功案例即為明證。此外,自定義LLM還能有效解決資料隱私和佈署靈活性等關鍵問題,例如在客戶端裝置上的佈署,降低延遲並節省伺服器成本。然而,構建LLM的過程也面臨挑戰,例如高昂的預訓練成本,如GPT-3的460萬美元投入。技術團隊需要在效能提升與資源投入之間尋求平衡,並關注模型訓練資料集的規模和多樣性,以確保模型的泛化能力。玄貓認為,隨著技術的持續發展和更多開源工具的出現,構建和佈署自定義LLM的門檻將逐步降低,未來LLM將在更多垂直領域釋放其巨大潛力,推動自然語言處理技術的革新。對於企業而言,應密切關注LLM技術的演進,評估其在自身業務場景中的應用價值,並及早規劃技術路線,以抓住這一波技術紅利。