一文讀懂:BERT原理與實現

轉載自:https://blog.csdn.net/m0_37477175/article/details/106578098?spm=1001.2014.3001.5506

本文框架:

BERT原文:https://paperswithcode.com/paper/bert-pre-training-of-deep-bidirectional

BERT模型的任務:
1、模型的輸入、輸出分別是什麼,以及模型的預訓練任務是什麼;
2、分析模型的內部結構,圖解如何將模型的輸入一步步地轉化爲模型輸出;
3、在多箇中/英文、不同規模的數據集上比較BERT模型與現有方法的文本分類效果。

1. 模型的輸入/輸出

BERT模型的全稱是:BidirectionalEncoder Representations from Transformer。從名字中可以看出,BERT模型的目標是利用大規模無標註語料訓練、獲得文本的包含豐富語義信息的Representation,即:文本的語義表示,然後將文本的語義表示在特定NLP任務中作微調,最終應用於該NLP任務。煮個栗子,BERT模型訓練文本語義表示的過程就好比我們在高中階段學習語數英、物化生等各門基礎學科,夯實基礎知識;而模型在特定NLP任務中的參數微調就相當於我們在大學期間基於已有基礎知識、針對所選專業作進一步強化,從而獲得能夠應用於實際場景的專業技能。

在基於深度神經網絡的NLP方法中,文本中的字/詞通常都用一維向量來表示(一般稱之爲“詞向量”);在此基礎上,神經網絡會將文本中各個字或詞的一維詞向量作爲輸入,經過一系列複雜的轉換後,輸出一個一維詞向量作爲文本的語義表示。特別地,我們通常希望語義相近的字/詞在特徵向量空間上的距離也比較接近,如此一來,由字/詞向量轉換而來的文本向量也能夠包含更爲準確的語義信息。因此,BERT模型的主要輸入是文本中各個字/詞的原始詞向量,該向量既可以隨機初始化,也可以利用Word2Vector等算法進行預訓練以作爲初始值;輸出是文本中各個字/詞融合了全文語義信息後的向量表示,如下圖所示(爲方便描述且與BERT模型的當前中文版本保持一致,本文統一以字向量作爲輸入):

從上圖中可以看出,BERT模型通過查詢字向量表將文本中的每個字轉換爲一維向量,作爲模型輸入;模型輸出則是輸入各字對應的融合全文語義信息後的向量表示。此外,模型輸入除了字向量,還包含另外兩個部分:

1.文本向量:該向量的取值在模型訓練過程中自動學習,用於刻畫文本的全局語義信息,並與單字/詞的語義信息相融合。

segment embedding :
具體詳情可參考:https://www.cnblogs.com/d0main/p/10447853.html#segment-embeddings
用來區分不同的句子,輸入兩句話的時候,上句中的每個token全爲0,下句中的每個token全爲1

2.位置向量:由於出現在文本不同位置的字/詞所攜帶的語義信息存在差異(比如:“我愛你”和“你愛我”),因此,BERT模型對不同位置的字/詞分別附加一個不同的向量以作區分。

最後,BERT模型將字向量、文本向量和位置向量的加和作爲模型輸入。特別地,在目前的BERT模型中,文章作者還將英文詞彙作進一步切割,劃分爲更細粒度的語義單位(WordPiece),例如:將playing分割爲play和##ing;此外,對於中文,目前作者尚未對輸入文本進行分詞,而是直接將單字作爲構成文本的基本單位。

Token,Position,Segment Embeddings 都是通過學習來得到的;

對於不同的NLP任務,模型輸入會有微調,對模型輸出的利用也有差異,例如:

單文本分類任務:對於文本分類任務,BERT模型在文本前插入一個[CLS]符號,並將該符號對應的輸出向量作爲整篇文本的語義表示,用於文本分類,如下圖所示。可以理解爲:與文本中已有的其它字/詞相比,這個無明顯語義信息的符號會更“公平”地融合文本中各個字/詞的語義信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章