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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

再谈BERT

發(fā)布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 再谈BERT 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

三次講到了BERT。第一次是nlp中的經(jīng)典深度學(xué)習(xí)模型(二),第二次是transformer & bert &GPT,這是第三次。

文章目錄

  • 1 關(guān)于預(yù)訓(xùn)練模型
    • 1.1預(yù)訓(xùn)練概念
    • 1.2 再談?wù)Z言模型
    • 1.3 ELMo
    • 1.4 GPT
  • 2 BERT
    • 2.1 BERT特點
    • 2.2架構(gòu)
    • 2.3 預(yù)訓(xùn)練任務(wù)
      • 2.3.1 masked language model
      • 2.3.2 next sentence prediction
      • 2.3.4 Subword
    • 2.4 微調(diào)fine-tuning
  • 3后記

1 關(guān)于預(yù)訓(xùn)練模型

1.1預(yù)訓(xùn)練概念

預(yù)訓(xùn)練模型最早用于CV領(lǐng)域。
深度學(xué)習(xí)模型就是一個y=fθ(x)y=f_{\theta}(x)y=fθ?(x)查找最優(yōu)θ\thetaθ的過程。如果參數(shù)θ\thetaθ初始值合適的話,會加快模型訓(xùn)練進度。
預(yù)訓(xùn)練就是在任務(wù)上優(yōu)化參數(shù),最后得出一套參數(shù)。這套參數(shù)可以作為下游任務(wù)的初始值。
為什么預(yù)訓(xùn)練模型可以提升模型的精度?
用一個例子來說明。廚師需要做很多種菜,例如:宮保雞丁、魚香肉絲、地三鮮。廚師可以每次對每個菜選擇不同的原材料、加工,成菜。廚師也可以先把菜加工成半成品,例如煮好的雞肉、胡蘿卜絲、切好的土豆塊。有了這些半成品,可以加快出菜速度。可以把預(yù)訓(xùn)練得到的參數(shù)理解為半成品。

1.2 再談?wù)Z言模型

語言模型就是 計算一個句子出現(xiàn)概率的模型。
P(x1,x2...xn)=P(x1)?P(x2∣x1)?P(x3∣x1,x2)...P(xn∣x1,x2,,,xn?1)P(x_1,x_2...x_n)= P(x_1)*P(x_2|x_1)*P(x_3|x_1,x_2)...P(x_n|x_1,x_2,,,x_{n-1})P(x1?,x2?...xn?)=P(x1?)?P(x2?x1?)?P(x3?x1?,x2?)...P(xn?x1?,x2?,,,xn?1?)
各種算法,模型就是去無限逼近右邊式子中的條件概率 。
使用語言模型做預(yù)訓(xùn)練,訓(xùn)練得到的參數(shù),可以用于其他任務(wù)中。

1.3 ELMo

預(yù)訓(xùn)練在nlp中正式提出是在ELMo中。
ELMo是一個三層的網(wǎng)絡(luò)結(jié)構(gòu):

  • 字符CNN
  • 一個正向語言模型
  • 一個逆向語言模型

訓(xùn)練了一個正向和逆向的語言模型。
逆向語言模型是在計算:P(x1,x2,...xn)=P(xn)P(xn?1∣xn)P(xn?2∣xn,xn?1)...P(x1)P(x_1,x_2,...x_n)= P(x_n)P(x_{n-1}|x_n)P(x_{n-2}|x_n,x_{n-1})...P(x_1)P(x1?,x2?,...xn?)=P(xn?)P(xn?1?xn?)P(xn?2?xn?,xn?1?)...P(x1?)

1.4 GPT

GPT是使用transformer替換了ELMo中的LSTM。
訓(xùn)練了一個從左到右的語言模型任務(wù)。

GPT2和GPT3是使用了更多的參數(shù),有些情況下layer normal放在了Attention之前。得到了更好的效果。

2 BERT

2.1 BERT特點

BERT: Bidirectional Encoder Representations from Transformers
bert相比較其他框架的優(yōu)點是:
1 與GPT相比,GPT也使用了transformer,但GPT只訓(xùn)練了一個從左到右的模型。
2 與ELMo相比,ELMo使用的是LSTM,訓(xùn)練的是兩個獨立的從左到右,和從右到左兩個模型。

3 bert是在無標注的數(shù)據(jù)集上做預(yù)訓(xùn)練,在每一層都包含左右的context信息。
4 應(yīng)用于其他任務(wù)的時候只需要再加一層輸出層即可。
5 應(yīng)用于其他任務(wù),不需要修改bert的架構(gòu)。

2.2架構(gòu)


橫線表示了堆疊起來的transformer模型。
bert模型輸入的是兩個句子的拼接或者一個單獨的句子。例如[CLS] my do is cute[SEP] he likes play ##ing[SEP]
bert模型的輸入= token embedding + position embedding + segment embedding
token embedding:是經(jīng)過wordpiece之后的一個一個token。
position embedding :表示不同的位置,要求就是不同位置用不同的數(shù)值表示即可。
segment embedding:表示兩個句子。例如第一個句子用EAE_AEA?表示,第二個句子用EBE_BEB?表示。

