❶ mdi文件怎麼打開,急用
office不可以嗎?
什麼提示沒有?
❷ 05-ELMo/BERT/GPT-NLP預訓練模型
這里可以參考CSDN上的文章-BERT原理和實踐: https://blog.csdn.net/jiaowoshouzi/article/category/9060488
在解釋BERT,ELMO這些預訓練模型之前,我們先看一下很久之前的計算機是如何讀懂文字的?
每個字都有自己的獨特的編碼。但是這樣是有弊端的,字和字之間的關聯關系是無法得知的,比如計算機無法知道dog和cat都是動物,它反而會覺得bag和dog是比較相近的。
所以後來就有了Word Class,將一系列的詞進行分類然後讓一類詞語和一類詞語之間更有關聯,但是這樣的方法太過於粗糙,比如dog,cat,bird是一類,看不出哺乳動物鳥類的區別。
在這個基礎之上,我們有了Word Embedding,Word Embedding我們可以想像成是一種soft的word class,每個詞都用向量來表示,它的向量維度可能表示這個詞彙的某種意思,如圖中dog,cat,rabbit的距離相比其他更近。那麼word embendding是如何訓練出來的,是根據每個詞彙的上下文所訓練的。
每個句子都有bank的詞彙,四個bank是不同的token,但是同樣的type。(註:token-詞例, type-詞型, class-詞類 or token是出現的總次數(還有種理解是token是具有一定的句法語義且獨立的最小文本成分。 ),type是出現的不同事物的個數。)
對於典型的Word Embedding認為,每個詞type有一個embedding,所以就算是不同的token只要是一樣的type那麼word embedding就是一樣的,語義也就是一樣的。
而事實上並非如此,1,2句bank指的是銀行,3,4為水庫。所以我們希望讓機器給不同意思的token而且type還一致,給予不同的embedding。在這個問題上,之前的做法是從字典中去查找這個詞包含幾種意思,但是這樣的做法顯然跟不上現實中詞語的一些隱含的含義。比如bank有銀行的意思,與money一起是銀行的意思,而與blood一起卻是血庫的意思。
所以我們想讓機器今天進一步做到每一個word token都可以有自己的embedding(之前是每個type有一個embedding或者有固定的一個或多個embedding),那麼怎麼知道一個word應該有怎樣的embedding呢?我們可以取決於該詞的上下文,上下文越相近的token它們就會越相近的embedding。比如之前提到的bank,下面兩個句子它們的word token的embedding可能是相近的,而和上面的word token的embedding是相遠的。
所以我們想使用一種能夠基於上下文的Contextual word Embedding來解決一詞多義的問題。
這里使用ELMO可以做到這件事情,即每個word token擁有不同的word embedding。(右上角動物是芝麻街(美國公共廣播協會(PBS)製作播出的兒童教育電視節目)里的角色)。
它是基於RNN的預訓練模型,它只需要搜集大量語料(句子)且不需要做任何標注,就可以訓練這個基於RNN的語言模型,預測下一個token是什麼,學習完了之後就得到了上下文的embedding。因為我們可以將RNN的隱藏層中的某一節點拿出來(圖中橙藍色節點),它就是輸入當前結點的詞彙的word embedding。
從當計算識別到<BOS>,模型訓練開始。首先輸入"潮水",然後當作輸入輸出"退了",退了當做輸入輸出"就"。
假設當前要得到」退了」這個詞的上下文embedding,首先,因為前邊的RNN只考慮到了前文而沒有考慮到後文,所以這里就使用了同前文一樣的反向的RNN。然後,它從句尾開始進行,比如給它喂」知道」,它就要預測」就」,給它喂」就」,它就要預測」退了」。這時候就不僅考慮每個詞彙的前文,還會考慮每個詞的後文。最後將正向和逆向得到的兩個不同的上下文embedding(因為方向不同訓練結果也不一樣)拼接起來。
現在我們訓練的程度都會越來越深度,當層數增加,這樣就會產生Deep的RNN,因為很多層,而且每一層都會產生上下文Embedding,那麼我們到底應該使用哪一層?每一層這種深度LSTM中的每個層都可以生成潛在表示(方框處)。同一個詞在不同的層上會產生不同的Embedding,那麼我們應該使用哪一層呢?ELMo的策略是每一層得到的上下文embedding都要。
在上下文embedding的訓練模型中,每個詞輸入進去都會有一個embedding輸出來。但是在ELMo中,每個詞彙輸入進去,都會得到不止一個embedding,因為每層的RNN都會給到一個embedding,ELMo將它們統統加起來一起使用。
以圖中為例,這里假設ELMo有兩層RNN,這里是將α1(黃色,第一層得到的embedding)和α2(綠色,第二層得到embedding)加起來得到藍色的embedding,並做為接下來要進行不同任務的輸入。
但是這里存在一些問題,α1和α2是學習得到的,而且它是根據當前要進行的任務(如QA,POS of tagging ),然後根據接下來要進行的這些任務一起被學習出來。所以就導致不同任務導向下的α1和α2也不一樣。
ELMo的論文中提到,在不同任務下(SRL,Coref,SNLI,SQuAD,SST-5)。藍色的上下文embedding在經過token(這里為沒有經過上下文的embedding),LSTM1,LSTM2後,它在不同階段需要的weight也不一樣。
BERT相當於是Transformer的Encoder部分,它只需要搜集大量的語料去從中學習而不經過標注(不需要label),就可以將Encoder訓練完成。如果之前要訓練Encoder,我們需要通過一些任務來驅動學習(如機器翻譯)。
BERT就是句子給進去,每個句子給一個embedding。
這里可以回憶下,Transformer的Enoder中有self-attention layer,就是給進去一個sequence,輸出也得到一個sequence。
雖然圖中使用是用詞作為單元進行輸入,但是在使用BERT進行中文的訓練時,字會是一個更好的選擇。比如,我們在給BERT進行輸入時,用one-hot給詞進行編碼,但是詞在中文中數量龐大,會導致維度過高。但是,字的話相對會少很多,特別是中文(大約幾千個,可以窮舉)。這樣以字為單位進行輸入會占很大優勢。
共有兩種方法,一種是Mask LM遮蓋語言模型,另一種是Next Sentence Prediction下一句預測。
下面用上圖的例子來理解BERT是怎麼樣來進行填空的:
1)這里假設在所有句子中的詞彙的第2個位置上設置一個<MASK>;
2)接下來把所有的詞彙輸入BERT,然後每個輸入的token都會得到一個embedding;
3)接下來將設置為<MASK>的embedding輸入到Linear Multi-class Classifier中中,要求它預測被<MASK>的詞彙是哪個詞彙?
但是這個Linear Multi-class Classifier它僅僅是一個線性分類器,所以它的能力十分弱,這也就需要在之前的BERT模型中需要將它的層數等參數設計的相當好,然後得到非常出色的representation,便於線性分類器去訓練。
那麼我們怎麼知道最後得到的embedding是什麼樣的呢?如果兩個<MASK>下的詞彙(輸入時設置的<MASK>和最後預測的<MASK>)都放回原來的位置而且沒有違和感(就是語句還算通順),那它們就有類似的embedding(比如退下和落下)。
如圖中,給定兩個句子1)醒醒吧 和 2)你沒有妹妹。其中特殊符號[SEP]是告訴BERT兩個句子的分隔點在哪裡。
特殊符號[CLS]一般放在句子的開頭,它用來告訴BERT從這開始分類任務,[CLS]輸入BERT後得到embedding然後通過Linear Binary Classifier得出結果說明:經過BERT預測後現在我們要預測的兩個句子是接在一起 or 不應該被接在一起。
這里可能會有疑問,為什麼不將[CLS]放在句尾,等BERT訓練完兩個句子再輸出結果?
對於上圖中的任務,BERT現在要做的事情就是給定兩個句子,讓BERT輸出結果這兩個句子是不是應該接在一起?
所以在語料庫的大量句子中,我們是知道哪些句子是可以接在一起的,所以也需要我們告訴BERT哪些句子是接在一起的。
Linear Binary Classifier和BERT是一起被訓練的,通過預測下一句這個任務,我們就可以把將BERT部分的最優參數訓練出來。
現在我們知道了任務一和任務二,在原論文中兩種任務是要同時進行的,這樣才能將BERT的性能發揮到最佳。
現在我們知道了BERT要做什麼事情,那麼我們要如何去使用它?共有四種方法。論文中是將【BERT模型和接下來你要進行的任務】結合在一起做訓練。
第一種,假設當前任務是Input一個sentence,out一個class,舉例來說輸入一句話來判斷分類。
訓練流程:1)將做要分類的句子丟給BERT;
2)需要在句子開始加上分類的特殊符號,這個特殊符號經過BERT輸出的embedding經過線性分類器,輸出結果為當前的句子屬於的類別是真還是假。BERT和Linear Classifier的參數一起進行學習;
3)這里的Linear Classifier是Trained from Scratch是白手起家從頭開始,即它的參數隨機初始化設置,然後開始訓練;
4)而BERT則是加上Fine-tune微調策略(一種遷移學習方式*),例如Generative Pre-trained Transformer(OpenAI GPT生成型預訓練變換器)(Radford等,2018),引入了最小的任務特定參數,並通過簡單地微調預訓練參數在下游任務中進行訓練。
*這里不得不提一下遷移學習中的Fine-tune,這里可以參考csdn的一篇文章: https://blog.csdn.net/u013841196/article/details/80919857
( https://arxiv.org/abs/1805.12471 )
第二種,假設當前任務是input一個sentence,輸出這個句子中的每個詞彙屬於正例還是負例。舉例現在的任務是slot filling填槽任務(填槽指的是為了讓用戶意圖轉化為用戶明確的指令而補全信息的過程)(另一種解釋是從大規模的語料庫中抽取給定實體(query)的被明確定義的屬性(slot types)的值(slot fillers))(槽可以理解為實體已明確定義的屬性),輸入的句子是 arrive Taipei on November 2nd輸出的槽是other dest on time time
訓練流程:
1)將句子輸入BERT,句子中的每個詞彙都會映射出一個embedding;
2)每個詞彙的embedding輸入Linear Classifier,輸出結果;
3)Linear Classifier 白手起家和Bert微調的方式一起去做學習。
第三種,假設當前任務是input輸入兩個句子,輸出class。舉例現在要進行自然語言預測,讓機器根據premise前提,預測這個hypothesis假設是True還是False還是unknown不知道。實際上,我們可以把這個任務當成三分類問題。
訓練過程:
1)在一個sentence前設置特殊符號[CLS],然後在要輸入的兩個sentence中間設置[SEP]分隔符號;
2)將兩個sentence連同特殊符號一起輸入到BERT中;
3)將[CLS]輸入BERT後得到的embedding,再把它輸入linear Classifier中,得到class。
如圖所示,假設gravity的token序號是17,即 ,我們現在有一個問題通過QA Model後得到的s=17,e=17,那麼答案就是 為gravity;
同理,假設within a cloud的序號順序是77到79,即 到 ,我們現在有一個問題通過QA Model後得到的s=77,e=79,那麼答案就是 為within a cloud。
https://arxiv.org/abs/1905.05950
https://openreview.net/pdf?id=SJzSgnRcKX
這張圖顯示了BERT從0-24層的層數在針對不同的NLP任務上的表現。
https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
而所謂的GPT,它其實就是Transformer的Decoder。
我們簡單的描述下GPT的訓練過程:這里我們input<BOS>這個token和潮水,想要GPT預測輸出「退了」這個詞彙。
1)首先輸入[BOS](begin of sentence)和潮水,通過Word Embedding再乘上matrix W變成a 1到a 4,然後把它們丟進self-attention 層中,這時候每一個input都分別乘上3個不同的matrix產生3個不同的vector,分別把它們命名為q,k,v。
q代表的是query (to match others用來去匹配其它的向量)
k代表的是key (to be matched用來去被query匹配的向量)
v代表的是value(information to be extracted用來被抽取的信息的向量)
2)現在要做的工作就是用每個query q 去對每個 key k做attention(吃2個向量,輸出就是告訴你這2個向量有多麼匹配或者可以說輸入兩個向量輸出一個分數alpha(而怎麼去吃2個向量output一個分數,有很多不同的做法))。這里要預測潮水的下一個詞,所以乘 , 乘上 , 乘上 再經過soft-max分別得到 到 。
3)我們用 和每一個v相乘, 和 相乘加上 和 相乘。以此類推並相加,最終得到 。
4)然後經過很多層的self-attention,預測得到」退了」這個詞彙。
同理,現在要預測」退了」的下一個詞彙,按照前面的流程可以得到 ,然後經過很多層的self-attention層,得到」就」這個詞彙。
GPT的神奇之處在於它可以在完全沒有訓練數據的情況下,就可以做到閱讀理解,摘要,翻譯。折線圖中顯示了它在參數量上升的情況下,F1的值的效果。
1.Transformer的問題:
word Embedding 無上下文
監督數據太少
解決方法:
Contextual Word Embedding
2.ELMo( E mbeddings from L anguages Mo del)
- 多層雙向的LSTM的NNLM
- RNN-based language models(trained from lots of sentences)
ELMo的問題:
Contextual Word Embedding作為特徵
不適合特定任務
3.OpenAI GPT的改進
根據任務Fine-Tuning
使用Transformer替代RNN/LSTM
OpenAI GPT的問題:
單向信息流的問題
Pretraining(1)和Fine-Tuning(2)不匹配
解決辦法:
Masked LM
NSP Multi-task Learning
Encoder again
Tips:
- 使用中文模型
- max_seq_length可以小一點,提高效率
- 內存不夠,需要調整train_batch_size
- 有足夠多的領域數據,可以嘗試Pretraining
❸ BERT詳解(附帶ELMo、GPT 介紹)
首先我會詳細闡述 BERT 原理,然後簡單介紹一下 ELMO 以及 GPT
BERT 全稱為 B idirectional E ncoder R epresentation from T ransformer,是 Google 以 無監督的方式利用大量無標注文本 「煉成」的語言模型,其架構為 Transformer 中的 Encoder(BERT=Encoder of Transformer)
我在 Transformer 詳解 中已經詳細的解釋了所有 Transformer 的相關概念,這里就不再贅述
以往為了解決不同的 NLP 任務,我們會為該任務設計一個最合適的神經網路架構並做訓練,以下是一些簡單的例子
不同的 NLP 任務通常需要不同的模型,而設計這些模型並測試其 performance 是非常耗成本的(人力,時間,計算資源)。如果有一個能 直接處理各式 NLP 任務的通用架構 該有多好?
隨著時代演進,不少人很自然地有了這樣子的想法,而 BERT 就是其中一個將此概念付諸實踐的例子
Google 在預訓練 BERT 時讓它同時進行兩個任務:
1. 漏字填空
2. 下個句子預測
對正常人來說,要完成這兩個任務非常簡單。只要稍微看一下前後文就知道完形填空任務中 [MASK] 里應該填 退了 ;而 醒醒吧 後面接 你沒有妹妹 也十分合理(?)
接下來我會分別詳細介紹論文中這兩個任務的設計細節
在 BERT 中,Masked LM(Masked Language Model)構建了語言模型,簡單來說,就是 隨機遮蓋或替換 一句話裡面的任意字或詞,然後讓模型通過上下文預測那一個被遮蓋或替換的部分,之後 做 Loss 的時候也只計算被遮蓋部分的 Loss ,這其實是一個很容易理解的任務,實際操作如下:
這樣做的好處是,BERT 並不知道 [MASK] 替換的是哪一個詞,而且 任何一個詞都有可能是被替換掉的,比如它看到的 apple 可能是被替換的詞 。這樣強迫模型在編碼當前時刻詞的時候 不能太依賴當前的詞 ,而要考慮它的上下文,甚至根據上下文進行 "糾錯"。比如上面的例子中,模型在編碼 apple 時,根據上下文 my dog is,應該 把 apple 編碼成 hairy 的語義而不是 apple 的語義
我們首先拿到屬於上下文的一對句子,也就是兩個句子,之後我們要在這兩個句子中加一些特殊的 token: [CLS]上一句話[SEP]下一句話[SEP] 。也就是在句子開頭加一個 [CLS] ,在兩句話之間和句末加 [SEP] ,具體地如下圖所示
可以看到,上圖中的兩句話明顯是連續的。如果現在有這么一句話 [CLS] 我的狗很可愛 [SEP] 企鵝不擅長飛行 [SEP] ,可見這兩句話就 不是連續的 。在實際訓練中,我們會讓這兩種情況出現的數量為** 1:1**
Token Embedding 就是正常的詞向量,即 PyTorch 中的 nn.Embedding()
Segment Embedding 的作用是用 embedding 的信息讓模型 分開上下句 ,我們給上句的 token 全 0,下句的 token 全 1,讓模型得以判斷上下句的起止位置,例如
Position Embedding 和 Transformer 中的不一樣,不是三角函數,而是 學習出來的
BERT 預訓練階段實際上是將上述兩個任務結合起來,同時進行,然後將所有的 Loss 相加,例如
BERT 的 Fine-Tuning 共分為 4 種類型,以下內容、圖片均來自台大李宏毅老師 Machine Learning 課程 (以下內容 圖在上,解釋在下)
為什麼要用CLS?
這里李宏毅老師有一點沒講到,就是為什麼要用第一個位置,即 [CLS] 位置的 output。這里我看了網上的一些博客,結合自己的理解解釋一下。因為 BERT 內部是 Transformer,而 Transformer 內部又是 Self-Attention, 所以 [CLS] 的 output 裡面肯定含有整句話的完整信息 ,這是毋庸置疑的。但是 Self-Attention 向量中,自己和自己的值其實是佔大頭的,現在假設使用 的 output 做分類,那麼這個 output 中實際上會更加看重 ,而 又是一個有實際意義的字或詞,這樣難免會影響到最終的結果。但是 [CLS] 是沒有任何實際意義的,只是一個佔位符而已,所以就算 [CLS] 的 output 中自己的值佔大頭也無所謂。當然你 也可以將所有詞的 output 進行 concat,作為最終的 output
首先將問題和文章通過 [SEP] 分隔,送入 BERT 之後,得到上圖中黃色的輸出。此時我們還要訓練兩個 vector,即上圖中橙色和黃色的向量。首先將橙色和所有的黃色向量進行 dot proct,然後通過 softmax,看哪一個輸出的值最大,例如上圖中 對應的輸出概率最大,那我們就認為 s=2
同樣地,我們用藍色的向量和所有黃色向量進行 dot proct,最終預測得 的概率最大,因此 e=3。最終,答案就是 s=2,e=3
你可能會覺得這裡面有個問題,假設最終的輸出 s>e 怎麼辦,那不就矛盾了嗎?其實在某些訓練集里,有的問題就是沒有答案的,因此此時的預測搞不好是對的,就是沒有答案
以上就是 BERT 的詳細介紹,參考以下文章
ELMo是Embedding from language Model的縮寫,它通過無監督的方式對語言模型進行預訓練來學習單詞表示
這篇論文的想法其實非常簡單,但是效果卻很好。它的思路是用 深度的雙向 Language Model 在大量未標注數據上訓練語言模型 ,如下圖所示
在實際任務中,對於輸入的句子,我們使用上面的語言模型來處理它,得到輸出向量,因此這可以看作是一種 特徵提取 。但是 ELMo 與普通的 Word2Vec 或 GloVe 不同,ELMo 得到的 Embedding 是 有上下文信息 的
具體來說,給定一個長度為 N 的句子,假設為 ,語言模型會計算給定 的條件下出現 的概率:
傳統的 N-gram 模型 不能考慮很長的歷史 ,因此現在的主流是使用 多層雙向 LSTM 。在時刻 ,LSTM 的第 層會輸出一個隱狀態 ,其中 , 是 LSTM 的層數。最上層是 ,對它進行 softmax 之後得到輸出詞的概率
類似的,我們可以用 一個反向 來計算概率:
通過這個 LSTM,我們可以得到 。我們的損失函數是這兩個 LSTM 的 加和 :
這兩個 LSTM 有各自的參數 和 ,而 Word Embedding 參數 和 Softmax 參數 是共享的
為了用於下游(DownStream)的特定任務,我們會把不同層的隱狀態組合起來,具體組合的參數是根據不同的特定任務學習出來的,公式如下:
GPT 得到的語言模型參數不是固定的,它會根據特定的任務進行調整(通常是微調),這樣的到的句子表示能更好的適配特定任務。它的思想也很簡單,使用 單向 Transformer 學習一個語言模型 ,對句子進行無監督的 Embedding,然後 根據具體任務對 Transformer 的參數進行微調 。GPT 與 ELMo 有兩個主要的區別:
這里解釋一下上面提到的 單向 Transformer 。在 Transformer 的文章中,提到了 Encoder 與 Decoder 使用的 Transformer Block 是不同的。在 Decoder Block 中,使用了 Masked Self-Attention ,即句子中的每個詞都只能對 包括自己在內的前面所有詞進行 Attention ,這就是單向 Transformer。GPT 使用的 Transformer 結構就是將 Encoder 中的 Self-Attention 替換成了 Masked Self-Attention ,具體結構如下圖所示
訓練的過程也非常簡單,就是將 n 個詞的詞嵌入 ( ) 加上位置嵌入 ( ),然後輸入到 Transformer 中,n 個輸出分別預測該位置的下一個詞
這里的位置編碼沒有使用傳統 Transformer 固定編碼的方式,而是動態學習的
Pretraining 之後,我們還需要針對特定任務進行 Fine-Tuning。假設監督數據集合 的輸入 是一個詞序列 ,輸出是一個分類的標簽 ,比如情感分類任務
我們把 輸入 Transformer 模型,得到最上層最後一個時刻的輸出 ,將其通過我們新增的一個 Softmax 層(參數為 )進行分類,最後用 CrossEntropyLoss 計算損失,從而根據標准數據調整 Transformer 的參數以及 Softmax 的參數 。這等價於最大似然估計:
正常來說,我們應該調整參數使得 最大,但是 為了提高訓練速度和模型的泛化能力 ,我們使用 Multi-Task Learning,同時讓它最大似然 和
這里使用的 還是之前語言模型的損失(似然),但是使用的數據不是前面無監督的數據 ,而是使用當前任務的數據 ,而且只使用其中的 ,而不需要標簽
針對不同任務,需要簡單修改下輸入數據的格式,例如對於相似度計算或問答,輸入是兩個序列,為了能夠使用 GPT,我們需要一些特殊的技巧把兩個輸入序列變成一個輸入序列
ELMo 和 GPT 最大的問題就是 傳統的語言模型是單向的 —— 我們根據之前的歷史來預測當前詞。但是我們不能利用後面的信息。比如句子 The animal didn』t cross the street because it was too tired 。我們在編碼 it 的語義的時候需要同時利用前後的信息,因為在這個句子中, it 可能指代 animal 也可能指代 street 。根據 tired ,我們推斷它指代的是 animal 。但是如果把 tired 改成 wide ,那麼 it 就是指代 street 了。傳統的語言模型,都 只能利用單方向的信息 。比如前向的 RNN,在編碼 it 的時候它看到了 animal 和 street ,但是它還沒有看到 tired ,因此它不能確定 it 到底指代什麼。如果是後向的 RNN,在編碼的時候它看到了 tired ,但是它還根本沒看到 animal ,因此它也不能知道指代的是 animal 。 Transformer 的 Self-Attention 理論上是可以同時關注到這兩個詞的,但是根據前面的介紹,為了使用 Transformer 學習語言模型,必須 用 Mask 來讓它看不到未來的信息 ,所以它也不能解決這個問題的
根據上文內容預測下一個可能跟隨的單詞,就是常說的自左向右的語言模型任務,或者反過來也行,就是根據下文預測前面的單詞,這種類型的LM被稱為自回歸語言模型。(GPT,ELMO)GPT 就是典型的自回歸語言模型。ELMO盡管看上去利用了上文,也利用了下文,但是本質上仍然是自回歸LM,這個跟模型具體怎麼實現有關系。ELMO是做了兩個方向(從左到右以及從右到左兩個方向的語言模型),但是是分別有兩個方向的自回歸LM,然後把LSTM的兩個方向的隱節點狀態拼接到一起,來體現雙向語言模型這個事情的。所以其實是兩個自回歸語言模型的拼接,本質上仍然是自回歸語言模型。
自回歸語言模型有優點有缺點,缺點是只能利用上文或者下文的信息,不能同時利用上文和下文的信息,當然,貌似ELMO這種雙向都做,然後拼接看上去能夠解決這個問題,因為融合模式過於簡單,所以效果其實並不是太好。它的優點,其實跟下游NLP任務有關,比如生成類NLP任務,比如文本摘要,機器翻譯等,在實際生成內容的時候,就是從左向右的, 自回歸語言模型天然匹配這個過程 。而Bert這種DAE模式,在生成類NLP任務中,就面臨訓練過程和應用過程不一致的問題,導致 生成類的NLP任務到目前為止都做不太好 。
自回歸語言模型只能根據上文預測下一個單詞,或者反過來,只能根據下文預測前面一個單詞。相比而言,Bert通過 在輸入X中隨機Mask掉一部分單詞 ,然後預訓練過程的主要任務之一是根據上下文單詞來預測這些被Mask掉的單詞,如果你對Denoising Autoencoder比較熟悉的話,會看出,這確實是典型的DAE的思路。那些被Mask掉的單詞就是在輸入側加入的所謂噪音。類似Bert這種預訓練模式,被稱為DAE LM。
這種DAE LM的優缺點正好和自回歸LM反過來,它能比較自然地融入雙向語言模型,同時看到被預測單詞的上文和下文,這是好處。缺點是啥呢? 主要在輸入側引入[Mask]標記,導致預訓練階段和Fine-tuning階段不一致的問題 ,因為Fine-tuning階段是看不到[Mask]標記的。DAE嗎,就要引入噪音,[Mask] 標記就是引入噪音的手段,這個正常。
XLNet的出發點就是:能否 融合自回歸LM和DAE LM兩者的優點 。就是說如果站在自回歸LM的角度,如何引入和雙向語言模型等價的效果;如果站在DAE LM的角度看,它本身是融入雙向語言模型的,如何拋掉表面的那個[Mask]標記,讓預訓練和Fine-tuning保持一致。當然,XLNet還講到了一個Bert被Mask單詞之間相互獨立的問題。
❹ OP是什麼的縮寫
OP(片頭曲(OpeningSong))
片頭曲(オープニングテーマ/ソング, Opening Theme/Song, 簡稱OP)是電視劇或電視動畫劇初播放的樂曲、歌曲,(但日本動畫和電視劇常在前情提要前)。
數目如多於一首歌的,在隨後發行的原聲CD、及動畫資料中會以OP1、OP2或主題曲(片頭曲)一、主題曲(片頭曲)二等來表示。
部分作品的片頭曲里會顯示原作或編劇、導演、製作、贊助商、片頭曲詞曲歌手等訊息。有些沒有片尾曲的作品,會加上腳本、聲優或演員等(因此有像海賊王片頭曲一樣長達2分30秒的)。
這些只是常例,依作品會有不同情形,一首片頭曲通常會用13~26集(一季到兩季份),超長番的話有可能持續一年。
此外,部分電視公司在播放外購電視劇或動畫時會將其剪片,或是不播出,也有轉為其他歌曲的。
(4)elmo怎麼使用腳本擴展閱讀
在不同國家上演、播放的作品,有時會由於不同的風俗民情等因素,會另請填詞人以本土語言重新填寫歌詞,並會另請歌手、配音演員或其他人士代唱。
例如歐美地區,幾乎都會把歌曲與歌詞重新改寫,影像則是會和原作品有部分差異。台灣、香港動畫歌曲中,亦有部分歌曲有改唱(使用原曲,以本地語言填詞和主唱)。
一般而言,主題曲是指片頭曲;但有時主題曲是另外一首,而非片頭曲;而且有時片尾曲(或插曲)也被視為主題曲。
❺ 一文看盡2018全年AI技術大突破:NLP跨過分水嶺、CV研究效果驚人
量子位 出品 | 公眾號 QbitAI
2018,仍是AI領域激動人心的一年。
這一年成為NLP研究的分水嶺,各種突破接連不斷;CV領域同樣精彩紛呈,與四年前相比GAN生成的假臉逼真到讓人不敢相信;新工具、新框架的出現,也讓這個領域的明天特別讓人期待……近日,Analytics Vidhya發布了一份2018人工智慧技術總結與2019趨勢預測報告,原文作者PRANAV DAR。量子位在保留這個報告架構的基礎上,對內容進行了重新編輯和補充。這份報告總結和梳理了全年主要AI技術領域的重大進展,同時也給出了相關的資源地址,以便大家更好的使用、查詢。報告共涉及了五個主要部分:
下面,我們就逐一來盤點和展望,嘿喂狗~
2018年在NLP 歷史 上的特殊地位,已經毋庸置疑。
這份報告認為,這一年正是NLP的分水嶺。2018年裡,NLP領域的突破接連不斷:ULMFiT、ELMo、最近大熱的BERT……
遷移學習成了NLP進展的重要推動力。從一個預訓練模型開始,不斷去適應新的數據,帶來了無盡的潛力,甚至有「NLP領域的ImageNet時代已經到來」一說。
正是這篇論文,打響了今年NLP遷移學習狂歡的第一槍。論文兩名作者一是Fast.ai創始人Jeremy Howard,在遷移學習上經驗豐富;一是自然語言處理方向的博士生Sebastian Ruder,他的NLP博客幾乎所有同行都在讀。兩個人的專長綜合起來,就有了ULMFiT。想要搞定一項NLP任務,不再需要從0開始訓練模型,拿來ULMFiT,用少量數據微調一下,它就可以在新任務上實現更好的性能。
他們的方法,在六項文本分類任務上超越了之前最先進的模型。詳細的說明可以讀他們的論文:https://arxiv.org/abs/1801.06146Fast.ai網站上放出了訓練腳本、模型等:http://nlp.fast.ai/category/classification.html
這個名字,當然不是指《芝麻街》里那個角色,而是「語言模型的詞嵌入」,出自艾倫人工智慧研究院和華盛頓大學的論文Deep contextualized word representations,NLP頂會NAACL HLT 2018的優秀論文之一。
ELMo用語言模型(language model)來獲取詞嵌入,同時也把詞語所處句、段的語境考慮進來。
這種語境化的詞語表示,能夠體現一個詞在語法語義用法上的復雜特徵,也能體現它在不同語境下如何變化。
當然,ELMo也在試驗中展示出了強大功效。把ELMo用到已有的NLP模型上,能夠帶來各種任務上的性能提升。比如在機器問答數據集SQuAD上,用ELMo能讓此前最厲害的模型成績在提高4.7個百分點。
這里有ELMo的更多介紹和資源:
https://allennlp.org/elmo
它由Google推出,全稱是 B idirectional E ncoder R epresentations from T ransformers,意思是來自Transformer的雙向編碼器表示,也是一種預訓練語言表示的方法。從性能上來看,沒有哪個模型能與BERT一戰。它在11項NLP任務上都取得了最頂尖成績,到現在,SQuAD 2.0前10名只有一個不是BERT變體:
如果你還沒有讀過BERT的論文,真的應該在2018年結束前補完這一課:https://arxiv.org/abs/1810.04805另外,Google官方開源了訓練代碼和預訓練模型:https://github.com/google-research/bert如果你是PyTorch黨,也不怕。這里還有官方推薦的PyTorch重實現和轉換腳本:https://github.com/huggingface/pytorch-pretrained-BERT
BERT之後,NLP圈在2018年還能收獲什麼驚喜?答案是,一款新工具。
就在上周末,Facebook開源了自家工程師們一直在用的NLP建模框架PyText。這個框架,每天要為Facebook旗下各種應用處理超過10億次NLP任務,是一個工業級的工具包。
(Facebook開源新NLP框架:簡化部署流程,大規模應用也OK)
PyText基於PyTorch,能夠加速從研究到應用的進度,從模型的研究到完整實施只需要幾天時間。框架里還包含了一些預訓練模型,可以直接拿來處理文本分類、序列標注等任務。
想試試?開源地址在此:
https://github.com/facebookresearch/pytext
它能主動打電話給美發店、餐館預約服務,全程流暢交流,簡直以假亂真。Google董事長John Hennessy後來稱之為「非凡的突破」,還說:「在預約領域,這個AI已經通過了圖靈測試。」Duplex在多輪對話中表現出的理解能力、合成語音的自然程度,都是NLP目前水平的體現。如果你還沒看過它的視頻……
NLP在2019年會怎麼樣?我們借用一下ULMFiT作者Sebastian Ruder的展望:
今年9月,當搭載BigGAN的雙盲評審中的ICLR 2019論文現身,行家們就沸騰了: 簡直看不出這是GAN自己生成的 。
在計算機圖像研究史上,BigGAN的效果比前人進步了一大截。比如在ImageNet上進行128×128解析度的訓練後,它的Inception Score(IS)得分166.3,是之前最佳得分52.52分 3倍 。
除了搞定128×128小圖之外,BigGAN還能直接在256×256、512×512的ImageNet數據上訓練,生成更讓人信服的樣本。
在論文中研究人員揭秘,BigGAN的驚人效果背後,真的付出了金錢的代價,最多要用512個TPU訓練,費用可達11萬美元,合人民幣76萬元。
不止是模型參數多,訓練規模也是有GAN以來最大的。它的參數是前人的2-4倍,批次大小是前人的8倍。
研究論文:https://openreview.net/pdf?id=B1xsqj09Fm
前前後後,Fast.ai團隊只用了16個AWS雲實例,每個實例搭載8塊英偉達V100 GPU,結果比Google用TPU Pod在斯坦福DAWNBench測試上達到的速度還要快40%。這樣拔群的成績,成本價只需要 40美元 ,Fast.ai在博客中將其稱作人人可實現。
相關地址: Fast.ai博客介紹:
今年8月,英偉達和MIT的研究團隊高出一個 超逼真 高清視頻生成AI。
只要一幅動態的語義地圖,就可獲得和真實世界幾乎一模一樣的視頻。換句話說,只要把你心中的場景勾勒出來,無需實拍,電影級的視頻就可以自動P出來:
除了街景,人臉也可生成:
這背後的vid2vid技術,是一種在生成對抗性學習框架下的新方法:精心設計的生成器和鑒別器架構,再加上時空對抗目標。
這種方法可以在分割蒙版、素描草圖、人體姿勢等多種輸入格式上,實現高解析度、逼真、時間相乾的視頻效果。
好消息,vid2vid現已被英偉達開源。
研究論文:https://tcwang0509.github.io/vid2vid/paper_vid2vid.pdf
GitHub地址https://github.com/NVIDIA/vid2vid
相關地址
相關地址