bert 编程入门--pytorch版本

代码在最后面

前面是代码细节的内容讲解

 

## 前綴的 tokens 即為 wordpieces

以詞彙 fragment 來說,其可以被拆成 frag 與 ##ment 兩個 pieces,而一個 word 也可以獨自形成一個 wordpiece。wordpieces 可以由蒐集大量文本並找出其中常見的 pattern 取得。

 

除了一般的 wordpieces 以外,BERT 裡頭有 5 個特殊 tokens 各司其職:

  • [CLS]:在做分類任務時其最後一層的 repr. 會被視為整個輸入序列的 repr.
  • [SEP]:有兩個句子的文本會被串接成一個輸入序列,並在兩句之間插入這個 token 以做區隔
  • [UNK]:沒出現在 BERT 字典裡頭的字會被這個 token 取代
  • [PAD]:zero padding 遮罩,將長度不一的輸入序列補齊方便做 batch 運算
  • [MASK]:未知遮罩,僅在預訓練階段會用到

 

這樣的 word repr. 就是近年十分盛行的 contextual word representation 概念。跟以往沒有蘊含上下文資訊的 Word2Vec、GloVe 等無語境的詞嵌入向量有很大的差異。用稍微學術一點的說法就是:

Contextual word repr. 讓同 word type 的 word token 在不同語境下有不同的表示方式;而傳統的詞向量無論上下文,都會讓同 type 的 word token 的 repr. 相同。

直覺上 contextual word representation 比較能反映人類語言的真實情況,

(举例:你今天开了机车过来接我,但是你买礼物给我的行为真的很机车哎)
这里就是different word repr , 需要用到contextual word repr
 
一句话来说就是:
BERT 是一個強大的語言代表模型,給它一段文本序列,它能回傳一段相同長度且蘊含上下文資訊的 word repr. 序列,對下游的 NLP 任務很有幫助。
 
 

fine tune BERT 來解決新的下游任務有 5 個簡單步驟:

  1. 準備原始文本數據
  2. 將原始文本轉換成 BERT 相容的輸入格式
  3. 在 BERT 之上加入新 layer 成下游任務模型
  4. 訓練該下游任務模型
  5. 對新樣本做推論
 
bert 编程入门--pytorch版本_第1张图片

 

為了讓 GPU 平行運算我們需要將 batch 裡的每個輸入序列都補上 zero padding 以保證它們長度一致

 

BertPooler层详细解释

#由上面的讲解可知,pooler层的输入是transformer最后一层的输出,[batch_size, seq_length, hidden_size]

#取出每一句的第一个单词,做全连接和激活。得到的输出可以用来分类等下游任务(即将每个句子的第一个单词的表示作为整个句子的表示)

 

你可能感兴趣的:(bert 编程入门--pytorch版本)