日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于Transformer和BERT,在面试中有哪些细节问题?

發(fā)布時(shí)間:2024/10/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Transformer和BERT,在面试中有哪些细节问题? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?PaperWeekly 原創(chuàng) ·?作者|海晨威

學(xué)校|同濟(jì)大學(xué)碩士生

研究方向|自然語言處理

隨著 NLP 的不斷發(fā)展,對(duì) Transformer 和 BERT 相關(guān)知識(shí)的研 (mian) 究 (shi) 應(yīng) (ti) 用 (wen),也越來越細(xì)節(jié),下面嘗試用 QA 的形式深入不淺出 Transformer 和 BERT。

  • Transformer 在哪里做了權(quán)重共享,為什么可以做權(quán)重共享?

  • BERT 的三個(gè) Embedding 直接相加會(huì)對(duì)語義有影響嗎?

  • 在 BERT 中,token 分 3 種情況做 mask,分別的作用是什么?

  • 為什么 BERT 選擇 mask 掉 15% 這個(gè)比例的詞,可以是其他的比例嗎?

  • 為什么 BERT 在第一句前會(huì)加一個(gè) [CLS] 標(biāo)志?

  • 使用 BERT 預(yù)訓(xùn)練模型為什么最多只能輸入 512 個(gè)詞,最多只能兩個(gè)句子合成一句?

  • 1. Transformer 在哪里做了權(quán)重共享,為什么可以做權(quán)重共享?

    Transformer 在兩個(gè)地方進(jìn)行了權(quán)重共享:

    1. Encoder 和 Decoder 間的 Embedding 層權(quán)重共享;

    2. Decoder 中 Embedding 層和 Full Connect(FC)層權(quán)重共享。

    對(duì)于第一點(diǎn),《Attention is all you need》中 Transformer 被應(yīng)用在機(jī)器翻譯任務(wù)中,源語言和目標(biāo)語言是不一樣的,但它們可以共用一張大詞表,對(duì)于兩種語言中共同出現(xiàn)的詞(比如:數(shù)字,標(biāo)點(diǎn)等等)可以得到更好的表示,而且對(duì)于 Encoder 和 Decoder,嵌入時(shí)都只有對(duì)應(yīng)語言的 embedding 會(huì)被激活,因此是可以共用一張?jiān)~表做權(quán)重共享的。

    論文中,Transformer 詞表用了 bpe 來處理,所以最小的單元是 subword。英語和德語同屬日耳曼語族,有很多相同的 subword,可以共享類似的語義。而像中英這樣相差較大的語系,語義共享作用可能不會(huì)很大 [1]。

    但是,共用詞表會(huì)使得詞表數(shù)量增大,增加 softmax 的計(jì)算時(shí)間,因此實(shí)際使用中是否共享可能要根據(jù)情況權(quán)衡。

    對(duì)于第二點(diǎn),Embedding 層可以說是通過 onehot 去取到對(duì)應(yīng)的 embedding 向量,FC 層可以說是相反的,通過向量(定義為 w)去得到它可能是某個(gè)詞的 softmax 概率,取概率最大(貪婪情況下)的作為預(yù)測(cè)值。

    那哪一個(gè)會(huì)是概率最大的呢?在 FC 層的每一行量級(jí)相同的前提下,理論上和 w 相同的那一行對(duì)應(yīng)的點(diǎn)積和 softmax 概率會(huì)是最大的(可類比本文問題 1)。

    因此,Embedding 層和 FC 層權(quán)重共享,Embedding 層中和向量 w 最接近的那一行對(duì)應(yīng)的詞,會(huì)獲得更大的預(yù)測(cè)概率。實(shí)際上,Embedding 層和 FC 層有點(diǎn)像互為逆過程。

    通過這樣的權(quán)重共享可以減少參數(shù)的數(shù)量,加快收斂。

    但開始我有一個(gè)困惑是:Embedding 層參數(shù)維度是:(v,d),FC 層參數(shù)維度是:(d,v),可以直接共享嘛,還是要轉(zhuǎn)置?其中 v 是詞表大小,d 是 embedding 維度。

    查看 pytorch 源碼發(fā)現(xiàn)真的可以直接共享:

    fc?=?nn.Linear(d,?v,?bias=False)?#?Decoder?FC層定義,無?biasweight?=?Parameter(torch.Tensor(out_features,?in_features))???#?nn.Linear?的權(quán)重部分定義

    Linear 層的權(quán)重定義中,是按照(out_features, in_features)順序來的,實(shí)際計(jì)算會(huì)先將 weight 轉(zhuǎn)置在乘以輸入矩陣。所以 FC 層 對(duì)應(yīng)的 Linear 權(quán)重維度也是? (v,d),可以直接共享。

    2. BERT 的三個(gè) Embedding 直接相加會(huì)對(duì)語義有影響嗎?

    對(duì)于這個(gè)非常有意思的問題,蘇劍林老師給出的回答 [2],真的很妙:

    Embedding 的數(shù)學(xué)本質(zhì),就是以 one hot 為輸入的單層全連接。

    也就是說,世界上本沒什么 Embedding,有的只是 one hot。

    現(xiàn)在我們將 token, position, segment 三者都用 one hot 表示,然后 concat 起來,然后才去過一個(gè)單層全連接,等價(jià)的效果就是三個(gè) Embedding 相加。

    因此,BERT 的三個(gè) Embedding 相加,其實(shí)可以理解為 token, position, segment 三個(gè)用 one hot 表示的特征的 concat,而特征的 concat 在深度學(xué)習(xí)領(lǐng)域是很常規(guī)的操作了。

    用一個(gè)例子理解一下:

    假設(shè) token Embedding 矩陣維度是 [4,768];position Embedding 矩陣維度是 [3,768];segment Embedding 矩陣維度是 [2,768]。

    對(duì)于一個(gè)字,假設(shè)它的 token one-hot 是 [1,0,0,0];它的 position one-hot 是 [1,0,0];它的 segment one-hot 是 [1,0]。

    那這個(gè)字最后的 word Embedding,就是上面三種 Embedding 的加和。

    如此得到的 word Embedding,和 concat 后的特征:[1,0,0,0,1,0,0,1,0],再經(jīng)過維度為 [4+3+2,768] = [9, 768] 的 Embedding 矩陣,得到的 word Embedding 其實(shí)就是一樣的。

    Embedding 就是以 one hot 為輸入的單層全連接。

    再換一個(gè)角度理解:

    直接將三個(gè) one-hot 特征 concat 起來得到的 [1,0,0,0,1,0,0,1,0] 不再是 one-hot 了,但可以把它映射到三個(gè) one-hot 組成的特征空間,空間維度是 4*3*2=24 ,那在新的特征空間,這個(gè)字的 one-hot 就是 [1,0,0,0,0...] (23個(gè)0)。

    此時(shí),Embedding 矩陣維度就是 [24,768],最后得到的 word Embedding 依然是和上面的等效,但是三個(gè)小 Embedding 矩陣的大小會(huì)遠(yuǎn)小于新特征空間對(duì)應(yīng)的 Embedding 矩陣大小。

    BERT 的三個(gè) Embedding 相加,本質(zhì)可以看作一個(gè)特征的融合,強(qiáng)大如 BERT 可以學(xué)到融合后特征的語義信息的。

    3. 在 BERT 中,token 分 3 種情況 mask,分別的作用是什么?

    在 BERT 的 Masked LM 訓(xùn)練任務(wù)中, 會(huì)用 [MASK] token 去替換語料中 15% 的詞,然后在最后一層預(yù)測(cè)。但是下游任務(wù)中不會(huì)出現(xiàn) [MASK] token,導(dǎo)致預(yù)訓(xùn)練和 fine-tune 出現(xiàn)了不一致,為了減弱不一致性給模型帶來的影響,在這被替換的 15% 語料中:

  • 80% 的 tokens 會(huì)被替換為 [MASK] token

  • 10% 的 tokens 會(huì)稱替換為隨機(jī)的 token

  • 10% 的 tokens 會(huì)保持不變但需要被預(yù)測(cè)

  • 作者在原文中給出了直觀的解釋:

    The Transformer encoder does not know which words it will be asked to predict or which have been replaced by random words, so it is forced to keep a distributional contextual representation of every input token.

    此外在 medium [3] 上,作者也從直覺上解釋了這樣做的可行性:

    If we used [MASK] 100% of the time the model wouldn’t necessarily produce good token representations for non-masked words. The non-masked tokens were still used for context, but the model was optimized for predicting masked words. If we used [MASK] 90% of the time and random words 10% of the time, this would teach the model that the observed word is never correct. If we used [MASK] 90% of the time and kept the same word 10% of the time, then the model could just trivially copy the non-contextual embedding.

    上面第一點(diǎn)中的替換,是 Masked LM 中的主要部分,可以在不泄露 label 的情況下融合真雙向語義信息;

    第二點(diǎn)的隨機(jī)替換,因?yàn)樾枰谧詈笠粚与S機(jī)替換的這個(gè) token 位去預(yù)測(cè)它真實(shí)的詞,而模型并不知道這個(gè) token 位是被隨機(jī)替換的,就迫使模型盡量在每一個(gè)詞上都學(xué)習(xí)到一個(gè)全局語境下的表征,因而也能夠讓 BERT 獲得更好的語境相關(guān)的詞向量(這正是解決一詞多義的最重要特性);

    第三點(diǎn)的保持不變,也就是真的有 10% 的情況下是泄密的(占所有詞的比例為15% * 10% = 1.5%),這樣能夠給模型一定的 bias ,相當(dāng)于是額外的獎(jiǎng)勵(lì),將模型對(duì)于詞的表征能夠拉向詞的真實(shí)表征(此時(shí)輸入層是待預(yù)測(cè)詞的真實(shí) embedding,在輸出層中的該詞位置得到的embedding,是經(jīng)過層層 Self-attention 后得到的,這部分 embedding 里多少依然保留有部分輸入 embedding 的信息,而這部分就是通過輸入一定比例的真實(shí)詞所帶來的額外獎(jiǎng)勵(lì),最終會(huì)使得模型的輸出向量朝輸入層的真實(shí) embedding 有一個(gè)偏移)。

    而如果全用 mask 的話,模型只需要保證輸出層的分類準(zhǔn)確,對(duì)于輸出層的向量表征并不關(guān)心,因此可能會(huì)導(dǎo)致最終的向量輸出效果并不好?[4]。

    4. 為什么 BERT 選擇 mask 掉 15% 這個(gè)比例的詞,可以是其他的比例嗎?

    BERT 采用的 Masked LM,會(huì)選取語料中所有詞的 15% 進(jìn)行隨機(jī) mask,論文中表示是受到完形填空任務(wù)的啟發(fā),但其實(shí)與 CBOW 也有異曲同工之妙

    從 CBOW 的角度,這里 有一個(gè)比較好的解釋是:在一個(gè)大小為 的窗口中隨機(jī)選一個(gè)詞,類似 CBOW 中滑動(dòng)窗口的中心詞,區(qū)別是這里的滑動(dòng)窗口是非重疊的。

    那從 CBOW 的滑動(dòng)窗口角度,10%~20% 都是還 ok 的比例。

    上述非官方解釋,是來自我的一位朋友提供的一個(gè)理解切入的角度,供參考。

    5. 為什么 BERT 在第一句前會(huì)加一個(gè) [CLS] 標(biāo)志?

    BERT 在第一句前會(huì)加一個(gè) [CLS] 標(biāo)志,最后一層該位對(duì)應(yīng)向量可以作為整句話的語義表示,從而用于下游的分類任務(wù)等。

    為什么選它呢,因?yàn)榕c文本中已有的其它詞相比,這個(gè)無明顯語義信息的符號(hào)會(huì)更“公平”地融合文本中各個(gè)詞的語義信息,從而更好的表示整句話的語義。

    這里補(bǔ)充一下 bert 的輸出,有兩種:

    一種是 get_pooled_out(),就是上述 [CLS] 的表示,輸出 shape 是 [batch size,hidden size]。

    一種是 get_sequence_out(),獲取的是整個(gè)句子每一個(gè) token 的向量表示,輸出 shape 是 [batch_size, seq_length, hidden_size],這里也包括 [CLS],因此在做 token 級(jí)別的任務(wù)時(shí)要注意它。

    6. 使用 BERT 預(yù)訓(xùn)練模型為什么最多只能輸入 512 個(gè)詞,最多只能兩個(gè)句子合成一句?

    這是 BERT 的初始設(shè)置的原因,前者對(duì)應(yīng) Position Embeddings,后者對(duì)應(yīng) Segment Embeddings

    在 BERT 中,Token,Position,Segment Embeddings 都是通過學(xué)習(xí)來得到的,pytorch 代碼 [5] 中它們是這樣的:

    self.word_embeddings?=?Embedding(config.vocab_size,?config.hidden_size) self.position_embeddings?=?Embedding(config.max_position_embeddings,?config.hidden_size) self.token_type_embeddings?=?Embedding(config.type_vocab_size,?config.hidden_size)

    而在 BERT config 中:

    "max_position_embeddings":?512 "type_vocab_size":?2

    因此,在直接使用 Google 的 BERT 預(yù)訓(xùn)練模型時(shí),輸入最多 512 個(gè)詞(還要除掉 [CLS] 和 [SEP]),最多兩個(gè)句子合成一句。這之外的詞和句子會(huì)沒有對(duì)應(yīng)的 embedding。

    當(dāng)然,如果有足夠的硬件資源自己重新訓(xùn)練 BERT,可以更改 BERT config,設(shè)置更大 max_position_embeddings 和 type_vocab_size 值去滿足自己的需求。

    參考文獻(xiàn)

    [1] https://www.zhihu.com/question/333419099/answer/743341017

    [2] https://www.zhihu.com/question/374835153

    [3] https://towardsdatascience.com/bert-explained-state-of-the-art-language-model-for-nlp-f8b21a9b6270

    [4] https://zhuanlan.zhihu.com/p/50443871

    [5] https://github.com/hichenway/CodeShare/tree/master/bert_pytorch_source_code

    更多閱讀

    #投 稿?通 道#

    ?讓你的論文被更多人看到?

    如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識(shí)的人。

    總有一些你不認(rèn)識(shí)的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?

    PaperWeekly 鼓勵(lì)高校實(shí)驗(yàn)室或個(gè)人,在我們的平臺(tái)上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)習(xí)心得技術(shù)干貨。我們的目的只有一個(gè),讓知識(shí)真正流動(dòng)起來。

    ?????來稿標(biāo)準(zhǔn):

    ? 稿件確系個(gè)人原創(chuàng)作品,來稿需注明作者個(gè)人信息(姓名+學(xué)校/工作單位+學(xué)歷/職位+研究方向)?

    ? 如果文章并非首發(fā),請(qǐng)?jiān)谕陡鍟r(shí)提醒并附上所有已發(fā)布鏈接?

    ? PaperWeekly 默認(rèn)每篇文章都是首發(fā),均會(huì)添加“原創(chuàng)”標(biāo)志

    ?????投稿郵箱:

    ? 投稿郵箱:hr@paperweekly.site?

    ? 所有文章配圖,請(qǐng)單獨(dú)在附件中發(fā)送?

    ? 請(qǐng)留下即時(shí)聯(lián)系方式(微信或手機(jī)),以便我們?cè)诰庉嫲l(fā)布時(shí)和作者溝通

    ????

    現(xiàn)在,在「知乎」也能找到我們了

    進(jìn)入知乎首頁搜索「PaperWeekly」

    點(diǎn)擊「關(guān)注」訂閱我們的專欄吧

    關(guān)于PaperWeekly

    PaperWeekly 是一個(gè)推薦、解讀、討論、報(bào)道人工智能前沿論文成果的學(xué)術(shù)平臺(tái)。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號(hào)后臺(tái)點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。

    總結(jié)

    以上是生活随笔為你收集整理的关于Transformer和BERT,在面试中有哪些细节问题?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。