博客 / 詳情

返回

吳恩達深度學習課程五:自然語言處理 第三週:序列模型與注意力機制(一)seq2seq 模型

此分類用於記錄吳恩達深度學習課程的學習筆記。
課程相關信息鏈接如下:

  1. 原課程視頻鏈接:[雙語字幕]吳恩達深度學習deeplearning.ai
  2. github課程資料,含課件與筆記:吳恩達深度學習教學資料
  3. 課程配套練習(中英)與答案:吳恩達深度學習課後習題與答案

本篇為第五課第三週的內容,3.13.6的內容。


本週為第五課的第三週內容,與 CV 相對應的,這一課所有內容的中心只有一個:自然語言處理(Natural Language Processing,NLP)
應用在深度學習裏,它是專門用來進行文本與序列信息建模的模型和技術,本質上是在全連接網絡與統計語言模型基礎上的一次“結構化特化”,也是人工智能中最貼近人類思維表達方式的重要研究方向之一。
這一整節課同樣涉及大量需要反覆消化的內容,橫跨機器學習、概率統計、線性代數以及語言學直覺。
語言不像圖像那樣“直觀可見”,更多是抽象符號與上下文關係的組合,因此理解門檻反而更高
因此,我同樣會儘量補足必要的背景知識,儘可能用比喻和實例降低理解難度。
本週的內容關於序列模型和注意力機制,這裏的序列模型其實是指多對多非等長模型,這類模型往往更加複雜,其應用領域也更加貼近工業和實際,自然也會衍生相關的模型和技術。而注意力機制則讓模型在長序列中學會主動分配信息權重,而不是被動地一路傳遞。二者結合,為 Transformer 等現代架構奠定了基礎。

本篇的內容關於seq2seq 模型,是對多對多非等長模型的展開介紹。

1.seq2seq 模型(Sequence to Sequence Model)

2014 年被普遍認為是seq2seq模型真正成型的關鍵年份。
首先,起源論文 Sequence to Sequence Learning with Neural Networks被髮表,其中首次系統性地驗證了基於 RNN 的 Encoder–Decoder 架構 可以直接建模“輸入序列 → 輸出序列”的生成過程,併成功應用於機器翻譯任務。這項工作明確確立了 seq2seq 作為一種通用序列生成範式,也奠定了後續神經機器翻譯模型的基本結構。

幾乎在同一時期,另一篇論文Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation從表示學習的角度提出了 RNN Encoder–Decoder 這一結構性思想,並引入了帶門控機制的循環單元(後來發展為 GRU)。這項工作強調編碼器學習語義表示、解碼器建模條件生成分佈,為隨後注意力機制的提出提供了直接的理論與結構基礎

這兩篇論文從工程實現與結構抽象兩個互補視角,共同奠定了 seq2seq 模型與編碼–解碼範式在自然語言處理中的核心地位。

同樣簡單介紹一下歷史,看起來很高深,但其實許多內容在我們之前就已經知道了,只是現在我們為其正式命名引入了,下面就來分點展開:

1.1 seq2seq 模型:編碼-解碼結構

seq2seq 模型的全稱是 Sequence to Sequence 模型,顧名思義,是指 “序列到序列” 的模型。
在我們之前介紹的RNN 結構類型中,seq2seq 模型專指輸入為序列,輸出同樣為序列的多對多非等長模型。

這裏很容易產生一個問題:為什麼多對多等長模型,就像我們之前演示的命名實體識別,不也是輸入序列,輸出序列嗎?它為什麼不被歸納在 seq2seq 模型中呢?
實際上,二者的差異存在於它們的模型結構和傳播邏輯上,我們簡單展開如下:
image.png
總結來説,seq2seq 面向的是“生成另一段序列”的問題,而命名實體識別等對多等長模型面向的是“對原序列逐位置打標籤”的問題。
前者是非等長的序列生成,後者是等長的序列標註,因此後者不被歸入 seq2seq 模型範疇。

在明確了概念後,接下來就可以具體來看 seq2seq 模型內部最核心的結構設計——編碼–解碼(Encoder–Decoder)框架

