Seq2Seq 適合哪種任務?
下列哪一種情境中最適合使用「序列到序列(Seq2Seq)」模型?
「序列到序列(Seq2Seq,Sequence-to-Sequence)」是一種模型架構,名字已經說清楚它做什麼:輸入一個「序列」,輸出另一個「序列」。
問你:哪種任務該用 Seq2Seq?
一句話總結
Seq2Seq 最適合「輸入一段文字,輸出語意等價的另一段文字」的任務,也就是將輸入文字轉換成語意等價的另一段文字,如自動翻譯或摘要生成,因為輸入長度和輸出長度都可以不同,但意義要保留。
先感受問題:輸入和輸出的「長度」不一樣時,怎麼辦
假設「全球通」翻譯平台的工程師蔡芸要建立一個中翻英系統:
輸出(英文):「Artificial intelligence technology is rapidly transforming the way various industries operate」(13 個英文詞)
關鍵問題:輸入 20 個中文字,輸出 13 個英文詞。輸入和輸出的長度不同,而且你在開始翻譯之前,根本不知道輸出會有幾個詞。
一般的神經網路(如 MLP、CNN)假設輸入和輸出的維度是固定的,沒辦法處理「長度可變的輸入到長度可變的輸出」。
這就是 Seq2Seq 要解決的核心問題。
在 Seq2Seq 出現前,翻譯系統怎麼做
早期機器翻譯用「統計方法」,踩了五個坑:
- 詞對詞翻譯的慘況:「我吃了很多飯」→「I eat many rice」,每個詞對一個詞翻,語法全錯,沒有整句語義的理解。
- 需要語言學家手工寫規則:要針對每個語言對(中英、英法)寫上千條語法規則,維護成本極高,換一個語言就要重頭來。
- 無法處理長距依賴:「雖然下雨,但他還是去了」,「雖然」和「還是」是一對,但如果句子很長,詞對詞翻譯完全抓不到這個關係。
- 固定長度向量的瓶頸:早期 RNN Encoder-Decoder 架構把整句壓縮成一個固定長度的向量,長句子的資訊丟失嚴重,句子越長翻得越爛。
- 無法共享跨任務知識:翻譯系統和摘要系統完全獨立,各自訓練,但兩個任務都是「文字轉文字」,底層能力本來可以共享。
Seq2Seq 的 Encoder-Decoder 架構怎麼解
蔡芸用的 Seq2Seq 模型分成兩個部分:
Encoder(編碼器):讀取輸入的中文句子,一個字一個字讀進去,把整個句子「理解」成一個意義向量(context vector)。
Decoder(解碼器):從這個意義向量開始,一個詞一個詞地生成英文,直到輸出「句子結束」符號。
→ Encoder 把它變成一個意義向量 [0.23, -0.81, 0.47, ...]
→ Decoder 從向量開始生成:「Artificial」→「intelligence」→「technology」→「is」→「rapidly」→「transforming」→「...」→「[END]」
重點是:Encoder 輸入多少個字都行,Decoder 輸出多少個詞都行,兩者透過意義向量連接,不需要長度一致。
這個架構之所以是 Seq2Seq 的「核心」,是因為它讓「文字轉文字」類的任務都能用同一個框架處理:翻譯、摘要、問答、對話、程式碼生成,全都是「一段文字 → 語意等價的另一段文字」。
這就是選項 D 講的:將輸入文字轉換成語意等價的另一段文字,如自動翻譯或摘要生成。
技術版:Seq2Seq 架構與 Attention 機制的原理
中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。
Seq2Seq 架構的基礎版使用 RNN(Recurrent Neural Network,遞迴神經網路)作為 Encoder 和 Decoder,但現代版本已幾乎全面改用 Transformer。
- Encoder 讀入整個輸入句子,把它「消化」成一個意義向量(context vector)
- Decoder 拿到這個向量,開始逐詞生成輸出
- 每生成一個詞,這個詞成為下一步的輸入(自迴歸生成)
- 遇到特殊的「[END]」符號,停止生成
- Attention 機制讓 Decoder 在生成每個詞時,回頭「注意」輸入句子的不同部分
| 故事 | 概念符號 |
|---|---|
| 讀入輸入序列 | Encoder: h_t = f(x_t, h_{t-1}) |
| 壓縮成意義向量 | context c = h_T(Encoder 最後隱藏狀態) |
| 解碼器初始狀態 | Decoder: s_0 = c |
| 逐詞生成輸出 | y_t = g(s_t, y_{t-1}) |
| Attention 注意力分數 | α_t = softmax(score(s_t, h_i)) |
- Encoder
- 負責「讀懂」輸入序列,把整個輸入轉換成向量表示(隱藏狀態)。
- Decoder
- 負責「生成」輸出序列,從 Encoder 的向量開始,一個詞一個詞地輸出。
- Context Vector(意義向量)
- Encoder 把輸入句子壓縮成的一個固定長度向量,傳給 Decoder 作為「理解輸入的記憶」。
- Attention(注意力機制)
- 讓 Decoder 在生成每個輸出詞時,動態關注 Encoder 不同位置的輸出,解決了固定 context vector 的資訊瓶頸問題。
- 自迴歸生成(Autoregressive)
- Decoder 每次生成一個詞,這個詞作為下一步的輸入,「用自己生的詞接著生」。
Attention 機制的核心公式(Bahdanau Attention):
# Attention 分數:衡量 Decoder 的當前狀態 s_t
# 與 Encoder 的每個隱藏狀態 h_i 的相關性
score(s_t, h_i) = v^T × tanh(W_s × s_t + W_h × h_i)
# 轉成機率分佈(各位置的注意力權重)
α_{t,i} = softmax(score(s_t, h_i))
# 加權平均 Encoder 的隱藏狀態,得到動態 context vector
c_t = Σ_i α_{t,i} × h_i
# Decoder 用動態 context 生成當前詞
y_t = softmax(W_y × [s_t ; c_t])
直觀理解:翻譯「蘋果(apple)」時,Attention 會讓 α 在輸入「蘋果」那個位置附近最高,讓 Decoder 知道「現在要翻譯的是這個部分」。
蓋住公式,說出 Seq2Seq + Attention 的流程:
- Encoder 讀入輸入序列,產生每個位置的隱藏狀態
- Decoder 開始生成,每步計算和 Encoder 各位置的 Attention 分數
- Attention 分數轉成權重(softmax),加權平均 Encoder 隱藏狀態
- Decoder 結合自己的狀態和動態 context,預測下一個詞
- 重複到輸出「[END]」停止
為什麼其他選項是錯的
A預測銷售趨勢曲線,輸出未來數值序列
輸入過去幾個月的銷售數字,輸出未來幾個月的預測數字。看起來也是「序列進、序列出」,應該符合 Seq2Seq?
這是時間序列預測(Time Series Forecasting)任務。雖然確實有「序列輸入,序列輸出」的形式,但輸入和輸出是同一個「值域」(都是數字),且輸出是輸入的延伸(預測未來),不是「語意轉換」。傳統上用 LSTM、ARIMA、Prophet 等時間序列模型,而不是 Seq2Seq。更關鍵的是,Seq2Seq 的設計動機是「語意空間的轉換」(中文意思 → 英文意思),不是數值序列的外插(extrapolation)。
看到「序列輸出」就聯想到 Seq2Seq 的人。關鍵是輸出是否需要「語意理解與重新生成」,預測未來銷售數字是數學外插,不需要語意理解。
B辨識文本中出現的人名、地名與組織名稱等實體資訊
讀入一段文字,找出裡面的「蘋果公司(組織名)」「台北市(地名)」「林雅翠(人名)」,給每個詞貼標籤。
這是命名實體識別(NER,Named Entity Recognition)任務,屬於「序列標注(Sequence Labeling)」類型,不是序列轉序列。輸入是詞序列,輸出是對應的標籤序列(每個詞對應一個標籤:O / B-PER / I-PER / B-LOC …),輸入和輸出長度一樣,是「一對一」的對應,不是 Seq2Seq 的「任意長度輸入到任意長度輸出」。NER 更常用 BERT + CRF 架構。
看到「從文字裡提取資訊」就聯想到 Seq2Seq 的人。NER 的輸出雖然也是序列,但長度和輸入相同,每個位置一一對應,不需要「編碼整句再解碼成新序列」的機制。
C對輸入文本中的關鍵字進行頻率統計與可視化
分析一篇文章,統計哪些詞出現最多次,畫出文字雲或長條圖。
這根本不是機器學習模型的任務,而是基本的詞頻統計(Frequency Count),用 Python 的 collections.Counter 或 TF-IDF 就能做,完全不需要神經網路,更不需要 Seq2Seq。Seq2Seq 處理的是「語意理解後的文字生成」,和「數數哪個詞出現幾次」毫無關係。
對「AI 分析文字」和「統計分析文字」沒有區分的人。AI 模型是在「沒有明確規則的情況下自動學習語言規律」,而詞頻統計是有明確計算規則的算法,兩者差很多。
同個考點下次怎麼變形
對話系統(聊天機器人)算是 Seq2Seq 嗎?
使用者說一句話,機器人回一句話,是「序列進、序列出」,應該是 Seq2Seq?
是的,對話系統是 Seq2Seq 的經典應用之一。輸入是使用者的話(序列),輸出是機器人的回覆(語意等價但不同形式的序列)。早期對話系統確實直接套 Seq2Seq 架構,現代則改用更強大的 Transformer 架構(如 GPT、T5),但底層邏輯仍然是 Seq2Seq 的 Encoder-Decoder 概念。GPT 的「Pure Decoder」架構是 Seq2Seq 的一個特例(Encoder 和 Decoder 合在一起)。
圖像描述生成(Image Captioning)是 Seq2Seq 嗎?
輸入是圖片(不是序列),輸出是一段描述文字(序列),算 Seq2Seq 嗎?
是「廣義 Seq2Seq」,但輸入不是序列。圖像描述生成的架構是 CNN Encoder(把圖片轉成向量)+ RNN / Transformer Decoder(生成文字),原理和 Seq2Seq 相同(Encoder 理解輸入,Decoder 生成輸出),但嚴格定義的 Seq2Seq 輸入是序列。現代做法把圖片切成 patches 後用 ViT 處理,這樣輸入就真的是序列了。
Transformer 和 Seq2Seq 的關係是什麼?
現在大家都在講 Transformer,Seq2Seq 是舊技術了嗎?
Transformer 是 Seq2Seq 框架的進化版實作。原始 Seq2Seq 用 RNN 實作 Encoder 和 Decoder,有處理長序列時資訊遺失的問題。Transformer(2017 年 Google「Attention is All You Need」論文)用 Self-Attention 完全取代 RNN,解決了長距依賴問題,訓練速度也大幅提升。T5、BART 等模型都是「Transformer 架構的 Seq2Seq 模型」,概念框架(Encoder 理解、Decoder 生成)完全一樣,只是內部實作用 Transformer 取代了 RNN。
Seq2Seq 在生物資訊學有哪些應用?
Seq2Seq 是自然語言處理技術,和生物學有什麼關係?
DNA 序列和蛋白質序列都是「序列」,Seq2Seq 的框架完全可以套用。主要應用有三個:第一是 DNA 序列到蛋白質序列的預測(基因表達);第二是蛋白質結構預測的中間步驟;第三是分子翻譯(把一種化學結構表示法轉換成另一種)。AlphaFold 雖然不是純 Seq2Seq,但它的 Encoder 部分用了 Seq2Seq 相關的 Transformer 技術處理蛋白質序列。
怎麼評估 Seq2Seq 翻譯模型的品質?
翻譯有很多種說法都是對的,怎麼自動評估好不好?
最常用的是 BLEU(Bilingual Evaluation Understudy)分數:把機器翻譯的輸出和人類參考翻譯對比,計算 n-gram 重疊率。BLEU 1.0 代表完全一致,0 代表完全不同。實務上 BLEU 0.3~0.4 已算不錯的翻譯。摘要任務用 ROUGE(Recall-Oriented Understudy for Gisting Evaluation),評估摘要和參考摘要的 n-gram 召回率。這兩個指標都是「和人類翻譯的字面相似度」,不完全代表語意品質,所以還需要人工評估(如 MOS 分數)。
想再往下看,這 5 個
- 序列到序列模型(Seq2Seq)正解核心:Encoder 把輸入序列編碼成向量,Decoder 解碼出輸出序列,適合翻譯、摘要等輸入輸出長度不同的任務。
- 機器翻譯(Machine Translation)Seq2Seq 最經典的應用場景,中翻英等「語意等價轉換」任務是考題中的核心情境,也是 Seq2Seq 的發展動力。
- 轉換器架構(Transformer)現代 Seq2Seq 的主流實作,用 Self-Attention 取代 RNN,大幅改善長序列的語意捕捉能力和訓練效率。
- 文本摘要(Text Summarization)Seq2Seq 另一個典型應用,輸入長文、輸出短摘要,屬於「序列轉序列」的語意壓縮任務,和翻譯並列為正解例子。
- 注意力機制(Attention Mechanism)讓 Decoder 生成每個詞時動態聚焦輸入序列的相關位置,解決固定向量的資訊瓶頸,是 Seq2Seq 品質的關鍵突破。