1.詳解Transformer
https://zhuanlan.zhihu.com/p/48508221(非常好的文章)
2.Bert學習
https://zhuanlan.zhihu.com/p/46652512
模型的主要創新點都在pre-train方法上,即用了Masked LM和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的representation。
在針對后續任務微調的過程:
對於sequence-level的分類任務,BERT直接取第一個[CLS]token的final hidden state。
為什么可以直接用[CLS]的最終隱層輸出,它的信息能夠代表整個句子嗎?(疑問)
bert存在的問題是,它將15%的token隨機mask掉,最終損失函數只計算被mask掉的token。
Mask如何做也是有技巧的,如果一直用標記[MASK]代替(在實際預測時是碰不到這個標記的)會影響模型,所以隨機mask的時候10%的單詞會被替代成其他單詞,10%的單詞不替換,剩下80%才被替換為[MASK]。具體為什么這么分配,作者沒有說。。。要注意的是Masked LM預訓練階段模型是不知道真正被mask的是哪個詞,所以模型每個詞都要關注。
3.https://www.zhihu.com/question/318355038為何要mask?
回答:
4.Masked語言模型https://www.cnblogs.com/motohq/articles/11632412.html
5.但是bert具體在編碼的時候是如何進行的呢?
就看這個圖我就不明白了,BERT是怎么實現並行的呢?看起來也是根據句子從前到后或者從后到前的順序啊。
在進行self-att時,計算過程中使用的是QVK,這直接是可以預先得到所有的,那么上圖中bert的每個trm節點,都可以同時計算,不需要依賴於前一個詞的輸出。(個人理解)
上圖中三個模型的不同:
BERT是通過上下文去預測當前詞,是連續的,而ELMo是獨立的前向和后向。
這個講https://blog.csdn.net/tiantianhuanle/article/details/88597132openai gpt模型,它是單向預測的:
6.bert的源碼閱讀
http://fancyerii.github.io/2019/03/09/bert-codes/(待看)
7.預訓練過程
使用文檔級別的語料庫,而不是打亂的句子。
8.Bert原論文里提到:
雙向的Trf模型通常被稱為Transformer encoder,但是 只左上下文的版本稱它為Transformer decoder,因為它可以被用來文本生成。
但是看到現在我還是不明白它為啥要隨即設置[MASK]???為啥???
9.這里的BASE和LARGE的區別:
這里之前說:
那么正常介紹的tr是6層編碼,6層解碼,那么BASE就是正常的tr,H為塊的隱層數,A是自注意力的個數。(個人理解)
LARGE是12個編碼,12個解碼。
BASE的結構是和GPT一樣的,但是BERT使用雙向自注意力,后者使用的是單向,只參考左邊的作為上下文。
但是BERT左右上下文是怎么結合的?
https://zhuanlan.zhihu.com/p/69351731 這個文章說明了一下。
#而且這里提到的幾個問題都是我想弄明白的點,但是卻不知如何提問和如何搜索的!!!太好了。
#損失函數是什么?應該是應用到不同的任務上微調時產生的,和業務有關。
對於文中的第三個問題我還不太明白,可以看一下這個https://nlp.stanford.edu/seminar/details/jdevlin.pdf(待看)
文章里說,Bert可以看作Transformer的encoder部分,那到底是不是呢???如果只是encoder,那我上面就理解錯了。
確實是上面理解錯了,BERT是tr的encoder的堆疊,L是指有多少個encoder的塊,而不包括decoder。
10.bert雙向體現在哪?https://www.zhihu.com/question/314280363
原來真的是這個意思啊。
體現在訓練策略,也就是遮蔽語言模型上,雙向是指的語言模型,OMG。還是不怎么理解。
輸入怎么就並行了???
句子中所有單詞都是一齊進行計算的,self-att是對整個句子的范圍計算。(個人理解)
上圖真的非常有意思!
11.為什么bert的[cls]可以用來做分類?
https://zhuanlan.zhihu.com/p/74090249
12.