內存用量1/20,速度加快80倍,QQ提全新BERT蒸餾框架,未來將開源

2020-12-03 手機鳳凰網

機器之心發布

機器之心編輯部



騰訊 QQ 團隊研究員對 BERT 進行了模型壓縮,在效果損失很小的基礎上,LTD-BERT 模型大小 22M,相比於 BERT 模型內存、存儲開銷可降低近 20 倍,運算速度方面 4 核 CPU 單機可以預測速度加速 80 餘倍。相關代碼和更多結果將在近期開源。

BERT 已經被驗證是解決口語化短文本語義量化的極為有效的工具,對於口語化人機互動系統如 FAQ、語音助手等產品意義重大。但受限於模型的高複雜度和高計算量,其產業線上應用進展不如預期,尤其很難滿足像 QQ、QQ 空間等億級用戶量產品對性能的需求。

為了解決這個問題,QQ 團隊研究人員提出了 Learning to Distill BERT (LTD-BERT) 的模型對 BERT 進行了模型壓縮,在效果損失很小的基礎上,LTD-BERT 模型大小 22M,相比於 BERT 模型內存、存儲開銷可降低近 20 倍,運算速度方面 4 核 CPU 單機可以預測速度加速 80 餘倍。另外,LTD-BERT 也被驗證在下遊任務可以保持與 BERT 近似的效果,包括相似度計算、短文本分類、短文本聚類等,其應用場景包括但不限於語義匹配、意圖識別、文本聚類分析等。

據機器之心了解,從 2019 年 8 月份在騰訊內部開源至今,LTD-BERT 的效果已經在 QQ、騰訊新聞、騰訊遊戲、騰訊看點、騰訊健康等服務海量用戶的產品的實際任務中得到驗證,確保算法擁有足夠的泛化能力和實用性。

此外,該團隊還表示 LTD-BERT 相關代碼和更多結果將在近期開源。 簡介 2018 年底 Google 提出並開源了 BERT(Bidirectional Encoder Representation from Transformers),對 NLP 的影響已經綿延至今,非常多的 NLP 公開任務都被基於預訓練 BERT 的工作刷榜,在工業界大家也逐漸的直接或通過 finetuning 將 BERT 運用到實際業務當中。

但是在這個過程中讓大家非常頭疼的事情就是因為超大的參數量,BERT 的運算速度和資源開銷是很難權衡的問題。GPU 上線速度較快,但是成本很高;CPU 上線的話運算速度較慢,需要做大量的底層優化工作。 為了解決這個問題,QQ 研究團隊提出了一種基於知識蒸餾的方法,在儘可能保證預訓練 BERT 具備的文本理解能力不丟失的前提下,可以大大降低模型規模,提高預測速度。QQ 研究團隊主要針對的是基於從 BERT 得到的 sentence embedding 去完成更上層任務的需求,這也能滿足當前對於 BERT 的大部分的需求,囊括了文本分類、文本聚類、相似度計算等等。當然,word-level 的壓縮也可以以近似的方法去實現。

圖 1. BERT 的輸入和嵌入(取自 [1]) Bert 中帶權重的句嵌入 既然要基於 BERT 的 sentence embedding 去做擬合,那第一步要確定如何獲得 BERT 的 sentence embedding。如上圖所示,BERT 對一個完整的句子會加入 [CLS] 用於針對句子層面的上層任務和 [SEP] 作為句子分隔符,通常的做法是用 [CLS] 所在位置的 vector 作為 sentence embedding。因為 [CLS] 參與到了句子層面「句對二元關係預測-是否是下一句」的預訓練任務中,所以 [CLS] 位置是能一定程度反映句子的語義的,至少可以反應語句整體的 topic。另一種常用的方法是 averaging 每個字(中文)在 context 下的 embedding 來代表句子,這是在 word embedding 層面經常使用的方法。 但是其實通常來講,尤其是針對句子層面的任務而言,一個句子的信息更多是依靠 keywords 來提供的,因此 QQ 研究人員提出了利用 IDF 值給句子中字的權重進行加權的方式來獲取 BERT 的句向量,在試驗中也取得了更好的效果。 具體做法是:

首先,在大量文本上,用某個分詞工具分詞,計算得到詞語粒度的 IDF,即:

