Bert预训练
Bert模型的目的:
預訓練Transformer的encoder網絡,從而大幅提高準確率
主要有兩個任務:
1、預測被遮擋單詞:
隨機遮擋一個詞或多個詞,讓encoder根據上下文來預測被遮擋的單詞
2、預測下一個句子:
把兩個句子放在一起,讓encoder判斷是否是原文中相鄰的兩個句子
預測被遮擋單詞:
首先輸入一句話,然后這句話被分詞成了一個個的單詞,通過embedding層把每一個單詞映射成一個個的詞向量x1x2...xt ,最后也輸出u1u2....ut這么多向量
具體過程:
假如現在我們遮擋住了cat這個單詞
那么我們會用mask標記這個被遮擋的單詞,緊接著它就會被embedding層標記為Xm向量,輸出記為Um向量,我們知道,Transformer的映射是多對一,所以Um向量會依賴所有的X向量,也就是說它會知道整句話的內容,那么就可以用它來預測被遮擋的單詞是什么,將這個Um作為特征向量送入softmax分類器輸出一個概率分布p,根據這個p值來判斷被遮擋的詞是什么
?這里,我們的希望的p值是越接近mask的one-hot編碼越好
我們將被遮擋單詞的ont-hot向量記為e,將CrossEntropy(e,p)作為損失函數,用反向傳播算出損失函數關于模型的梯度,然后作梯度下降來更新模型參數,bert預訓練不需要人工標注數據,它用被遮擋的單詞作為標簽,可以自動生成標簽,這樣訓練數據就可以想要多少就有多少,從而訓練出一個很大的模型
預測下一個句子
輸入數據:
[CLS]是用于分類的標識符? ? ? ? [SEP]是用于分割句子的標識符
輸入兩個句子,中間用【SEP】符號隔開,其中一個句子一定是原文中真實存在的句子,另一個句子則是從訓練數據中隨機抽取的句子,比如:
[CLS] "calculus is a branch of math"
[SEP] "panda is native to south central china"? ?
這兩句話是真實的原文我們把它標簽為true??
[CLS] "calculus is a branch of math"
[SEP]“panda is native to south central china"
這兩句話是隨機匹配的我們把它標記為false
向量C雖然在CLS的位置上,但它包含的是輸入的兩句話的全部信息,把C作為特征向量輸入分類器Binary,得到一個介于0-1之間的值f,其中,1是代表兩句話true,0代表兩句話毫無關聯,依舊用將CrossEntropy(e,f)作為損失函數,用反向傳播算出損失函數關于模型的梯度,然后作梯度下降來更新模型參數
這樣作預訓練是因為:
相鄰的兩句話通常有關聯,這樣作二分類可以強化這種關聯,讓embedding層包含這種關聯,而且encoder層中的self-attention層的作用恰好就是找相關性
bert將上述所講的這兩種任務結合起來訓練Transformer,假如有兩個單詞被遮擋,就需要三個任務,也就是說三個損失函數,第一個損失函數是二分類(判斷標簽是true還是false),第二三個損失函數就是預測這兩個單詞,目標函數就是三個損失函數的加和,用反向傳播算出損失函數關于模型的梯度,然后作梯度下降來更新模型參數
總結:
預測遮擋單詞是一個多分類問題
預測下一個句子是一個二分類問題
合并任務的目標函數就是兩個任務的目標函數之和
采用梯度下降方法更新合并任務模型參數
?
bert可以解決哪些nlp中的高級別下游任務?
●判斷兩句話意思是否相近
●判斷兩個問題意思是否相近
●蘊含任務
下圖表示:Bert模型已經接近甚至超過人類語言理解水平
如何利用Bert:
1、情感分析
?2、詞性標注
3、文本蘊含任務
?
4、抽取式問答系統:
?
總結
- 上一篇: js 日期格式化 正则表达式
- 下一篇: 基于比例权重的位置加权关系的黑猩猩优化算