Embedding 是把文字(字、詞、句子)轉成一串數字(向量),語意相近的內容,在向量空間裡的距離也會比較近。這份筆記整理幾個常見的 embedding 模型,從早期的靜態詞向量,到後來能理解上下文的 Transformer 系列。
架構與訓練方式
| 模型 | 架構 | 訓練方式 | 上下文理解 |
|---|---|---|---|
| Word2Vec | 淺層神經網路(CBOW/Skip-Gram) | 預測窗口內的周圍詞 | 無,只看局部窗口 |
| GloVe | 詞共現矩陣分解 | 統計全語料的詞共現次數後做矩陣分解 | 無,看整體語料統計 |
| Item2Vec | 雙塔模型(推薦系統用) | 模仿 Word2Vec,用行為序列(例如購物紀錄)預測 | 無,只看局部行為 |
| FastText | Word2Vec 變種,多算子詞(n-gram) | 用子詞而不是整個詞來訓練 | 無,但處理罕見詞比較好 |
| ELMo | 堆疊雙向 LSTM,正向反向各自訓練 | 分別訓練「從左到右」「從右到左」的語言模型 | 強,序列級、動態詞向量 |
| GPT | 單向 Transformer Decoder | 自回歸預測下一個詞 | 單向,只看得到前面出現過的詞 |
| BERT | 雙向 Transformer Encoder | Masked Language Model + Next Sentence Prediction | 雙向,看得到整句前後文 |
優缺點與適合場景
| 模型 | 優點 | 缺點 | 適合場景 |
|---|---|---|---|
| Word2Vec | 訓練快、效果穩定 | 一個詞只有一個向量,處理不了多義詞 | 輕量級 NLP 任務、當作其他模型的前處理 |
| GloVe | 有考慮全語料的統計資訊,語義表達不錯 | 共現矩陣佔記憶體,向量訓練完就固定不變 | 語義相似度計算、分類前的特徵抽取 |
| Item2Vec | 能處理使用者與商品之間的關係 | 只看局部行為,抓不到複雜的交互 | 商品推薦、行為序列建模 |
| FastText | 沒看過的詞(OOV)也能算出向量,比 Word2Vec 更穩 | 長距離的語義理解還是弱 | 文字分類、低資源語言 |
| ELMo | 動態詞向量,同一個詞在不同句子裡向量不同,能處理多義詞 | 訓練慢,長文本不好擴展 | 需要上下文的 NLP 任務、特徵抽取 |
| GPT | 生成能力強,容易微調到各種下游任務 | 只看得到前面的詞,用不到後面的上下文 | 文字生成、問答、對話 |
| BERT | 雙向理解,各種分類/理解任務表現都不錯 | 訓練成本高,推理速度比較慢 | 文字分類、命名實體辨識、問答 |
演進關係
Word2Vec 是很多方法的起點。
FastText、GloVe 都是從 Word2Vec 的想法延伸出來的。
Item2Vec 借用 Word2Vec 的技巧,把它用在推薦系統上。
傳統的靜態詞向量沒辦法處理多義詞、抓不到長距離語境,這是 ELMo 想解決的問題,也間接帶出後來的 Transformer。
Transformer 出現後分成兩支:GPT 是單向、BERT 是雙向。