在剛剛的圖中我們已經看到了,在經典的 seq2seq 模型中,整體網絡通常由兩個相互獨立但邏輯上強耦合的子網絡組成:

  1. 編碼器(Encoder):將輸入序列壓縮為語義表示。
  2. 解碼器(Decoder):基於語義表示生成輸出序列。

展開如下:
image.png
從整體結構上看,seq2seq 的編碼–解碼框架有幾個特點:

  1. 輸入序列與輸出序列在時間維度上不要求對齊,既非等長。
  2. 編碼階段與解碼階段在結構上明確分離
  3. 輸出是一個生成過程,而非逐位置的判別結果,其傳播類似我們之前介紹的新序列採樣。

正是這些特徵,讓其擁有廣泛的應用領域和極高的延展性,下面就來看看seq2seq 的一些具體應用。

1.2 seq2seq 模型的應用領域

可以看到,seq2seq 模型的核心能力在於:在不要求輸入輸出對齊的前提下,將一段序列映射為另一段序列,並通過生成過程逐步給出結果。
這一特性決定了 seq2seq 並不適用於“逐位置判別”的任務,而是天然適合語義層面的序列轉換問題
聽起來有些抽象,展開來説:seq2seq 模型的應用並不依賴具體任務形式,而依賴於一個條件:

任務是否可以被表述為“在理解一段序列後,生成另一段序列”。

正是這一能力,使得 seq2seq 在多個領域中展現出極強的通用性,簡單列舉如下:

應用領域 輸入序列 輸出序列
機器翻譯 源語言句子 目標語言句子
文本摘要 長文本序列 短摘要序列
對話系統 / 文本生成 用户輸入文本 系統回覆文本
語音識別 聲學特徵序列 文本序列

這些都並不難理解,無非是數據不同,編碼解碼的模型結構都是相通的,就不再展開了。
值得一提的是,吳恩達老師在課程裏舉了一個特別的例子:圖像描述生成(Image Captioning)。
image
如圖,在這一任務中,模型的輸入不再是文本序列,而是一張圖像,輸出則是一段自然語言描述。 但它依然可以被納入 seq2seq 的框架之中。
其核心思想在於: 只要能夠將輸入數據編碼為一種序列化或向量化的語義表示,後續的解碼過程就仍然可以按照“序列生成”的方式進行。
在圖像描述生成任務中,圖像通常首先由卷積神經網絡提取為高層語義特徵,作為編碼器的輸出,解碼器則在這一語義表示的條件約束下,逐詞生成對應的文本描述。

像這種“非文本輸入 → 文本輸出”的建模方式,讓模型不再侷限於單一模態的數據,我們便稱這類建模方式為多模態學習。
我們最常見的 AI 就是一種多模態模型,你不僅可以和 AI 進行文字交流,還可以上傳圖片或文件並讓其輸出不同內容。
從這一視角來看,seq2seq 並不僅是一類 NLP 模型結構,而是一種可以跨模態複用的序列建模範式。

對 seq2seq 的基礎內容就介紹到這裏,下面我們展開介紹一下 seq2seq 模型特有的評估指標:BLEU 得分。

2. BLEU 得分(Bilingual Evaluation Understudy)

seq2seq 模型出現後,一個緊隨而來的問題就是:如何非手工地判斷模型生成的這一整段序列,究竟好不好?

對於分類或序列標註任務,我們可以逐位置對比預測結果與真實標籤,直接計算準確率或 F1。
但在機器翻譯、文本摘要等 seq2seq 任務中,輸出往往是不固定長度的一整句話甚至一整段文本,且“正確答案”並不唯一。 這就使得傳統指標幾乎失效。

以機器翻譯為例,假設參考譯文為:I like machine learning.
而模型輸出為: I enjoy machine learning.
從語義上看,這兩個句子幾乎完全一致。但如果我們採用“逐詞是否相同”的方式進行評估,模型反而會被判定為錯誤。
也就是説: seq2seq 任務的評價目標是“語義相似度”,而不是“形式一致性”。

於是,在 2002 年的論文: BLEU: a Method for Automatic Evaluation of Machine Translation中,首次提出了 BLEU 指標,用於在不依賴人工逐句評審的前提下,對機器翻譯結果進行自動化評估。
其基本思想可以概括為一句話: 如果模型生成的結果,在局部片段層面上與人工參考結果高度重合,那麼整體質量往往也是可信的。

