斯坦福NLP課程 | 第12講 – NLP子詞模型
- 作者:韓信子@ShowMeAI,路遙@ShowMeAI,奇異果@ShowMeAI
- 教程地址://www.showmeai.tech/tutorials/36
- 本文地址://www.showmeai.tech/article-detail/249
- 聲明:版權所有,轉載請聯繫平台與作者並註明出處
- 收藏ShowMeAI查看更多精彩內容
ShowMeAI為斯坦福CS224n《自然語言處理與深度學習(Natural Language Processing with Deep Learning)》課程的全部課件,做了中文翻譯和注釋,並製作成了GIF動圖!視頻和課件等資料的獲取方式見文末。
引言
授課計劃
- A tiny bit of linguistics / 語法學基礎知識
- Purely character-level models / 基於字符粒度的模型
- Subword-models: Byte Pair Encoding and friends / 子詞模型
- Hybrid character and word level models / 混合字符與詞粒度的模型
- fastText / fastText模型
1.語法學基礎知識
1.1 人類語言的聲音:語音學和語音體系
- 語音學 (honetics) 是音流無爭議的
物理學
- 語音體系 (Phonology) 假定了一組或多組獨特的、分類的單元:音素 (phoneme) 或者是獨特的特徵
- 這也許是一種普遍的類型學,但卻是一種特殊的語言實現
- 分類感知的最佳例子就是語音體系
- 音位差異縮小
- 音素之間的放大
1.2 詞法:詞類
- 傳統上,詞素 (morphemes) 是最小的語義單位
\[\left[\left[\text {un}\left[[\text { fortun }(\mathrm{e})]_{\text { Root }} \text { ate }\right]_{\text { STEM }}\right]_{\text { STEM }} \text {ly}\right]_{\text { WORD }}
\]
\]
- 深度學習:形態學研究較少;遞歸神經網絡的一種嘗試是 (Luong, Socher, & Manning 2013)
- 處理更大詞彙量的一種可能方法:大多數看不見的單詞是新的形態(或數字)
- 聲音本身在語言中沒有意義
- parts of words 是音素的下一級的形態學,是具有意義的最低級別
- 一個簡單的替代方法是使用字符 n-grams
- Wickelphones (Rumelhart & McClelland 1986)
- Microsoft』s DSSM (Huang, He, Gao, Deng, Acero, & Hect2013)
- 使用卷積層的相關想法
- 能更容易地發揮詞素的許多優點嗎?
1.3 書寫系統中的單詞
- 書寫系統在表達單詞的方式上差異有大有小
- 沒有分詞 (沒有在單詞間放置空格)
- 例如中文
- 大部分的單詞都是分開的:由單詞組成了句子
- 附着詞
- 分開的
- 連續的
- 複合名詞
- 分開的
- 連續的
- 附着詞
1.4 比單詞粒度更細的模型
- 需要處理數量很大的開放詞彙:巨大的、無限的單詞空間
- 豐富的形態
- 音譯 (特別是名字,在翻譯中基本上是音譯)
- 非正式的拼寫
1.5 字符級模型
-
① 詞嵌入可以由字符嵌入組成
- 為未知單詞生成嵌入
- 相似的拼寫共享相似的嵌入
- 解決OOV問題
-
② 連續語言可以作為字符處理:即所有的語言處理均建立在字符序列上,不考慮 word-level
- 這兩種方法都被證明是非常成功的!
- 有點令人驚訝的是:一般意義上,音素/字母不是一個語義單元:但深度學習模型構成了group
- 深度學習模型可以存儲和構建來自多個字母組的含義表示,以模擬語素和更大單位的意義,匯總形成語義
1.6 單詞之下:書寫系統
- 大多數深度學習NLP的工作,都是從語言的書面形式開始的:這是一種容易處理的、現成的數據
- 但是人類語言書寫系統不是一回事!各種語言的字符是不同的!
2.基於字符粒度的模型
2.1 純字符級模型
- 上節課,我們看到了一個很好的用於句子分類的純字符級模型的例子
- 非常深的卷積網絡用於文本分類
- Conneau, Schwenk, Lecun, Barrault.EACL 2017
- 強大的結果通過深度卷積堆疊
2.2 字符級別輸入輸出的機器翻譯系統
- 最初,效果令人不滿意
- (Vilaret al., 2007; Neubiget al., 2013)
- 只有decoder (初步成功)
- (JunyoungChung, KyunghyunCho, YoshuaBengio. arXiv 2016).
- 然後,出現了還不錯的結果
- (Wang Ling, Isabel Trancoso, Chris Dyer, Alan Black, arXiv 2015)
- (Thang Luong, Christopher Manning, ACL 2016)
- (Marta R. Costa-Jussà, José A. R. Fonollosa, ACL 2016)
2.3 English-Czech WMT 2015 Results
- Luong 和 Manning 測試了一個純字符級 seq2seq (LSTM) NMT 系統作為基線
- 它在單詞級基線上運行得很好
- 對於 UNK,是用 single word translation 或者 copy stuff from the source
- 字符級的 model 效果更好了,但是太慢了
- 但是運行需要3周的時間來訓練,運行時沒那麼快
- 如果放進了 LSTM 中,序列長度變為以前的數倍 (大約七倍)
2.4 無顯式分割的完全字符級神經機器翻譯
- Jason Lee, KyunghyunCho, Thomas Hoffmann. 2017.
- 編碼器如下
- 解碼器是一個字符級的 GRU
2.5 #論文解讀# Stronger character results with depth in LSTM seq2seq model
- Revisiting Character-Based Neural Machine Translation with Capacity and Compression. 2018. Cherry, Foster, Bapna, Firat, Macherey, Google AI
- 在 LSTM-seq2seq 模型中,隨着深度的增加,特徵越強
- 在捷克語這樣的複雜語言中,字符級模型的效果提升較為明顯,但是在英語和法語等語言中則收效甚微。
- 模型較小時,word-level 更佳
- 模型較大時,character-level 更佳
3.子詞模型
3.1 子詞模式:兩種趨勢
- 與 word 級模型相同的架構
- 但是使用更小的單元:
word pieces
- [Sennrich, Haddow, Birch, ACL』16a], [Chung, Cho, Bengio, ACL』16].
- 但是使用更小的單元:
- 混合架構
- 主模型使用單詞,其他使用字符級
- [Costa-Jussà& Fonollosa, ACL』16], [Luong & Manning, ACL』16].
3.2 位元組對編碼/BPE
- 最初的壓縮算法
- 最頻繁的位元組 → 一個新的位元組。
- 用字符 ngram 替換位元組(實際上,有些人已經用位元組做了一些有趣的事情)
- Rico Sennrich, Barry Haddow, and Alexandra Birch. Neural Machine Translation of Rare Words with SubwordUnits. ACL 2016.
- 分詞 (word segmentation) 算法
- 雖然做得很簡單,有點像是自下而上的短序列聚類
- 將數據中的所有的 Unicode 字符組成一個 unigram 的詞典
- 最常見的 ngram pairs 視為 一個新的 ngram
- BPE 並未深度學習的有關算法,但已成為標準且成功表示 pieces of words 的方法,可以獲得一個有限的詞典與無限且有效的詞彙表。
- 有一個目標詞彙量,當你達到它的時候就停止
- 做確定性的最長分詞分割
- 分割只在某些先前標記器 (通常MT使用的 Moses tokenizer) 標識的單詞中進行
- 自動為系統添加詞彙
- 不再是基於傳統方式的 strongly
word
- 不再是基於傳統方式的 strongly
- 2016年WMT排名第一!仍然廣泛應用於2018年WMT
- //github.com/rsennrich/nematus
3.3 Wordpiece / Sentencepiece模型
- 谷歌 NMT (GNMT) 使用了它的一個變體
- V1: wordpiece model
- V2: sentencepiece model
- 不使用字符的 n-gram count,而是使用貪心近似來最大化語言模型的對數似然函數值,選擇對應的 pieces
- 添加最大限度地減少困惑的 n-gram
- Wordpiece模型標記內部單詞
- Sentencepiece模型使用原始文本
- 空格被保留為特殊標記(_),並正常分組
- 可以通過將片段連接起來並將它們重新編碼到空格中,從而在末尾將內容反轉
- BERT 使用了 wordpiece 模型的一個變體
- (相對) 在詞彙表中的常用詞
- at, fairfax, 1910s
- 其他單詞由wordpieces組成
- hypatia = h ##yp ##ati ##a
- (相對) 在詞彙表中的常用詞
- 如果你在一個基於單詞的模型中使用 BERT,你必須處理這個
3.4 字符級構建單詞級
- Learning Character-level Representations for Part-ofSpeech Tagging (Dos Santos and Zadrozny 2014)
- 對字符進行卷積以生成單詞嵌入
- 為 PoS 標籤使用固定窗口的詞嵌入
3.5 基於字符的LSTM構建單詞表示
- Bi-LSTM構建單詞表示
3.6 #論文解讀# Character-Aware Neural Language Models
- 一個更複雜/精密的方法
- 動機
- 派生一個強大的、健壯的語言模型,該模型在多種語言中都有效
- 編碼子單詞關聯性:eventful, eventfully, uneventful…
- 解決現有模型的罕見字問題
- 用更少的參數獲得可比較的表達性
- 字符級別嵌入輸入
- CNN+高速網絡+LSTM
- 字符級別輸入 + 卷積處理
- Max-over-time池化
- N-gram 語法交互模型
- 在傳遞原始信息的同時應用轉換
- 功能類似於 LSTM 內存單元
- 使用層次化 Softmax 處理大的輸出詞彙表
- 使用 truncated backprop through time 進行訓練
- 本文對使用詞嵌入作為神經語言建模輸入的必要性提出了質疑
- 字符級的 CNNs + Highway Network 可以提取豐富的語義和結構信息
- 關鍵思想:您可以構建
building blocks
來獲得細緻入微且功能強大的模型!
4.混合字符與詞粒度的模型
4.1 混合NMT
- 混合高效結構
- 翻譯大部分是單詞級別的
- 只在需要的時候進入字符級別
- 使用一個複製機制,試圖填充罕見的單詞,產生了超過 2個點的 BLEU 的改進
- 單詞級別 (4層)
- End-to-end training 8-stacking LSTM layers:端到端訓練 8 層 LSTM
4.2 二級解碼
- 單詞級別的集束搜索
- 字符級別的集束搜索 (遇到
) 時
補充講解
- 混合模型與字符級模型相比
- 純粹的字符級模型能夠非常有效地使用字符序列作為條件上下文
- 混合模型雖然提供了字符級的隱層表示,但並沒有獲得比單詞級別更低的表示
4.3 English – Czech Results
- 使用WMT』15數據進行訓練 (12M句子對)
- 新聞測試2015
- 30倍數據
- 3個系統
- 大型詞彙+複製機制
- 達到先進的效果!
4.4 Sample English-czech translations
- 翻譯效果很好!
- 基於字符:錯誤的名稱翻譯
- 基於單詞:對齊不正確
- 基於字符的混合:diagnóze的正確翻譯
- 基於單詞:特徵複製失敗
- 混合:正確,11-year-old-jedenactileta
- 錯誤:Shani Bartova
4.5 單詞嵌入中的字符應用
- 一種用於單詞嵌入和單詞形態學的聯合模型(Cao and Rei 2016)
- 與 w2v 目標相同,但使用字符
- 雙向 LSTM 計算單詞表示
- 模型試圖捕獲形態學
- 模型可以推斷單詞的詞根
5.fastText模型
- 用子單詞信息豐富單詞向量
Bojanowski, Grave, Joulinand Mikolov. FAIR. 2016.
- 目標:下一代高效的類似於 word2vecd 的單詞表示庫,但更適合於具有大量形態學的罕見單詞和語言
- 帶有字符 n-grams 的 w2v 的 skip-gram 模型的擴展
- 將單詞表示為用邊界符號和整詞擴充的字符 n-grams
\[where =,where =<wh,whe,her,ere,re>,<where>
\]
\]
- 注意 \(<her>\)、\(<her\)是不同於 \(her\)的
- 前綴、後綴和整個單詞都是特殊的
- 將 word 表示為這些表示的和。上下文單詞得分為
\[S(w, c)=\sum g \in G(w) \mathbf{Z}_{g}^{\mathrm{T}} \mathbf{V}_{C}
\]
\]
- 細節:與其共享所有 n-grams 的表示,不如使用
hashing trick
來擁有固定數量的向量
- 低頻罕見單詞的差異收益
Suggested Readings
6.視頻教程
可以點擊 B站 查看視頻的【雙語字幕】版本
7.參考資料
- 本講帶學的在線閱翻頁本
- 《斯坦福CS224n深度學習與自然語言處理》課程學習指南
- 《斯坦福CS224n深度學習與自然語言處理》課程大作業解析
- 【雙語字幕視頻】斯坦福CS224n | 深度學習與自然語言處理(2019·全20講)
- Stanford官網 | CS224n: Natural Language Processing with Deep Learning
ShowMeAI系列教程推薦
- 大廠技術實現 | 推薦與廣告計算解決方案
- 大廠技術實現 | 計算機視覺解決方案
- 大廠技術實現 | 自然語言處理行業解決方案
- 圖解Python編程:從入門到精通系列教程
- 圖解數據分析:從入門到精通系列教程
- 圖解AI數學基礎:從入門到精通系列教程
- 圖解大數據技術:從入門到精通系列教程
- 圖解機器學習算法:從入門到精通系列教程
- 機器學習實戰:手把手教你玩轉機器學習系列
- 深度學習教程 | 吳恩達專項課程 · 全套筆記解讀
- 自然語言處理教程 | 斯坦福CS224n課程 · 課程帶學與全套筆記解讀
NLP系列教程文章
- NLP教程(1)- 詞向量、SVD分解與Word2vec
- NLP教程(2)- GloVe及詞向量的訓練與評估
- NLP教程(3)- 神經網絡與反向傳播
- NLP教程(4)- 句法分析與依存解析
- NLP教程(5)- 語言模型、RNN、GRU與LSTM
- NLP教程(6)- 神經機器翻譯、seq2seq與注意力機制
- NLP教程(7)- 問答系統
- NLP教程(8)- NLP中的卷積神經網絡
- NLP教程(9)- 句法分析與樹形遞歸神經網絡
斯坦福 CS224n 課程帶學詳解
- 斯坦福NLP課程 | 第1講 – NLP介紹與詞向量初步
- 斯坦福NLP課程 | 第2講 – 詞向量進階
- 斯坦福NLP課程 | 第3講 – 神經網絡知識回顧
- 斯坦福NLP課程 | 第4講 – 神經網絡反向傳播與計算圖
- 斯坦福NLP課程 | 第5講 – 句法分析與依存解析
- 斯坦福NLP課程 | 第6講 – 循環神經網絡與語言模型
- 斯坦福NLP課程 | 第7講 – 梯度消失問題與RNN變種
- 斯坦福NLP課程 | 第8講 – 機器翻譯、seq2seq與注意力機制
- 斯坦福NLP課程 | 第9講 – cs224n課程大項目實用技巧與經驗
- 斯坦福NLP課程 | 第10講 – NLP中的問答系統
- 斯坦福NLP課程 | 第11講 – NLP中的卷積神經網絡
- 斯坦福NLP課程 | 第12講 – 子詞模型
- 斯坦福NLP課程 | 第13講 – 基於上下文的表徵與NLP預訓練模型
- 斯坦福NLP課程 | 第14講 – Transformers自注意力與生成模型
- 斯坦福NLP課程 | 第15講 – NLP文本生成任務
- 斯坦福NLP課程 | 第16講 – 指代消解問題與神經網絡方法
- 斯坦福NLP課程 | 第17講 – 多任務學習(以問答系統為例)
- 斯坦福NLP課程 | 第18講 – 句法分析與樹形遞歸神經網絡
- 斯坦福NLP課程 | 第19講 – AI安全偏見與公平
- 斯坦福NLP課程 | 第20講 – NLP與深度學習的未來