NLP 天然語言處理之綜述

(1) NLP 介紹

NLP 是什麼?

NLP (Natural Language Processing) 天然語言處理,是計算機科學、人工智能和語言學的交叉學科,目的是讓計算機處理或「理解」天然語言。天然語言一般是指一種天然地隨文化演化的語言,如漢語、英語、日語。git

NLP 能夠用來作什麼?以及它的應用領域是什麼?

文本朗讀(Text to speech)/ 語音合成(Speech synthesis)
語音識別(Speech recognition)
中文自動分詞(Chinese word segmentation)
詞性標註(Part-of-speech tagging)
句法分析(Parsing)
天然語言生成(Natural language generation)
文本分類(Text categorization)
信息檢索(Information retrieval)
信息抽取(Information extraction)
文字校對(Text-proofing)
問答系統(Question answering)
機器翻譯(Machine translation)
自動摘要(Automatic summarization)
文字蘊涵(Textual entailment)github

(2)NLP 技術發展路線

從時間軸角度,能夠看到 NLP 中重要模型的發佈鏈:
word2vec -> seq2seq -> Attention model -> Transformer(vanilla) -> ELMO -> Transformer(universal) -> GPT -> BERT -> GPT-2 -> Transformer-XL -> XLNet數據庫

可是被廣爲使用的模型迭代圖是:ELMO -> Transformer -> GPT -> BERT網絡

如下對上述模型作初步介紹:

word2vec

時間:2013.01
論文地址:https://arxiv.org/abs/1301.3781
github: https://github.com/danielfrg/word2vec架構

問題提出:
one-hot編碼解決了文本特徵離散表示的問題,但它假設詞與詞相互獨立而且特徵向量會過於稀疏,會形成維度災難。框架

方法:
經過訓練,將每一個詞都映射到一個較短的詞向量上來。全部的這些詞向量就構成了向量空間,進而能夠用普通的統計學的方法來研究詞與詞之間的關係。
word2vec的具體實現分爲CBOW和Skip-Gram兩種模型。CBOW模型的訓練輸入是某一個特徵詞的上下文相關的詞對應的詞向量,而輸出就是這特定的一個詞的詞向量。
Skip-Gram模型和CBOW的思路是反着來的,即輸入是特定的一個詞的詞向量,而輸出是特定詞對應的上下文詞向量。機器學習

結論:
CBOW對小型數據庫比較合適,而Skip-Gram在大型語料中表現更好。Skip-Gram模型的訓練須要更長的時間。函數

seq2seq

時間:2014.09
論文地址:https://arxiv.org/pdf/1409.3215.pdfpost

問題提出:
原始的RNN要求序列等長,然而咱們遇到的大部分問題序列都是不等長的,如機器翻譯中,源語言和目標語言的句子每每並無相同的長度。性能

方法:

結論:
這一結構在機器翻譯。文本摘要、閱讀理解、語音識別等領域能取得很好的性能。

Attention model

時間:2015.02
論文地址: https://arxiv.org/abs/1502.03044v1

問題提出:
在Encoder-Decoder框架中,在預測每個yi時對應的語義編碼c都是同樣的,也就意味着不管句子X中的每一個單詞對輸出Y中的每個單詞的影響都是相同的。這樣就會產生兩個弊端:一是語義向量沒法徹底表示整個序列的信息,再者就是先輸入的內容攜帶的信息會被後輸入的信息稀釋掉,或者說被覆蓋了。輸入序列越長,這個現象就越嚴重。這就使得在解碼的時候一開始就沒有得到輸入序列足夠的信息, 那麼解碼的準確度天然也就要打個折扣了。

方法:
注意力機制模型中,Decoder 的輸出會與Encoder每個時間點的輸出進行分數計算,具體的算方法不少,常見的方式爲內積。接著經過softmax層即可獲得每個encoder hidden state’s attention weights,和爲1,可表示爲該decoder步驟注重encoder 輸出的權重分佈,以後將每一個encoder輸出與 attention weights 做加權求合即獲得最終的attention vector,Decoder在每個時間點都會進行上述的注意力計算。

結論:
注意力機制能大大提高LSTM,GRU的總體性能。

Transformer(vanilla)

時間:2017.06
論文地址:https://arxiv.org/abs/1706.03762
github:https://github.com/tensorflow/tensor2tensor

問題提出:
RNN結構自己比較簡單,也很適合序列建模,但RNN的明顯缺點之一就是沒法並行,所以速度較慢,這是遞歸的自然缺陷。另外RNN沒法很好地學習到全局的結構信息,由於它本質是一個馬爾科夫決策過程。CNN事實上只能獲取局部信息,是經過層疊來增大感覺野。

方法:

  1. 經過多頭自注意力結構一步到位獲取了全局信息。其中單個自注意力模塊的計算公式以下:

    2. 因爲self-Attention沒法並不能捕捉序列的順序,經過Position Embedding,將每一個位置編號,而後經過正餘弦函數將編號映射爲一個向量,就給每一個詞都引入了必定的位置信息。

    式中pos表示位置編號rang(0,100),i表示維度rang(0,512)。

結論:
實驗驗證transformer在翻譯任務作到了SOFA,比循環神經網絡快,效果好。

ELMO

時間:2018.02
論文地址:https://arxiv.org/abs/1802.05365

問題提出:
詞向量須要解決兩個問題:(1)詞使用的複雜特性,如句法和語法。(2)如何在具體的語境下使用詞,好比多義詞的問題。傳統的詞向量如word2vec可以解決第一類問題,可是沒法解決第二類問題。

方法:
Elmo主要使用了一個兩層雙向的LSTM語言模型,結合上下文來理解詞義。先在一個大型的預料庫上面進行訓練,用模型的內部狀態來表徵一個詞的向量,此時內部狀態混合了全部的語義;而後將下游任務的文本輸入模型,此時的詞具有了具體的上下文語境,再用內部狀態的線性組合來表徵詞。這種線性組合是在下游任務中進行訓練獲得的。

結論:
biLSTM層能有效地編碼上下文中不一樣類型的語法和語義信息,提升總體任務性能。

Transformer(universal)

時間:2018.07
論文地址:https://arxiv.org/abs/1807.03819

問題提出:
Transformer 中 Encoder和Decoder Block執行的次數還是人爲設定的超參數,這意味著,模型架構沒法隨著任務的特性、難易,自動的調整訓練的策略和次數。

方法:

Universal Transformer 經過正弦函數具週期的特性,Position embedding將位置信息加入每個input symbol,除此以外,Timestep embedding(遞迴次數)也使用相同方法處理。將position和timestep embedding 一併與輸入做加法運算,即成功將位置和遞迴次數信息加入模型中。
使用Transition function,除了增長非線性變換的次數外,與Vanilla Transformer不一樣的是,每個Symbol都有本身獨立的Transition function,這可以有效率的學習到更深層的語意資訊。每個symbol在著訓練的過程,都能自由的控制iteration次數,由於有些symbol須要屢次的iteration才能充分理解其語意,有些則不須要,先中止的symbol會複製相同的數據到下一個step,直到全部的symbol都中止,或到達了iteration的上限值。
Transition function 是有別於Vanilla Transformer一個重要的特色,Transition function能夠是一個簡單的Dense Layer,也能夠是CNN Layer,差異在於,Vanilla Transformer再經過self-attention後,將全部的輸出一併送進Dense Layer,而Universal Transformer的Transition function則是基於每個不一樣的symbol分頭進行。經過此方法,能提高訓練收斂速度且讓每一個symbol有更好的vector representation,所以能提高總體表現。

結論:
Universal Transformer採用了 adaptive computation time (ACT)讓模型能夠動態地調整每一個symbol的計算次數,藉以得到最好的向量表達,此外有別於傳統作法,此方法在transition function依照個別symbol分頭進行,這可以有效率的學習每一個symbol的向量表達,並保留了Vanilla Transformer的優勢,解決傳統方法梯度爆炸/消失和資訊遺失的問題;實驗發現Universal Transformer不只讓機器翻譯達到更準確的效果,也補足了algorithmic tasks 成效低落的缺點,讓Universal Transformer能更泛用於各式各樣不一樣的任務,成爲計算通用模型。

GPT

時間:2018
論文地址:https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf

問題提出:
首次提出結合無監督的預訓練(pre-training)和有監督的微調(fine-tuning),旨在學習一種通用的表示方式,轉移到各類類型的NLP任務中均可以作不多的改變。

方法:
單向自迴歸Transformer模型,詞向量+位置向量

結論:
對四種類型的NLP任務(12個task)進行了評估 ,在9個作到了SOFA。 

BERT

時間:2018.10
論文地址:https://arxiv.org/abs/1810.04805
github: https://github.com/google-research/bert

問題提出:
ELMo 使用兩條獨立訓練的LSTM獲取雙向信息,但融合方式是直接concat,太過粗暴。而 GPT 使用自迴歸模式的Transformer 只能獲取單向信息。

方法:
採用3種embedding相加的方式做爲模型輸入:Token Embeddings+Segment Embeddings+Position Embeddings,其中token embedding採用的是word piece embedding,Position Embeddings不一樣於Transformer,使用了一組隨機初始化的參數同模型一塊兒學習,模型同Transformer。
最關鍵的點在於對模型的預訓練。採用了2種不一樣的預訓練任務。
(1)把一篇文章中,15% 的詞彙遮蓋,讓模型根據上下文全向地預測被遮蓋的詞。假若有 1 萬篇文章,每篇文章平均有 100 個詞彙,隨機遮蓋 15% 的詞彙,模型的任務是正確地預測這 15 萬個被遮蓋的詞彙。經過全向預測被遮蓋住的詞彙,來初步訓練 Transformer 模型的參數。
(2)預測下一句是否連續。譬如從上述 1 萬篇文章中,挑選 20 萬對語句(總共 40 萬條語句)。挑選語句對的時候,其中 10 萬對語句,是連續的兩條上下文語句,另外 10 萬對語句,不是連續的語句。而後讓 Transformer 模型來識別這 20 萬對語句,哪些是連續的,哪些不連續。

結論:
BERT主要貢獻是將無監督pre-training+有監督fine-tuning這一模式推廣到更深層的雙向結構中。

GPT-2

時間:2019.02
論文地址:https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf
github: https://github.com/openai/gpt-2

問題提出:
目前主流的機器學習模型都是在指定的任務上去用一部分數據來訓練模型,再用一部分不相同但同分布的數據來測試其性能。這樣的模式在特定場景效果的確不錯,可是對於字幕或者說閱讀理解、圖像分類這樣的任務來講,輸入的多樣性和不肯定性就會把缺點給暴露出來。目前廣泛採用的用單一領域的數據來訓練單一模型是該問題的罪魁禍首,若是要構建一個泛化能力更強的模型,須要在更普遍的任務和領域上進行訓練。

方法:
把多任務學習和無監督學習聯繫起來,將條件機率由p(output|input) 改成p(output|input,task) 。在多個任務上進行預訓練,無監督地作下游任務。
模型沿用GPT 1.0 單向自迴歸語言模型, 數據質量高、更寬泛、量更大。 Transformer模型也更大(48層,15億參數)。

結論:
當一個大的語言模型被訓練在一個足夠大和不一樣的數據集上時,它可以在許多領域和數據集上表現良好。GPT-2在測試的8個數據集中有7個數據集,該模型可以在零樣本的狀況下取得SOFA,通過訓練的高容量模型可以最大限度地提升文本語料庫多樣性的可能性,從而在不須要作監督學習的狀況下執行數量驚人的任務。

Transformer-XL

時間:2019.06
論文地址:https://arxiv.org/abs/1901.02860
github: https://github.com/kimiyoung/transformer-xl

問題提出:
vanilla Transformers使用固定長度的上下文來實現,即將一個長的文本序列截斷爲512個字符的固定長度片斷,而後分別處理每一個片斷。這形成了3個限制:
1. 上下文長度受限:字符之間的最大依賴距離受輸入長度的限制,模型看不到出如今幾個句子以前的單詞。
2.  上下文碎片:對於長度超過512個字符的文本,都是從頭開始單獨訓練的。段與段之間沒有上下文依賴性,會讓訓練效率低下,也會影響模型的性能。
3. 推理速度慢:在測試階段,每次預測下一個單詞,都須要從新構建一遍上下文,並從頭開始計算,這樣的計算速度很是慢。

方法:
1.  提出片斷級遞歸機制。Transformer-XL仍然是使用分段的方式進行建模,但其與vanilla Transformer的本質不一樣是在於引入了段與段之間的循環機制,使得當前段在建模的時候可以利用以前段的信息來實現長期依賴性。
在訓練階段,處理後面的段時,每一個隱藏層都會接收兩個輸入:
(1)該段的低隱藏層的輸出(與vanilla Transformer相同)。
(2)前面段的隱藏層的輸出,可使模型建立長期依賴關係。
2.  使用了相對位置編碼來從新實現postion embedding。在分段的狀況下,若是僅僅對於每一個段仍直接使用Transformer中的位置編碼,即每一個不一樣段在同一個位置上的表示使用相同的位置編碼,就會出現問題。好比,第i−2段和第i−1段的第一個位置將具備相同的位置編碼,但它們對於第i段的建模重要性顯然並不相同(例如第i−2段中的第一個位置重要性可能要低一些)。所以,須要對這種位置進行區分。

結論:
對於長文檔建模能力有明顯的提高,依賴關係的有效長度比循環網絡長80%,比vanilla Transforme長450%。在驗證階段比vanilla Transforme快1,800+倍。

XLNet

時間:2019.06
論文地址:https://arxiv.org/pdf/1906.08237.pdf
github: https://github.com/zihangdai/xlnet

問題提出:

  1. BERT在預訓練階段引入[mask]標記,而在下游任務中不存在,破壞了預訓練與下游任務的一致性。
  2. BERT在根據句子的其餘詞預測Mask掉的單詞時,對被Mask掉的單詞作了獨立性假設,即假設被Mask掉的單詞之間相互獨立。

方法:

  1. 採用自迴歸語言模型的模式,經過對輸入全排列來引入上下文信息(經過雙流自注意力機制和Attention掩碼實現)。
  2. 使用了最新的Transformer-XL模型,直接使用了相對位置編碼,並將遞歸機制整合到全排列設定中。

結論:
維持了表面看上去的自迴歸語言模型的從左向右的模式,這個有明顯的好處,就是對於生成類的任務,可以在維持表面從左向右的生成過程前提下,模型裏隱含了上下文的信息。引入了Transformer XL的機制,因此對於長文檔輸入類型的NLP任務,也會比Bert有明顯優點。

參考文獻:
https://blog.csdn.net/qq_33360393/article/details/100045351
https://www.toutiao.com/a6742415474396496387/?traffic_source=&in_ogs=&utm_source=&source=search_tab&utm_medium=wap_search&original_source=&in_tfs=&channel=

attention,命名實體識別, word2vec,embading

相關文章
相關標籤/搜索