Introduction to Natural Language Processing
2020/07/13
-----
一、Introduction to Natural Language Processing
https://pixabay.com/zh/photos/especially-message-positive-setting-5243208/
前言:
本篇為 NLP 的簡介。一開始先介紹 CV 的向量,接著再介紹 NLP 的向量。圖像跟文字雖然各有其特性,但是進到向量層級後,主要都是數學的運算。所以奉勸想要深入 CV 或 NLP 的同好,基本的 CV 跟 NLP 知識,都是深度學習的常識,都要掌握起來。
接下來是 LSTM,基本的時間序列運算單元。Seq2seq 與 Attention 運用 LSTM 架構 Codec 進行機器翻譯等 NLP 任務。ConvS2S 將 LSTM 換成一維卷積可以平行運算,並將 Attention 拆解成 QKV。Transformer 則分別在 Encoder 與 Decoder 端有 Multi-head 的 Self-attention。
GPT-1 運用 Transformer 的 Encoder 架構單向的預訓練模型。ELMo 是雙向的 LSTM 預訓練模型。BERT 吸收 ELMo 設計,運用 Transformer 的 Decoder 架構雙向的預訓練模型。
-----
二、Outline
http://hemingwang.blogspot.com/2020/07/introduction-to-natural-language.html
Introduction to Natural Language Processing
◎ Vector
◎ Word2vec(Word to Vector)
◎ LSTM(Long Short-Term Memory)
◎ Seq2seq(Sequence to Sequence)
◎ Attention
◎ ConvS2S(Convolutonal Sequence to Sequence)
◎ Transformer
◎ BERT(Bidirectional Encoder Representations from Transformers)
-----
三、Pixel
http://hemingwang.blogspot.com/2017/03/ailenet-f6.html
說明:
本次介紹深度學習的自然語言處理。由於不少人認為 CV 或 NLP 兩者差距很大,因此在進入 NLP 之前,我們利用三張圖片講一點 CV 跟 NLP 共通之處:向量。CV 處理的是數位圖片,由像素構成,像素的值,在灰階而言,代表明暗度。三張 RGB 的灰階圖片,可以構成彩色圖片。
-----
四、3D Vector
https://c3d.libretexts.org/CalcPlot3D/CalcPlot3D-Help/section-vectorexplorations.html
說明:
如果我們把一張灰階圖片,按照像素的值 3D 化,那圖片就變成向量,每個像素是空間上的一個點。
-----
五、Conv3
https://medium.com/coinmonks/paper-review-of-vggnet-1st-runner-up-of-ilsvlc-2014-image-classification-d02355543a11
說明:
影像的特徵之一,是點與附近的點關連性很大,跟遠處的點則不一定。所以數位影像處理,我們會運用一個小的濾波器,譬如 3x3 或 5x5,進行處理。經典的分類模型 VGGNet,反覆運用 3x3 的卷積核(濾波器)串成較大的卷積核,越後面的視野越大。
點跟附近的點關連性很大,點跟自己位置的點關連性也很大。所以有 1x1 Convolution 或 Conv1,其實跟標準的卷積不一樣。Conv1 可以將同一層的 Feature Maps 壓縮成較少的張數或擴展成較多的張數。壓縮是減少運算量而保留訊息,擴展主要是調整維度的一致性以便運算。相關的文章有 NIN、SENet、SKNet。
以上,我們用三張圖,簡單介紹 CV 的向量。
語言跟影像有一個很大的差異是圖像通常用語言進行 label,而在語言每個字跟每個字是互相 label,所以海量資料的預訓練模型 BERT 目前是 NLP 的主流。
-----
六、One Hot Encoding
https://hackmd.io/@allen108108/SJ42exwlH
說明:
自然語言要用電腦進行處理,第一步還是要先把文字向量化。
一般是 one hot encoding。假設一本字典有三千個字,我們可以用一個維度三千的陣列代表一個字,然後依序編碼。
One hot encoding 有兩個主要缺點:第一,同義詞或同類別的詞無法從數值上看出關係。第二,稀疏矩陣佔的空間很大。
-----
七、Word Embedding
如果我們把高維度的向量壓縮成低維度的向量,譬如 3000 變成 512,就能解決上面兩個問題:同義詞與佔用空間。經典的演算法是 Word2vec。
-----
八、King - Man + Woman = Queen
https://arxiv.org/abs/1708.02709
說明:
舉一個經典的例子,經過 Word2vec 之後,King(向量) - Man (向量)+ Woman(向量) = Queen(向量)。
-----
九、Word2vec
https://arxiv.org/abs/1301.3781
https://medium.com/@tengyuanchang/%E8%AE%93%E9%9B%BB%E8%85%A6%E8%81%BD%E6%87%82%E4%BA%BA%E8%A9%B1-%E7%90%86%E8%A7%A3-nlp-%E9%87%8D%E8%A6%81%E6%8A%80%E8%A1%93-word2vec-%E7%9A%84-skip-gram-%E6%A8%A1%E5%9E%8B-73d0239ad698
說明:
Word2vec 其實由兩個演算法構成,CBOW 跟 Skip-gram。CBOW 利用周邊的字預測中間的字,Skip-gram 利用中間的字預測周邊的字。
-----
一0、Skip-gram
https://lilianweng.github.io/lil-log/2017/10/15/learning-word-embedding.html
說明:
以下我們簡單解說 Skip-gram。
-----
一一、Skip-gram Model
https://zhuanlan.zhihu.com/p/27234078
說明:
首先進行 one hot encoding,這是輸入層的資料。隱藏層只有一層,也沒有激活函數,隱藏層的神經元數目,就是詞向量的維度。最後則是輸出層,輸出層的輸出個數,跟 one hot encoding 的維度相同。這裡會轉換成 softmax,以便成為一個機率分布。
-----
一二、Skip Gram Data
https://zhuanlan.zhihu.com/p/27234078
訓練時會先有一個 sliding window 滑過所有句子。假定 window 大小為 5,則在句子中間,一次會有四筆訓練資料產生。反向傳播法一般會在 LeNet 這個主題說明,在此則不展開。
-----
一三、Skip-gram Result
https://zhuanlan.zhihu.com/p/27234078
說明:
訓練完後,輸入層跟隱藏層的神經元之間的權重,是一個陣列,每一列代表一個字的 word embedding。
以上簡單用八張圖說明 Word2vec。
-----
一四、RNN
http://hemingwang.blogspot.com/2019/09/understanding-lstm-networks.html
說明:
RNN 是處理時間序列的運算單元。跟時間有關的資料,都適合用 RNN 處理,譬如音樂、語音、震動的值、等等。語言轉成向量後,也可以用 RNN 來處理。RNN 構造簡單,但有很多缺點,後來有較複雜的設計。
-----
一五、LSTM
http://hemingwang.blogspot.com/2019/09/understanding-lstm-networks.html
說明:
基於 RNN,產生了 LSTM。三門設計,第一個門是忘記門,也就是上一筆資料要保留多少訊息。第二個門是輸入門。第三個門是輸出門。三門設計可以保留訊息到比較後面,中途流失較少。
最早在 LeNet,激活函數用 sigmoid。此處激活函數用 tanh。而 sigmoid 在此的用途是當「門」,讓通過的資料百分比,控制在 0 與 1 之間。
-----
一六、Stock
https://lilianweng.github.io/lil-log/2017/07/08/predict-stock-prices-using-RNN-part-1.html
說明:
這裡列出一個 LSTM 預測股價的應用。
-----
一七、Seq2seq
https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks
https://medium.com/@gau820827/%E6%95%99%E9%9B%BB%E8%85%A6%E5%AF%AB%E4%BD%9C-ai%E7%90%83%E8%A9%95-seq2seq%E6%A8%A1%E5%9E%8B%E6%87%89%E7%94%A8%E7%AD%86%E8%A8%98-pytorch-python3-31e853573dd0
說明:
Seq2seq,運用 LSTM 把一串字壓縮成一個向量。然後再轉成對應的字串。
比方說,英文可以轉德文,論文可以轉摘要,摘要可以轉標題,關鍵字可以轉短文,等等。
怎麼做?靠訓練。
以英德翻譯為例,首先有一個資料集,裡面是對應的英文句子跟德文句子,丟進去後,輸出要跟丟進去的德文句子越接近越好。用反向傳播法 BPTT 讓損失函數的值越來越小,訓練完成後,你丟英文句子進去,對應的德文句子就跑出來了。
-----
一八、Seq2seq
https://jeddy92.github.io/JEddy92.github.io/ts_seq2seq_intro/
說明:
GRU 是有別於 LSTM 的運算單元。設計上較簡單,但是較不容易理解。效能上則是類似,兩者用的人都很多。
-----
一九、Attention
https://arxiv.org/abs/1409.0473
https://medium.com/@bgg/seq2seq-pay-attention-to-self-attention-part-1-%E4%B8%AD%E6%96%87%E7%89%88-2714bbd92727
說明:
一個句子若很長,壓縮成向量後,就容易損失訊息。每一個輸出的字,都分配有一個向量,描述其跟每個輸入字的關連性,就比壓縮成單一向量解碼要精確的多。
-----
二0、Attention
https://zhuanlan.zhihu.com/p/37601161
說明:
較易理解的架構。
-----
廿一、Attention
https://arxiv.org/abs/1508.04025
https://zhuanlan.zhihu.com/p/54743941
說明:
展開後可以得到一個矩陣。
-----
廿二、ConvS2S
https://arxiv.org/abs/1705.03122
https://www.telesens.co/2019/04/21/understanding-incremental-decoding-in-fairseq/
說明:
ConvS2S 相較於 Attention,有三個主要的貢獻:
一、將 LSTM 換成一維卷積,方便平行運算。
二、將文字向量分解成 Query、Key、Value。
三、有八層 Attention Tables。
其實這些概念都不是它獨創,只是它整合的不錯。另外,它的成果也很快就被 Transformer 超越了。但位於 Attention 跟 Transformer 之間,是一篇很好的中介論文。
-----
廿三、ConvS2S
https://arxiv.org/abs/1705.03122
https://zhuanlan.zhihu.com/p/27464080
說明:
八層。
-----
廿四、QKVC
http://deeplearning.hatenablog.com/entry/convs2s
說明:
Transformer 的 QKV,在 ConvS2S 已經出現了。實際上,這個概念來自 End-to-End Memory Networks 與 Key-Value Memory Networks。
-----
廿五、Self-Attention
https://jalammar.github.io/illustrated-transformer/
說明:
Transformer 在 Encoder 端與 Decoder 端,都有 Self-Attention。圖中可以看到,it 可以指 The animal,也可以表示 tired。
-----
廿六、QKV
https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html
Query、Key、Value。大致上 Key 可以代表 index,Value 則是文字的內涵意義。
Encoder 與 Decoder,除了各自有自己的 QKV Self-Attention 編碼,另外實際解碼時,Q 在 decoder 端,K、V 在 encoder 端。
-----
廿七、PKV
https://medium.com/@joealato/attention-in-nlp-734c6fa9d983
說明:
從 Attention 到 Key-Value 到 QKV。
-----
廿八、QKV
https://jalammar.github.io/illustrated-transformer/
說明:
QKV 怎麼來的?靠訓練。
-----
廿九、STORM
https://bloody-disgusting.com/news/3285841/massive-twister-highlights-into-the-storm-poster/
說明:
深度學習的十篇基礎論文。前五篇 CV,以 LeNet、NIN、ResNet 三篇 CNN 開始,另外有 FCN 與 YOLOv1 兩個 CNN 的應用。後五篇 NLP,除了一開始 LSTM 是運算單元,後續四篇 Seq2seq、Attention、ConvS2S、Transformer,都可以理解成 Source Target Output Relational Model(STORM),是一個 Encoder-Decoder 的 Codec 架構,English-Deutsche 的英德翻譯是 Encoder-Decoder 的一個典型應用。
-----
三0、BERT
https://arxiv.org/abs/1810.04805
https://zhuanlan.zhihu.com/p/58430637
說明:
Transformer Encoder-Decoder 的架構。
GPT-1 是運用 Transformer Decoder 的單向預訓練模型。
BERT 是運用 Transformer Encoder 的雙向預訓練模型。
ELMo 是運用 LSTM 的雙向預訓練模型。
-----
卅一、GPT and Transformer Decoder
https://leemeng.tw/gpt2-language-model-generate-chinese-jing-yong-novels.html
GPT-1 是單向的 Transformer Decoder 模型。GPT-2 一下子又超越 BERT。
-----
卅二、GPT-1
https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf
https://blog.csdn.net/qq_35883464/article/details/100173045
說明:
GPT 採用兩階段過程:先利用語言模型進行預訓練,再通過 Fine-tuning 的模式解決下游任務。
-----
卅三、ELMo
https://medium.com/saarthi-ai/elmo-for-contextual-word-embedding-for-text-classification-24c9693b0045
說明:
ELMo 是個雙向的 LSTM 語言模型。可以考慮到之前的文字,也可以考慮到以後的文字。另外,對於一字多義的問題,則是以拼接不同層的向量來解決。在訓練過程中,不同層可以學到不同的概念。
-----
卅四、BERT and Transformer Encoder
https://leemeng.tw/attack_on_bert_transfer_learning_in_nlp.html
說明:
BERT 是一個雙向的 Transformer Encoder 模型。
-----
卅五、Two Pretraining Methods
https://leemeng.tw/attack_on_bert_transfer_learning_in_nlp.html
說明:
有預測中間字跟預測下個句子兩種預訓練方法,概念來自 Word2vec 的 CBOW 與 Skip-gram。
-----
卅六、Four Tasks
https://leemeng.tw/attack_on_bert_transfer_learning_in_nlp.html
說明:
微調後,可以執行四大類 NLP 任務。
-----
卅七、BERT Family
https://www.analyticsvidhya.com/blog/2019/10/8-ambitious-data-science-projects-github/
說明:
基本上,目前的 NLP 幾乎都是 BERT 的延伸。
-----
References
[1] The Star Also Rises: AI 三部曲(深度學習:從入門到精通)
https://hemingwang.blogspot.com/2019/05/trilogy.html
[2] The Star Also Rises: 全方位 AI 課程(精華篇)
https://hemingwang.blogspot.com/2020/01/all-round-ai-lectures-highlight.html
No comments:
Post a Comment