然後,對任意一個句子分詞後,可得到其每個詞語的 weight(即這個詞語的 IDF)。不過,鑑於 BERT 得到的是字向量,在此用該詞語的權重除以詞語長度得到字的權重。最後,每個字的權重加上平滑項,再用每個字的權重除以整個句子所有權重和,得到每個字最終的權重。 在計算得到句子中每個字的權重後,然後對字的 BERT 向量加權求和,得到加權句向量,即

為什麼不直接對字進行權重計算主要是考慮字的語義通常不夠明確,且在依賴上下文的同時還依賴組詞,那麼對於詞的 IDF 值更具有實際意義。另外,加權的方式另一種考量是對於具體的任務擁有足夠的適配能力,可以通過權重的調整來關注到具體任務更關心的詞語。 LTD-BERT 知識蒸餾是一種模型壓縮的常見方法,是 14 年 Hinton 提出的 [2]。其在 Teacher-Student 框架中,將一些複雜、學習能力強的網絡學到的特徵表示「知識」蒸餾出來,傳遞給參數量小、學習能力弱的網絡。常見的蒸餾一般把 Teacher 和 Student 作用在同樣的問題上,可以提供 Student 在 one-shot label 上學不到的 soft label 信息,這些裡面包含了類別間信息,以及 Student 小網絡學不到而 Teacher 網絡可以學到的特徵表示『知識』,所以一般可以提高 Student 網絡的精度 [3]。 之前已經提出的一些蒸餾方法 [5,6,7,8],多數是針對文本分類、語義匹配、序列標註等任務上,把 BERT 作為 Teacher,直接將標準的蒸餾過程實施起來,或在此基礎上改進 Student 的學習目標。

如下圖 2 中所示的 BERT 訓練流程,這部分工作更關注在右側 Supervised 部分。而 BERT 的突破很大程度上依賴與圖中左邊弱監督過程中從大量文本數據學習到的語義建模能力,因此這裡 LTD-BERT 的初衷是希望 Student 模型能夠將這部分能力蒸餾過來,所以不對 Student 網絡建立目標任務,Student 的目標僅為擬合 Teacher 網絡的 sentence vector,不再去關注 Teacher 網絡的預訓練任務。通過合適的 loss function 設計,實驗驗證簡單的 Student 網絡可以較好的擬合 BERT 產生的句向量,並運用於各類 Task。

圖 2. BERT 適用在 NLP 任務上的流程.(取自 [4]) Distilling 流程及架構 整個 BERT 壓縮的過程分成幾個部分,首先對輸入的句子做一定的清洗(BERT 本身也有一定的清洗過程),然後如前文提到字層面的 weight 計算需要分詞、計算/獲取 weight、均攤到 character(如下圖中 preprocessing 所示)。經歷完預處理後,得到了單字列表和每個字對應的權重,也就是 Learning to Distilling 過程的輸入。 訓練過程一方面用預訓練的 BERT(Google 開源的中文預訓練模型)給句子建模,並通過加權平均得到 BERT vector(如圖中 training 階段中的右側部分所示);另一方面,使用簡易的序列模型(本文介紹結果是以 LSTM 為例)同樣的方式給句子建模,得到每個字在 context 下的語義,並使用同樣的 weight 得到 sentence embedding,進而使用基於向量距離的 loss function 進行訓練。通過百萬級數據上的向量擬合訓練,得到了一個規模只有 BERT 1/20 大小的 LTD-BERT 模型來為句子構建句向量。該句向量可以直接用於語句相似度計算、基於語義的文本聚類,另外 LTD-BERT 也可以像 BERT 一樣在實際任務上 finetune 來獲得更好的目標數據上的適應性。 這裡 QQ 團隊提出的方法只優化了最後句子的向量,因為使用的是序列模型來作為 LTD-BERT 的基準模型,原理上是可以直接用這個流程擬合 BERT 給每個漢字的建模結果。但是沒有這樣做一方面是直接擬合已經可以獲得效果不錯的 sentence embedding;另一方面是擬合的過程是使用的預生成的 BERT based sentence embedding,如果存下每個詞的向量存儲開銷是巨大的,如果不進行預生成那訓練速度會被 BERT 的 inference 速度 block。

圖 3. LTD-BERT 訓練過程

LTD Student 模型結構

