关于使用[MASK]做完形填空时需要注意的点
生活随笔
收集整理的這篇文章主要介紹了
关于使用[MASK]做完形填空时需要注意的点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目
- 關鍵點
- Q1: 選取誰做[MASK]
- Q2:如何實現[MASK]
- Q3: 為什么自己訓練的模型loss不會下降
題目
關于使用[MASK]做完形填空時需要注意的點
關鍵點
Q1: 選取誰做[MASK]
A:關于這個問題取決于語料庫中的每句話的平均長度
比如我在glue【sst2】中就對整個語料庫中的所有句子進行了篩選【單詞長度大于10】,取中選了第5個單詞,又因為第一個token是[cls]所以input_ids[:,5],其實是選擇了第四個單詞
Q2:如何實現[MASK]
A:因為bert中的編碼是根據每一個單詞進行編碼的,所以我們只需要取到對應單詞的encode編碼并將它變為[MASK]
step1:先取出index位置的encode編碼
labels = input_ids[:,index].reshape(-1).clone() # [batch_size]這里解釋一下為什么要用clone(),原因是單純使用reshape會破壞input_ids的結構,它是創建了一個新的指向數據的指針,兩者還是共享一份數據,所以clone的作用在于重新創建,開辟一塊心得內存空間存儲。
step2: 將對應的index位置變為[MASK]
input_ids[:,index] = tokenizer.get_vocab()[tokenizer.mask_token]Q3: 為什么自己訓練的模型loss不會下降
A:我一開始也遇到這個問題了,后來看了別人的經驗是nn.Linear(bias=False),當對Linear函數里的偏置矩陣進行歸0后,會發現loss開始下降。
- 另一個可能是因為BertModel比較難訓練,當我該用AutoModelForMaskedLM時,模型很快就能收斂
總結
以上是生活随笔為你收集整理的关于使用[MASK]做完形填空时需要注意的点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【路由篇】03. 远程设置并访问内网中二
- 下一篇: Web服务器介绍