bert模型的輸出:表示[CLS]的隱狀態(tài)C,表示第i個token隱狀態(tài)的YiY_iYi?

bert有兩個版本:
Bert-base:L=12(有12層),H=768(隱狀態(tài)的大小是768),A=12(multi self Attention的head有12個)
Bert-base:L=24(有24層),H=1024(隱狀態(tài)的大小是1024),A=16(multi self Attention的head有16個)

2.3 預(yù)訓(xùn)練任務(wù)

預(yù)訓(xùn)練任務(wù)有2個:masked language model 和 next sentence prediction。
預(yù)訓(xùn)練的數(shù)據(jù)集是BooksCorpus (800M words) 和 English Wikipedia (2,500M words)。

2.3.1 masked language model

bert想要訓(xùn)練一個深度的雙向語言模型。所以設(shè)計了MLM任務(wù)。
不要預(yù)測下一個詞,而是預(yù)測上下文。
問題:如何防止模型拷貝答案?
方法:masked。將數(shù)據(jù)集中15%的詞標記為mask,模型去預(yù)測這些被mask的詞。這樣做的好處是在預(yù)測一個詞的時候會同時用到這個詞的左右的信息。這種方式可以更好的建模詞左右的上下文信息。

問題:預(yù)訓(xùn)練階段能看到mask標記,但是調(diào)優(yōu)階段是看不到這個標記的,這在一定程度上影響了準確率。
方法:不要總是標記為mask。在確定第i個位置是mask之后。1. 80%的概率標記為mask,2. 10%的概率保持不變,3. 10%的概率改為其他字符。
如果只有mask,對于其他詞(被masked的詞)不能學(xué)習(xí)到好的表達。
如果只有mask和其他字符,那就學(xué)不到正確的詞。
如果只用mask和正確的詞,那模型可能會只記住單詞,不學(xué)習(xí)。

模型輸出:被mask位置的詞的上下文詞向量,以及[CLS]位置的句子表示。

2.3.2 next sentence prediction

輸入是句子對(A,B)
生成句子對A和B,50%的情況B是A真正的下一句,50%是隨機選擇的一個句子。

ps:后續(xù)實際中證明這個任務(wù)對下游任務(wù)并沒有幫助。沒有它,下游任務(wù)效果可能會更好。但是這個任務(wù)對于句子對分類任務(wù)是有幫助的。
在RoBera中拋棄了這個任務(wù)。

2.3.4 Subword

傳統(tǒng)詞表示不能解決未看到的詞。
bert中使用的token方式是subword,使用BPE(Byte-Pair Encoding)的方式生成token。

e.g. subword = sub + word

學(xué)習(xí)方式:Byte Pair Encoding(BPE)
參考鏈接:https://zhuanlan.zhihu.com/p/86965595
https://huggingface.co/transformers/tokenizer_summary.html
在中文中直接以字進行訓(xùn)練就可以。

2.4 微調(diào)fine-tuning

nlp中所有的任務(wù)都是分類任務(wù)。

將bert模型應(yīng)用于單個句子的分類中,使用CLS的隱狀態(tài)參與分類得到分類標簽。

3后記

今天早上一直不明白怎么用bert的輸出作為下游的起始。一直在想它做預(yù)測的只是被mask的部分,那學(xué)到的詞向量只是部分詞向量呢?而且作為詞向量應(yīng)該是前面一些層的參數(shù),不會是最后輸出層。
后來聽老師講預(yù)訓(xùn)練模型訓(xùn)練才發(fā)現(xiàn)自己的思維被前面的詞向量模型固定了。
預(yù)先訓(xùn)練模型,再使用有兩種策略:feature-based 和 fine-tuning.
feature-based :skip-gram cbow ELmo都是這種策略。在一個語言模型的任務(wù)上訓(xùn)練,得到詞向量表示。詞向量用于下游任務(wù)。
fine-tuning: GPT、bert是這種策略。這種策略是預(yù)先訓(xùn)練一個模型。在下游任務(wù)的時候,在模型上面繼續(xù)加層,實現(xiàn)目標。這個模型的整體架構(gòu)不發(fā)生大的變化。在下游任務(wù)訓(xùn)練的時候,所有的參數(shù)都以預(yù)訓(xùn)練的的參數(shù)為基準。這就類似于CNN在圖像分類上的預(yù)訓(xùn)練-微調(diào)模式一樣。
在下游任務(wù)中可以固定前面的模型參數(shù)不變,也可以前面部分的參數(shù)一起參與訓(xùn)練。這個看效果而定。

所以bert被下游使用的是整個網(wǎng)絡(luò)結(jié)構(gòu),以及所有結(jié)構(gòu)中的參數(shù)。當然參與變化層運算的是最后一層的輸出。
這類似于使用CNN的GoogleNet預(yù)訓(xùn)練,訓(xùn)練自己的圖像分類器。只是修改最后一層輸出分類的個數(shù),就變成自己的模型了。

總結(jié)

以上是生活随笔為你收集整理的再谈BERT的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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