Transformer 入門
計算機科學和人工智慧的自然語言處理 (NLP) 分支專注於計算機和人類語言之間的互動方式。它涉及建立能夠分析、理解和生成人類語言的模型和演算法。
NLP 用於解決許多問題,包括語言翻譯、情感分析、文字摘要、語音識別和問答系統。隨著數字文字資料呈指數級增長,以及從這些資料中提取見解和知識的需求不斷增加,這些應用變得越來越重要。
什麼是 NLP 中的 Transformer?
Transformer 是一種特定型別的神經網路架構,由於其能夠對文字資料中的長距離依賴關係進行建模,因此在 NLP 中變得非常流行。它們最初由 Vaswani 等人在 2017 年的一篇基礎性論文中提出,並已迅速獲得普及。例如,迴圈神經網路 (RNN) 是傳統的 NLP 模型,它們採用迭代方法處理輸入,並依賴於隱藏狀態來跨時間傳遞資訊。但是,這種方法可能難以捕獲序列中稍後發生的依賴關係,這可能導致在需要長期上下文的任務上的效能不佳。
RNN 約定示例
例如,考慮電影評論中的以下句子:“這部電影很好,但不是很好。”
評論者表達了一種矛盾的情緒,認為這部電影還可以,但並非出色。但是,RNN 模型可能無法準確地捕捉這種細微差別並預測情感是正面還是負面,這取決於它關注句子的哪個部分。如果模型只考慮“好”這個詞,它可能會預測正面情感;如果只考慮“不是很好”這個短語,它可能會預測負面情感。為了解決這個問題,已經提出了更復雜的模型,例如 Transformer。這些模型在自然語言處理中的情感分析任務中取得了巨大的成功。
然而,Transformer 使用自注意力機制來計算每個位置的輸入序列的加權總和,使它們能夠識別整個序列中的依賴關係。這使得它們適用於諸如機器翻譯之類的任務,在這些任務中,在生成翻譯之前,理解整個句子的整體文字至關重要。Transformer 具有高度並行性,並且能夠對長距離依賴關係進行建模,這使得它們非常適合在分散式計算系統中對大型資料集進行訓練。這使得研究人員能夠訓練更大、更復雜的模型,從而顯著提高了它們在各種 NLP 任務上的效能。
在自然語言處理 (NLP) 中,經常使用許多不同型別的 Transformer。下面列出了四個最重要的類別,並分別提供了一個示例:
僅編碼器 Transformer
僅解碼器 Transformer
編碼器-解碼器 Transformer
動態卷積 Transformer
僅編碼器 Transformer
僅具有編碼器元件(沒有解碼器元件)的 Transformer 稱為僅編碼器 Transformer。這些模型通常用於輸入序列被處理並作為一個單元進行分類的任務,例如短語分類和命名實體識別。BERT(來自 Transformer 的雙向編碼器表示)和 RoBERTa(魯棒最佳化的 BERT 預訓練技術)是僅編碼器 Transformer 的兩個示例。
僅解碼器 Transformer
僅具有解碼器元件的 Transformer 稱為僅解碼器 Transformer,因為它們沒有編碼器元件。這些模型通常用於諸如語言生成和機器翻譯之類的任務,在這些任務中,模型需要根據輸入序列生成輸出序列。GPT(生成式預訓練 Transformer)和 GPT-2 是僅解碼器 Transformer 的兩個示例。
編碼器-解碼器 Transformer
同時具有編碼器和解碼器元件的 Transformer 稱為編碼器-解碼器 Transformer。這些模型通常用於諸如機器翻譯之類的應用,其中模型需要首先將輸入序列編碼成固定長度的表示,然後將該表示解碼成輸出序列。Vaswani 等人提出的第一個 Transformer 模型以及更新的 T5(文字到文字傳輸 Transformer)是編碼器-解碼器 Transformer 的兩個示例。
動態卷積 Transformer
一種相對較新的 Transformer 類別,稱為動態卷積 Transformer,它用動態卷積替換了傳統的自注意力機制。這些模型保留了傳統 Transformer 的計算效率,同時能夠捕獲文字資料中的長距離依賴關係。最近提出的 Longformer 模型是動態卷積 Transformer 的一個示例。
選擇最佳的 Transformer 型別將取決於手頭的特定 NLP 任務,因為每種型別都有其自身的優缺點。但是,它們都是對自然語言資料進行有效建模的工具,並且有助於 NLP 取得重大進步。
使用的庫和示例
Hugging Face Transformers
一家名為“Hugging Face”的公司建立了自然語言處理的工具和庫,例如著名的 Transformers 開源庫。Transformers 庫提供了預訓練模型和各種 NLP 任務,使研究人員和從業者能夠輕鬆地將其用於自己的工作中。
以下是如何使用預訓練的 BERT 模型使用 Transformers 庫對一段文字執行情感分析的示例:
示例
from transformers import pipeline
# creates a sentiment analysis pipeline
classifier = pipeline("sentiment-analysis", model="bert-base-uncased")
# Distinguish the sentiment of a piece of text
text = "I really enjoyed the movie"
result = classifier(text)[0]
# prints the final result.
print(f"Text: {text}")
print(f"Sentiment: {result['label']}")
print(f"Score: {result['score']}")
輸出
Text: I really enjoyed the movie Sentiment: LABEL_1 Score: 0.7276840806007385
在這個示例中,我們使用了一個預訓練的 BERT 模型 (bert-base-uncased) 和 Transformers 庫中的 pipeline 函式來構建一個情感分析管道。然後將文字樣本提供給管道,它輸出一個字典,其中包含預測的情感標籤(正面或負面)以及預測的置信度分數。最後,我們列印了結果。
需要注意的是,還有許多其他預訓練模型和 NLP 任務可以使用類似的方式使用,這只是一個使用 Transformers 庫的示例。
圖解 Transformer - 圖解 Transformer 由 Jay Alammar 開發,它以視覺化的方式解釋了 Transformer 的內部工作原理。它詳細描述了 Transformer 的工作方式,並用插圖和程式碼片段闡明瞭每個步驟。
帶註釋的 Transformer - 帶註釋的 Transformer 是對 Vaswani 等人最初的 Transformer 論文的全面解釋,並附帶 PyTorch 程式碼。它提供了對 Transformer 背後的底層數學概念的更深入的理解,對於希望從頭開始構建自己的 Transformer 模型的任何人來說,都是一個很好的起點。
結論
總之,Transformer 是一種處理自然語言的有效方法,並且正在越來越多的應用中得到使用。無論您是想使用自己的資料微調預訓練模型,還是從頭開始構建自己的 Transformer,都有許多工具可以幫助您入門。我們真誠地希望本文能成為您瞭解 Transformer 世界的見解,我們強烈建議您進一步瞭解它們,並探索它們能為您做什麼。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP