用于预训练BERT的数据集

http://zh-v2.d2l.ai/chapter_natural-language-processing-pretraining/bert-dataset.html

all_segments.append(torch.tensor(segments + [0] * (max_len - len(segments)), dtype=torch.long))

segments list原本对应句子1和句子2的值分别为0和1。这里把位置对应的segment值也设置为0,不会confuse BERT模型吗?

1 Like

所以它设置了权重列表,tokens填充的地方权重为0,在计算损失时会忽略这些地方,tokens填充的地方和segments填充0的地方是相同的。

报了个错:RuntimeError: unable to open shared memory object </torch_85159_194567204> in read-write mode在这一句for (tokens_X, segments_X, valid_lens_x, pred_positions_X, mlm_weights_X, mlm_Y, nsp_y) in train_iter:有没有知道咋解决的

解决了,将num_workers去掉就行了

thank for your answer


掩码任务直接把下句预测任务的数据送入_get_mlm_data_from_tokens(…)进行预处理,但是下句预测任务的数据中有的上句和下句是语义无关的,这样的两句在_get_mlm_data_from_tokens中去掉cls和sep标记后直接作为一句用于MASK任务,不会对模型理解证据语义造成误导吗?难道说是为了故意引入这种噪声来增强模型在处理非语义连贯上下文中的预测能力吗

_get_mlm_data_from_tokens中没有去掉cls和sep吧, 这里加mask的过程没有替换掉标记词; 单说上下文不连贯对于预测mask的影响, 我觉得不能算是噪声, 毕竟模型也是要处理nsp任务的, 它应当有能力知道这个mask的预测不该受无关的上下句的影响

14.9.2. 将文本转换为预训练数据集

现在我们几乎准备好为BERT预训练定制一个Dataset类。在此之前,我们仍然需要定义辅助函数_pad_bert_inputs来将特殊的mask词元附加到输入。它的参数examples包含来自两个预训练任务的辅助函数_get_nsp_data_from_paragraph_get_mlm_data_from_tokens的输出。

这段话有误,应该是“将特殊的pad词元附加到输入”

wikitext-2-v1数据集的地址d2l.DATA_HUB[‘wikitext-2’] = (
https://s3.amazonaws.com/research.metamind.io/wikitext/
‘wikitext-2-v1.zip’, ‘3c914d17d80b1459be871a5039ac23e752a53cbe’)失效了

请问怎么解决呢??我也觉得是数据集地址失效了,一直报错

去找别的人开源的关于这个数据集吧,悲伤 :sob:

回樓上,我今天學到這裡也發現這問題,我後來去 hugging face 上下載:
wikitext at main (huggingface.co)
我是下載 wikitext-2-v1
讀檔的函數也要手動調整一下, train-00000-of-00001.parquet 這個 parquet 檔可以用 pd.read_parquet() 讀,回傳內容轉 list 之後就是所有文本內容了。

原版数据集,我刚好备份了

1 Like