file | description |
---|---|
data_collator.py | data collator for emoji masking |
emoji_list | unicode of emojis, copied from emoji |
mlm_emoji.py | training code for masked emoji |
run_mlm.sh | shell script for training masked emoji |
RobertaForNextSentencePrediction.py | roberta nsp model |
run_nsp.py | training code for nsp |
tokenizer.py | roberta tokenizer |
architecture: 和roberta相同
具体 mask 方法:选择所有的emoji,其中的80%保持[MASK],10%替换成其他的token,10%保持不变。
- model: transformers.RobertaForMaskedLM
- data_collator.py 文件中描述了对 emoji 做 mask 的过程。改编自DataCollatorForWholeWordMask。
DataCollatorForEmojiMask
类中,输入为tokenizer类,用于返还 mask 后的句子和对应的 labels。- 其中
find_all_emojis
函数用于配对句子中的 emoji token。
- train: mlm_emoji.py 和run_mlm.py类似
architecture: 和 BERT 中的 NextSentencePrediction 类似。
-
RobertaForNextSentencePrediction.py 中定义了基于 Roberta 的 NSP model。改编自BertForNextSentencePrediction 。
-
tokenizer.py 中定义了 tokenizer,和原 RobertaTokenizer 不同的地方在
create_token_type_ids_from_sequences
函数。
BERT输入时的 input embeddings = token embeddings + segment embeddings + position embeddings,但由于 Roberta 没有 NSP Model,输入时的 segment embeddings 不考虑两句子间的关系,均设置为[0, 0, ..., 0]。在transformers
库的tokenizer和model中,为了简化这一步骤,将 input embeddings 设置为两层,去掉了 input embeddings。
由于我们的 NSP model 需要考虑 segment embeddings,故在 create_token_type_ids_from_sequences
函数中将修改为[前句]*0 + [后句]*1
的形式。
- run_nsp.py:和 run_mlm.py 类似,和原run_mlm不同的是,增加了一层 input embeddings 作为输入,增加的具体原因同2。