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