下面就來展開介紹其評估過程:

2.1 n-gram 精確率(Modified n-gram Precision)

計算 BLEU 得分的第一步,是 計算n-gram 精確率
所謂 n-gram,就是把候選序列劃分為長度為 \(n\) 的連續詞片段,例如:

  • unigram(\(n=1\)):單個詞就是一個 unigram
  • bigram(\(n=2\)):相鄰兩個詞組合起來是一個 bigram
  • trigram(\(n=3\)):相鄰三個詞組合起來是一個 trigram

BLEU 的關鍵並不在於“詞有沒有出現”,而在於模型生成的局部結構,是否與人工譯文存在重合

我們仍然使用前面的例子,並假設已經完成分詞:

  1. 參考標籤:[I, like, machine, learning],長度 \(r = 4\)
  2. 候選輸出:[I, enjoy, machine, learning],長度 \(c = 4\)

下面,就是用這一公式來計算對應的 n-gram 精確率:

\[p_n = \frac{\sum_{\text{ngram}} \min(\text{Count}_{\text{cand}}, \text{Count}_{\text{ref}})}{\sum_{\text{ngram}} \text{Count}_{\text{cand}}} \]

我們用文字來展開這個計算過程:

  1. 枚舉候選序列中的每一個 n-gram:將模型輸出序列切分成長度為 \(n\) 的連續片段。
  2. 統計候選 n-gram 與參考 n-gram 的匹配次數:
    • \(\text{Count}_{\text{cand}}\) 表示候選序列中該 n-gram 出現的次數。
    • \(\text{Count}_{\text{ref}}\) 表示參考序列中該 n-gram 出現的次數。
    • 取最小值 \(\min(\text{Count}_{\text{cand}}, \text{Count}_{\text{ref}})\) 計算合理匹配次數。
  3. 除以候選序列中所有 n-gram 的總數:這相當於計算了候選序列中有多少比例的 n-gram 與參考序列匹配,即“精確率”。

下面就來具體演示一下:

首先,我們計算 Unigram,即 \(n=1\)

Unigram Candidate 出現次數 Reference 出現次數 \(\min(\text{Count}_{\text{cand}}, \text{Count}_{\text{ref}})\)
I 1 1 1
enjoy 1 0 0
machine 1 1 1
learning 1 1 1

因此:

\[p_1 = \frac{1+0+1+1}{4} = \frac{3}{4} = 0.75 \]

繼續,我們在試試 Bigram,即 \(n=2\)

Bigram Candidate 出現次數 Reference 出現次數 \(\min(\text{Count}_{\text{cand}}, \text{Count}_{\text{ref}})\)
(I, enjoy) 1 0 0
(enjoy, machine) 1 0 0
(machine, learning) 1 1 1

因此 Bigram 精確率為:

\[p_2 = \frac{0 + 0 + 1}{3} = \frac{1}{3} \approx 0.333 \]

以此類推,繼續計算:

  • trigram:完全無匹配,\(p_3 = 0\)
  • 4-gram:完全無匹配,\(p_4 = 0\)

最終,你會發現,這一步,其實是在不同尺度上計算候選序列和參考序列的匹配度。

2.2 長度懲罰 BP(Brevity Penalty)

在最終計算之前,BLEU 專門設置了一個參數 BP 用來解決這樣一個問題:

如果只看 n-gram 精確率,模型可以“作弊”——生成很短的序列,只輸出部分正確詞,就可能獲得很高分。

其公式如下:

\[\text{BP} = \begin{cases} 1, & c > r \\ \exp\left(1 - \frac{r}{c}\right), & c \le r \end{cases} \]

其中, \(c\) 是模型生成序列的長度、\(r\) 是參考序列的長度。

計算得到的 BP 會作為最終評估的係數,因此,它的語義是這樣的:

  • 如果生成序列長度 >= 參考長度,BP = 1,不額外懲罰。
  • 如果生成序列太短,BP < 1,會對總分進行指數級扣分。

舉個例子:
設參考序列長度 \(r = 4\) 、模型生成序列長度 \(c = 2\) ,計算 BP 為:

\[\text{BP} = \exp(1 - \frac{4}{2}) = \exp(-1) \approx 0.368 \]

