Friday, December 10, 2021

Introduction to Natural Language Processing

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: