上回講了當(dāng)前DNN中較為較為廣泛應(yīng)用的一種算法機(jī)制——Attention Mechanisms,此機(jī)制在模型可解釋性和模型優(yōu)化方面均取得了不錯的效果。那么今天,我們來進(jìn)一步了解attention算法在自然語言中的更深層次的應(yīng)用。本次我們介紹下自然語言處理的“變形金剛”——Transformer模型,該算法是近一年都比較熱門的bert系列算法的基礎(chǔ)。
2.Transformer模型
上回提到的attention機(jī)制可以認(rèn)為是對RNN模型的一種進(jìn)階優(yōu)化,其基礎(chǔ)仍為RNN算法,針對RNN模型,存在一些不足的地方:
有一定的長期依賴問題:雖然利用門限等方法得到了有效的緩解,但是此問題依舊存在,并且句子越長,此問題越嚴(yán)重;
RNN有很大的性能問題:主要表現(xiàn)在訓(xùn)練階段,如在RNN的前向計算中,每個隱藏狀態(tài)Ht的計算,需要依賴Ht-1,Ht-2,...,無法做到像CNN那樣的并行計算,尤其當(dāng)數(shù)據(jù)量很大的情況下,此問題更為嚴(yán)重。
所以,如何更好的抽取文本的上下文信息,以及如何更好的提高計算性能,google的大神們在2017年提出了transformer算法,其利用self-attention的方法,完全摒棄掉RNN的結(jié)構(gòu),僅依賴attention的方式,構(gòu)建了一種seq2seq的模型,可用于機(jī)器翻譯等領(lǐng)域,取得了不錯的效果,模型基本框架如圖1所示:
圖1 transformer模型架構(gòu)圖
我們來具體看下transformer是如何計算的:
輸入層:transformer輸入包括兩部分:每個詞的embedding+位置encoding向量,使用時,將其整合在一起輸入到模型中;
encoder和decoder層:encoder和decoder層的核心是利用attention的方式對輸入進(jìn)行編碼和解碼,此外兩者中均加入殘差網(wǎng)絡(luò)的結(jié)構(gòu)。
輸出層:輸出時,從左到右,先把右側(cè)位置的元素遮擋掉,利用mask的attention方式進(jìn)行訓(xùn)練預(yù)測。
第三部分:Positional encoding
在我們之前使用CNN或者RNN模型進(jìn)行文本建模時,模型內(nèi)部已經(jīng)考慮到序列的序列位置了,而上述的self-attention,僅可以認(rèn)為是一個詞袋模型,未考慮到詞的位置信息。為了解決這個問題,此處在input中,除詞語的embedding外,再額外添加位置編碼信息,具體計算依據(jù)以下方式,主要依據(jù)sin和cos的方式鎖定單詞位置:
那么上述就是transformer模型的主要核心內(nèi)容了,模型整體就是依據(jù)上述的幾個部分進(jìn)行重復(fù)、疊加與拼接。
3.展望
本文是對上次attention的后續(xù),主要介紹了self-attention的基礎(chǔ)理論部分,主要內(nèi)容來源于google的《Attention Is All You Need》,此論文對于后續(xù)bert、gpt-2的理解具有極其重要的作用。
后期將介紹如何利用BERT預(yù)訓(xùn)練模型,進(jìn)行文本建模實踐。
本文轉(zhuǎn)載自公眾號:數(shù)據(jù)天團(tuán),作者丁永兵
聯(lián)系客服