circlePi / Pretraining-Yourself-Bert-From-Scratch

从头训练MASK BERT
137 stars 30 forks source link

你好,我最近也遇到了必须用自己的语料库训练bert的情况,然后我想问的是,在你的代码中,我可以指定使用的bert的版本吗?因为最近bert更新挺多的,我不清楚您的代码中使用的bert是什么版本的。谢谢~ #1

Closed bytekongfrombupt closed 5 years ago

bytekongfrombupt commented 5 years ago

如题

circlePi commented 5 years ago

感谢提问。我这里用的是最新版本的,稍后我会把BERT部分代码上传过来,方便大家使用。据我使用,各版本差别不大,仅BertPretrainedModel这个类的名称有所改变。

bytekongfrombupt commented 5 years ago

@circlePi 谢谢解答~嘿嘿,我之前比较疑惑的是在mask过程中,之前的bert是wordpiece mask的,然后最近bert更新了whole word mask,然后想问问您的bert是不是用了这个trick。然后我看了您的代码,您好像在generate example的时候是直接把字mask了,比如384 857 2934 883 ---> 384 mask 2934 883,感觉就是whole word mask,我这么理解对吗?

circlePi commented 5 years ago

我们拿中文来说把。Google的版本可以看做是基于字节对编码(BPE)来分词的,中文的模型从vocab可以看出来,其实是对字做masking; 而WWM是先使用分词工具对文本进行分词,注意这里是词而不是字,mask的时候是整个词masking。我这里沿用的google的版本。当然你上面的例子里,如果每个数字代表的是一个词的话,那其实就是WWM了,你的理解是对的。 另外,BERT的代码我已上传。

Crescentz commented 3 years ago
  1. 请问,这个版本是对 中文的 ’字‘ 做mask 么,
  2. 训练语料中,每个字是分开的对吧
  3. 需要去掉标点符号之类的吗