這樣,即使 unigram/bigram 匹配較好,最終 BLEU 分數也會因為序列太短而大幅下降。

BP 的引入確保 BLEU 得分不僅考慮 局部 n-gram 匹配,還考慮 生成序列長度合理性
簡單來説:短序列不能通過“少輸出”來刷分

2.3 多階 n-gram 的幾何平均

你會發現:低級 n-gram 到高階 n-gram 實際上是對語序的逐步注重。
而如果只使用 unigram,模型可能生成一堆“正確的詞”,但語序混亂;如果只使用高階 n-gram,又會對細微差異過於苛刻。
因此,BLEU 的做法是:同時計算多個 \(p_n\),並取它們的幾何平均。

其中,最常見的就是 BLEU-4,即和我們剛剛一樣計算前四階 n-gram 進行最終評估,公式如下:

\[\text{BLEU} = \text{BP} \cdot \exp\left( \sum_{n=1}^{4} w_n \log p_n \right) \]

其中,參數 \(w_n\) 就是\(n\) 階 n-gram 在最終得分中所佔的權重,通常取均等權重 \(w_n = \frac{1}{4}\)
對數和再指數的方式,可以把幾何平均轉化為加權 log 和的形式,計算更穩定,同時也避免了直接乘法下的數值下溢(數值太小了超出存儲位數,導致計算機無法精確表示)。

在我們的例子中:

\[p_1 = 0.75,\quad p_2 \approx 0.333,\quad p_3 = 0,\quad p_4 = 0 \]

\[\exp\left( \sum_{n=1}^{4} w_n \log p_n \right) = \prod_{n=1}^4 p_n^{w_n} = 0.75^{0.25} \cdot 0.333^{0.25} \cdot 0^ {0.25} \cdot 0^ {0.25} = 0 \]

此時可以看出一個問題:只要某一階 \(p_n = 0\),整體 BLEU 就會變為 0。

這並不是缺陷,而是 BLEU 的一個重要使用前提: BLEU 是為“語料級評估”設計的,而不是單句評估指標。
在真實使用中,BLEU 會在整個測試集上累加 n-gram 統計後再計算,此時 \(p_n\) 幾乎不會為 0。

由此,我們就完成了 BLEU 指標的計算。
BLEU 是首個自動化、可復現的序列生成評價指標,為神經機器翻譯和 seq2seq 研究奠定了基礎,它主要依賴 n-gram 匹配,極大加速了模型調試與對比,但也有其侷限性:對語義和多樣性敏感性不足。
因此,後續也發展出更多了指標,如 BERTScore、ROUGE、CIDEr 等,它們在語義理解、多樣性和跨模態任務上進行了改進與拓展,我們遇到再展開。

3.總結

概念 原理 比喻 / 直觀理解
seq2seq 模型 輸入序列映射到輸出序列,允許非等長,基於編碼–解碼結構 將一句話“翻譯”成另一句話,就像把中文句子轉換成英文句子
編碼器 (Encoder) 將輸入序列壓縮為固定維度的語義表示 像把整篇文章壓縮成大腦裏的核心理解
解碼器 (Decoder) 根據編碼器提供的語義表示逐步生成輸出序列 像根據腦中理解逐字複述或生成一句話
應用領域 機器翻譯、文本摘要、對話系統、語音識別、圖像描述生成 將不同模態的輸入(文本、語音、圖像)轉化為另一段序列輸出
BLEU 指標 基於 n-gram 精確率和長度懲罰 BP 計算序列生成質量 檢查生成句子中局部片段有多少和參考句子重合,順序和長度也考慮在內
n-gram 精確率 統計候選序列與參考序列 n-gram 的匹配比例 像對比兩段文字中每個詞或詞組出現情況
Brevity Penalty (BP) 對生成過短的序列進行懲罰,防止“少説就高分” 就像考試中答題太短,即使答案對也會扣分
幾何平均 (多階 n-gram) 對不同階 n-gram 精確率取幾何平均並加權 平衡單詞準確性和語序準確性,既考慮詞對又考慮短語對
BLEU 侷限 單句容易為 0,主要用於語料級評估,對語義和多樣性敏感性不足 就像只看字面重合,可能忽略同義表達
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.