行早 發自 凹非寺
量子位 | 公眾號 QbitAI
Meta AI搞了一個大一統的自監督學習模型Data2vec。
怎麼個大一統法?
圖像、語音、文本都可以處理,效果還都不錯,在CV方面甚至超過了包括MAE、MaskFeat在內的一眾模型。
這是怎麼做到的?我們來看看Data2vec的思路和結構。
Data2vec如何統一圖音文
關於這個問題,我們可以從模型名字中看出一些端倪。
和Word2vec把詞轉化為可計算的向量類似,Data2vec會把不同類型的數據都轉化為同一種形式的數據序列。
這樣就成功避開了模態不同這個問題。
然後,再用自監督學習的方法遮住這些數據的一部分,通過訓練讓模型把遮住的部分還原。
而它的結構也是在這個思路上設計的。
Data2vec以Transformer架構為基礎,設計了一個教師-學生網絡結構:
從上圖中可以看出,無論對於任何形式的輸入,都先轉化為數據序列,並mask一部分信息(或擋住狗頭,或覆蓋一段語音,或遮住一個單詞)。
然後讓學生網絡通過部分可見的輸入去預測完整輸入,再由教師網絡去調整,達到一個模型處理多任務的效果。
那接下來的問題就是如何把不同類型的輸入都轉化為同一種形式了。
Data2vec如何標準化輸入數據
在標準化輸入這一塊,Data2vec還是具體問題具體分析的。
畢竟像素、波形和文本是完全不同的形式,而Data2vec對不同形式的輸入採用了不同的編碼策略,但是目的都是一樣的。
那就是將這些輸入都轉化為數據序列。
具體的操作方法是這樣的:
任務 | 編碼方式 | 掩碼方式 |
計算機視覺 | ViT圖像分塊 | Block-wise Masking Strategy |
語音 | 多層一維卷積神經網絡 | Mask spans of latent speech representation |
文本 | 預處理獲得子詞單元,然後通過嵌入向量將其嵌入分布空間 | Tokens |
其中ViT的編碼策略就是把一張圖分成一系列的圖塊,每個圖塊有16x16個像素,然後輸入到一個線性變換系統中。
而語音的編碼方式是用多層的一維卷積神經網絡將16kHz的波形轉換為50Hz的一串數據序列。
再加上文本編碼的嵌入向量,這樣所有模態的輸入都轉換為了數據序列,方便後續的訓練。
而對於掩碼策略來說,不同的模態的表現形式也是不一樣的。
例如圖像可以遮住一塊,但是語音和文本有上下文的關聯,不能隨便遮住一部分。
因此對不同的模態,Data2vec也採取了相應的符合不同數據特徵的掩碼方式。
這樣標準化之後,Data2vec還針對不同的下游任務做了一些微調,其中語音和文本的模型已經在GitHub上放出,視覺模型也正在路上:
我們來看看這統一的模型性能怎麼樣。
性能表現
雖然Data2vec三手齊抓,但是性能也沒落下。
在計算機視覺方面,在IN1K上預訓練情況如下表所示:
和一些其他模型相比,Data2vec精度表現最好。而且Data2vec只訓練了800個epochs,而表中的MAE,MaskFeat訓練了1600個epochs。
看柱狀圖則更為明顯,藍色為Data2vec:
在語音處理方面,在LS-960上預訓練結果如下:
可以看出,Data2vec在不同的標籤數據量下單詞錯誤率都比wav2vec2.0和HuBERT要低。
在GLUE評估中,Data2vec在自然語言推理(MNLI、QNLI、RTE),句子相似性(MRPC、QQP、STS-B),語法(CoLA)和情緒分析(SST)等指標中和RoBERTa不相上下。
其中Baseline這一條是RoBERTa在和BERT類似的設置中的訓練結果:
總體評分也差不多:
這麼看來,統一的模型架構真的可以有效地用於多種任務模式。
雖然Data2vec在輸入數據和掩碼方式上還是按照不同的方法來處理,但是它仍然是探索模型統一的嘗試。
或許將來會有統一的掩碼策略和不同模態數據的混合數據集,做到真正的大一統。
參考鏈接:
[1]https://ai.facebook.com/research/data2vec-a-general-framework-for-self-supervised-learning-in-speech-vision-and-language
[2]https://ai.facebook.com/blog/the-first-high-performance-self-supervised-algorithm-that-works-for-speech-vision-and-text
[3]https://github.com/pytorch/fairseq/tree/main/examples/data2vec