iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
佛心分享-IT 人自學之術

學習 LLM系列 第 6

Day 6 了解詞向量與嵌入

  • 分享至 

  • xImage
  •  

Day 6 了解詞向量與嵌入

  • 詞向量 word embeddings : 將詞語轉換為數字表示的方法,這些數字表示的向量具有特定的性質,能夠表示詞語之間的語義和關聯性
  • 句子向量 sentence embeddings : 將整個句子表示為向量,在捕捉句子的整體含義、語氣和上下文

如何得到句子向量

  • 簡單平均詞向量(Avg word vectors): 把句中每個詞的靜態詞向量取平均(或加權平均),簡單但效果有限,尤其遇到語序、否定等語義結構時會失準
    使用預訓練的句子模型 :
  • Sentence-BERT (SBERT) : 把 BERT-type 模型經過 siamese / triplet 或 NLI 任務微調,使得直接對句向量做 cos 相似度能反映語意
  • Universal Sentence Encoder / InferSent / LASER / LaBSE:其他常見的句子向量模型,設計目標為語意相似度與多語支援
    從 Transformer 拿 pooled representation直接用 BERT 的 [CLS] 預測向量或做 mean pooling,但原生 BERT 沒有保證 [CLS] 代表整句語意(因此不如 SBERT 精準)
  • BERT(Bidirectional Encoder Representations from Transformers) : 理解上下文的語言代表模型

BERT 與其他模型差別

  • BERT:encoder-only,適合分類、NER、句子配對等下游任務。
  • GPT:decoder-only(causal LM),適合純生成。
  • Encoder-decoder(如 T5):同時做輸入編碼與輸出解碼,適合翻譯、摘要。

Siamese(孿生網路)

  • 概念:把同一個 encoder 複製成兩個支路(共享權重),輸入兩個句子各自得到向量,再用相似度函數(例如 cosine)計算距離。
  • 用途:常用於句子相似度/檢索任務(正樣本 vs 負樣本)。
  • 訓練:以正/負對(sentence A, sentence B, label)訓練,使正樣本對的向量靠近、負樣本對的向量遠離。

Triplet(三元組訓練)

  • 概念:每次訓練取三個句子:Anchor(A),Positive(P,與 A 相似),Negative(N,不相似)。
  • Loss(典型):triplet loss
    L=max⁡(0,  margin+d(A,P)−d(A,N))L = \max(0,; \text{margin} + d(A,P) - d(A,N))L=max(0,margin+d(A,P)−d(A,N))
    其中 d(⋅,⋅)d(\cdot,\cdot)d(⋅,⋅) 是距離(例如 Euclidean 或 1 - cosine),margin 是超參數。目標:讓 A 與 P 距離比 A 與 N 小至少 margin。
  • 用途:用於學習可區別性的向量空間(人臉辨識、句子向量等)。

NLI(自然語言推理,Natural Language Inference)

  • 概念:NLI 資料集(如 SNLI、MultiNLI)包含句對 + 標籤:entailment(蕴含)、contradiction(矛盾)、neutral(中立)。
  • 如何用來做句子向量:把句對和其 NLI 標籤當 supervision 訓練模型,或把 NLI 資料當作「相似/不相似」的標籤來源來微調,使語義相近(entailment)的句向量靠近。
  • SBERT(例子):Sentence-BERT 就把 BERT 用 siamese 結構,並用 NLI 類資料/對作為訓練,讓句向量直接可用於 cos 相似度比較

Universal Sentence Encoder(USE)

  • 由 Google 提出,有兩個主要變體:Transformer-based 與 DAN(Deep Averaging Network)。
  • 特點:設計為快且直接可用的句子表示;部分變體較輕量(DAN),適合實務快速部署。支援英語與部分多語版本。

InferSent

  • 由 Facebook 提出(較早的工作),使用 BiLSTM + max-pooling 的架構,並在 SNLI / MultiNLI 上訓練。
  • 特點:在其時代句子相似與文本分類表現很好(比簡單平均詞向量強),但比後來的 transformer-based SBER 類模型小幅落後。

LASER (Language-Agnostic SEntence Representations)

  • 由 Facebook AI 提出,是一個多語句子向量系統(BiLSTM + BPE),訓練使用大量平行語料(翻譯文本),目標是不同語言的相同句子產生相似向量(language-agnostic)。支援很多語言,適合跨語檢索 / 翻譯檢索情境。

LaBSE (Language-Agnostic BERT Sentence Embedding)

  • 由 Google 提出,是BERT-類的多語句子向量模型,透過平行語料與翻譯排序(translation ranking)類的訓練,使多語句子在向量空間對齊。支援大量語言(多達百餘語),在跨語檢索很受歡迎。

pooled representation(何謂「pooled representation」)

  • 定義:Transformer 類模型通常輸出每個 token 的向量(shape 為 [seq_len, hidden_dim])。把這些 token 向量「彙整 (pool)」成單一向量(shape [hidden_dim])的過程就叫做 pooling,所得到的向量稱為 pooled representation(句子或序列的整體向量)。

  • 常見 pooling 方法:

  1. [CLS] token:取輸出序列的第一個 token 的向量(BERT 的常用做法)。
  2. mean pooling / average pooling:把所有 token embedding 以平均值合成(通常會考慮 attention_mask,對 pad token 做掩蔽)。
  3. max pooling:對各維度取最大值。
  4. attentive pooling:用一個小 attention 層學習加權再合成(通常效果更好但需額外參數)。

[CLS]

  • 在 BERT 的輸入格式中,會在序列開頭加入一個特殊 token [CLS](classification token)。對於輸入 [CLS] token_1 token_2 ... token_n [SEP],模型會學到一個 CLS 的輸出向量。

  • 用途:在下游的分類任務中常把 CLS 的向量作為整句表示,再接一層 dense 做分類。(因此在 fine-tuning 時 CLS 會學習為分類提供好的表示)

  • 注意:BERT-預訓練的目標不是明確讓 CLS 成為通用句子嵌入,因此直接拿原始未經專門微調的 CLS 做語意檢索或相似度比較,常常表現不如經過 SBERT 類訓練後的 pooled vectors。

  • 在 Hugging Face 的 AutoModel 回傳的 outputs 通常有兩個相關欄位:

    • last_hidden_state[:,0,:]:就是 token 0(CLS)對應的最後隱藏層向量。
    • pooler_output:BERT 的 pooler(一個小 dense + tanh)對 CLS 的變換結果(但不是所有 model 都有 pooler_output)。

上一篇
Day 5 了解 Tokenizer
下一篇
Day 7 詞向量與句子向量的練習
系列文
學習 LLM8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言