圖 4. LTD-BERT 的 Student 模型 這裡詳細介紹一下當前使用的 Student 模型(即 LTD-BERT)的模型結構,這裡基本是一個 standard 的雙向 LSTM,在字 embedding 之上構建正向和逆向的 LSTM 獲取上文語義和下文語義下一個漢字的語義,然後使用與 BERT 同樣的 weights(圖中 w)做 weighted sum,得到一個與 BERT dimension 一樣的 vector。這裡需要使用雙向 LSTM 是因為 BERT 預訓練任務對於每個詞構建上下文感知的表示,保持建模過程的一致性才能保證更好的擬合效果,因此這裡 LTD-BERT 基礎模型的唯一限制是需要在為每個漢字建模的時候提供上下文語義的建模,QQ 研究團隊也試驗了不滿足這個假設的基礎模型,效果會大打折扣。 效果

從 2019 年 8 月份在騰訊內部開源至今,LTD-BERT 的效果已經在如下業務:QQ、騰訊新聞、騰訊遊戲、騰訊看點、騰訊健康等海量用戶產品線的上得到驗證,包括文本分類、語義匹配、文本聚類等任務,確保算法擁有足夠的泛化能力和實用性。具體的任務上,本文選取了一些有代表性的對比數據說明模型的效果,因為涉及具體,這裡主要用「類別個數+數據量+數據類型+評測標準」來區分數據的特點。 文本分類

語義匹配

總結來說,在任意句子層面的任務上,該方法的方法可以提供一個規模很小的 LSTM 模型來替代 BERT,無差別的進行使用。並且實驗發現當數據量相對較少,尤其是業務數據常見的幾 k~幾十 k 規模上,LTD-BERT 要明顯優於 LSTM 以及前文提到的蒸餾算法,並且效果也更加接近 BERT,通常配合上一些其他的邏輯或者簡單方法可以與 BERT 持平,甚至更優於單獨 BERT 的效果。尤其對於資源有限或者業務量較大的業務來講可以有效解決已經嘗到 BERT 很香卻只能線下看看的問題。

另外,QQ 團隊也做了一些公開任務上的測試,以更好對比,後續會將代碼開源,並在開源項目中陸續放出更多實驗結果。另外,現在 NLP 飛速發展的時代,也會有很多相關的工作思路在一個階段發展起來。在內部使用 LTD-BERT 的同時,也看到了 DistillBERT[9] 和 Tiny-BERT[10] 陸續推出,這兩個工作跟 LTD-BERT 的出發點有一致之處,都是關注在圖 2 的左邊部分,大層面的不同之處主要有兩點:

1. LTD-BERT 關注在預訓練的模型上,DistillBERT 和 Tiny-BERT 關注在預訓練過程中引入蒸餾;

2,LTD-BERT 關注不依賴 Transformer 或者 BERT 結構的蒸餾過程,探索更小算量的可能性。

[1] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.

[2] Distilling the Knowledge in a Neural Network.

[3] 簡評 | 知識蒸餾(Knowledge Distillation)最新進展(一).

[4] The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning).

[5] Distilling Task-Specific Knowledge from BERT into Simple Neural Networks.

[6] Scalable attentive sentence-pair modeling via distilled sentence embedding.

[7] Transformer to cnn: Label-scarce distillation for efficient text classification.

[8] Patient knowledge distillation for bert model compression.

[9] DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter.

[10] TinyBERT: Distilling BERT for Natural Language Understanding.

相關焦點

  • 速度×6,模型縮小20倍:華為&華科TinyBERT做搜索,性能達BERT90%
    現在,就有人用這個Transformer蒸餾方法,讓BERT搜索變快6倍,模型大小則只有原來的1/20。TinyBERT搜索首先,用微軟的MS Marco訓練三元組,在PyTorch中訓練一個基於BERT的教師網絡。
  • 超小型BERT中文版橫空出世!模型只有16M,訓練速度提升10倍
    參數大小1.8M,模型大小16M,僅為BERT的1/25,訓練和推理預測速度提升近10倍。該模型開發者徐亮在新智元 AI 朋友圈公布了這一好消息,歡迎一起來討論~ Size matters。模型越大,效果必然越好。
  • BERT 模型蒸餾 TinyBERT
    BERT 的效果好,但是模型太大且速度慢,因此需要有一些模型壓縮的方法。TinyBERT 是一種對 BERT 壓縮後的模型,由華中科技和華為的研究人員提出。TinyBERT 主要用來模型蒸餾的方法進行壓縮,在 GLUE 實驗中可以保留 BERT-base 96% 的性能,但體積比 BERT 小了 7 倍,速度快了 9 倍。
  • 阿里雲開源EasyTransfer:業界首個面向NLP場景深度遷移學習框架
    值得一提的是,配合混合精度、編譯優化和分布式策略,EasyTransfer 支持的 ALBERT 模型比社區版的 ALBERT 在分布式訓練的運算速度上快 4 倍多。集成了任務有感知的 BERT 模型壓縮 AdaBERT,採用了神經網路架構搜索去搜索出任務相關的架構去壓縮原始的 BERT 模型,可以壓縮最多到原來的 1/17,inference 最多提升 29 倍,且模型效果損失在 3% 以內;  兼容 PAI 生態產品:框架基於 PAI-TF 開發,用戶通過簡單的代碼或配置文件修改,就可以使用 PAI 自研高效的分布式訓練,編譯優化等特性;同時框架完美兼容
  • 速度提200倍,愛奇藝北航提基於耦合知識蒸餾視頻顯著區域檢測算法
    機器之心發布機器之心編輯部2020 年 2 月 7 日-2 月 12 日,AAAI 2020 將於美國紐約舉辦。不久之前,大會官方公布了今年的論文收錄信息:收到 8800 篇提交論文,評審了 7737 篇,接收 1591 篇,接收率 20.6%。
  • 阿里雲開源的業界首個面向NLP場景深度遷移學習框架EasyTransfer
    面向自然語言處理場景的深度遷移學習在現實場景裡有巨大的需求,因為大量新的領域不斷湧現,傳統的機器學習需要對每個領域都積累大量訓練數據,這將會耗費大量標註的人力與物力。深度遷移學習技術可以將源領域學到的知識遷移到新的領域的任務,進而大大減少標註的資源。儘管面向自然語言場景的深度遷移學習有很多的需求,目前開源社區還沒有一個完善的框架,而且構建一個簡單易用且高性能的框架有巨大挑戰。
  • 業界首個面向NLP場景深度遷移學習框架開源 | 阿里雲出品
    深度遷移學習技術可以將源領域學到的知識遷移到新的領域的任務,進而大大減少標註的資源。儘管面向自然語言場景的深度遷移學習有很多的需求,目前開源社區還沒有一個完善的框架,而且構建一個簡單易用且高性能的框架有巨大挑戰。首先,預訓練模型加知識遷移現在是主流的NLP應用模式,通常預訓練模型尺寸越大學習到的知識表徵越有效,然而超大的模型給框架的分布式架構帶來了巨大挑戰。
  • BERT詳解:開創性自然語言處理框架的全面指南
    然後幾天後,新一代前沿框架的出現,導致現有模型已經落後了。這不是一個假設。這就是自然語言處理領域工作者所面對的現實(和挑戰)!過去兩年取得的突破令人驚嘆,接連出現出現各種新框架,可能比目前掌握的框架還要好。谷歌BERT就是這樣一個自然語言處理框架。這可能是近幾年最有影響力的一次革新。可以毫不誇張地說,BERT已經對自然語言處理進行了顯著的變革。
  • 谷歌開源SEED RL強化學習框架,訓練成本降低多達80%
    智東西3月24日消息,美國當地時間3月23日,谷歌開源了一個名為SEED RL的強化學習(RL)框架,能夠將人工智慧(AI)模型訓練擴展到數千臺機器,有助於在一臺機器上以每秒數百萬幀的速度進行訓練,並將訓練成本降低多達
  • 小版BERT也能出奇蹟:最火的預訓練語言庫探索小巧之路
    想了解更多,可以查看這篇關於 BERT 量化的精彩博客:https://blog.rasa.com/compressing-bert-for-faster-prediction-2/。Hugging Face 的研究者決定把重點放在知識蒸餾(distillation)上。蒸餾即,將較大模型(教師模型)壓縮成較小模型(學生模型)的方法。
  • TinyBERT:模型小7倍,速度快8倍,華中科大、華為出品
    為此,來自華中科技大學、華為諾亞方舟實驗室的研究者提出了 TinyBERT,這是一種為基於 transformer 的模型專門設計的知識蒸餾方法,模型大小還不到 BERT 的 1/7,但速度是 BERT 的 9 倍還要多,而且性能沒有出現明顯下降。目前,該論文已經提交機器學習頂會 ICLR 2020。
  • 1美元從零開始訓練Bert,手把手教你優雅地薅谷歌雲TPU羊毛
    在史丹福大學機器閱讀理解水平測試SQuAD1.1中,Bert在全部兩個衡量指標上,全面超越人類表現。並且在另外11種不同NLP測試中均創造了歷史以來最好成績,將GLUE基準提升7.6%,將MultiNLI的準確率提提升5.6%。
  • 阿里雲開源業界首個面向NLP場景深度遷移學習框架
    值得一提的是,配合混合精度、編譯優化和分布式策略,EasyTransfer 支持的 ALBERT 模型比社區版的 ALBERT 在分布式訓練的運算速度上快 4 倍多。簡單高性能的框架:屏蔽複雜的底層實現,用戶只需關注模型的邏輯結構,降低了 NLP 和遷移學習的入門門檻;同時,框架支持工業級的分布式應用場景,改善了分布式優化器,配合自動混合精度,編譯優化,和高效的分布式數據 / 模型並行策略,做到比社區版的多機多卡分布式訓練在運算速度上快 4 倍多;
  • 最強國產開源AI框架再進化
    乾明 發自 凹非寺量子位 報導 | 公眾號 QbitAI2項全新能力,4大重磅升級,35個高精度預訓練模型上線,15個產業實踐中廣泛應用的視覺算法加持……這就是最強國產開源深度學習框架——飛槳的最新重要升級。
  • 開源圖神經網絡框架DGL升級:GCMC訓練時間從1天縮到1小時
    乾明 編輯整理 量子位 報導 | 公眾號 QbitAI又一個AI框架迎來升級。這次,是紐約大學、亞馬遜聯手推出圖神經網絡框架DGL。不僅全面上線了對異構圖的支持,復現並開源了相關異構圖神經網絡的代碼,在GCMC、RCGN等業內知名的模型實現上,取得更好效果。
  • Hugging Face的BERT源碼框架圖文詳解
    市面上沒看到圖文結合的huggingface transformers框架bert源碼解說,自己也在看源碼所以順手自己做個筆記應用範圍BERT可應用在搜尋引擎,智能客服,聊天機器人,語音助手,推薦系統,知識圖譜的NLP下遊任務如:閱讀理解,知識抽取,文本分類,語言生成
  • NVIDIA TF32將AI訓練與HPC速度提升20倍
    NVIDIA Ampere架構內置TF32,能夠加快單精度作業速度,保持精度且無需使用任何新代碼。與Volta GPU上的單精度浮點數值(FP32)相比,在A100 GPU Tensor核心上運行的TF32可提供高達10倍的加速。將TF32與A100上的結構稀疏性相結合後,相比於Volta可達到20倍性能提升。認識新的數值現在讓我們先來了解TF32的工作原理和它的「用武之地」。數值格式就像標尺。
  • NVIDIA A100 GPU中的TF32將AI訓練與HPC速度提升20倍
    NVIDIA A100 GPU中的TF32將AI訓練與HPC速度提升20倍 2020年08月19日 14:32作者:網絡編輯:宏偉   NVIDIA
  • Milvus 實戰 | Milvus 與 BERT 搭建文本搜索
    本文的項目是將 Milvus 與 BERT 模型結合搭建文本搜尋引擎,使用 BERT 模型將文本數據轉成向量,結合 Milvus 特徵向量相似度搜尋引擎可以快速搜索相似文本。這是因為 BERT 模型使用了 Transformer 作為算法的主要框架,而 Transformer 框架能更徹底地捕捉語句中的雙向關係。
  • 一種多層對多層的BERT蒸餾方法
    BERT蒸餾技術應運而生,解決了模型大小和推理速度的問題,而且使用該技術的模型大小並沒有明顯的下降。近一年來,知識蒸餾(Knowledge Distillation)作為一種常用的模型壓縮方法逐漸成為BERT蒸餾的研究熱點分支。最初針對BERT模型的蒸餾學習是利用教師和學生網絡的輸出logits計算蒸餾損失,然而這樣不能學到Transformer 中間層的信息。