问题1:出现"file is not a zip file"
原因是链接已经失效。
解决方法:打开下面链接自行下载,需要魔法。下载完解压到特定位置。
下载链接:项目首页 - Wikitext-2-v1数据包下载:Wikitext-2-v1 数据包下载本仓库提供了一份Wikitext-2-v1的标准数据包,方便无法通过亚马逊网址下载的用户获取 - GitCode
修改load_data_wiki函数中data_dir的路径,如下:
#@save
def load_data_wiki(batch_size, max_len):"""加载WikiText-2数据集"""num_workers = d2l.get_dataloader_workers()#data_dir = = d2l.download_extract('wikitext-2', 'wikitext-2') data_dir = 'D:\data\wikitext-2-v1\wikitext-2' # 使用正斜杠避免转义问题paragraphs = _read_wiki(data_dir)train_set = _WikiTextDataset(paragraphs, max_len)train_iter = torch.utils.data.DataLoader(train_set, batch_size,shuffle=True, num_workers=0)return train_iter, train_set.vocab
问题2:'gbk' codec can't decode byte 0xae in position 96: illegal multibyte sequence
原因是读取文件的时候编码方式不一样。
解决方法:修改def _read_wiki(data_dir)函数,open里添加encoding = "utf-8"编码方式。
#@save
def _read_wiki(data_dir):file_name = os.path.join(data_dir, 'wiki.train.tokens')with open(file_name, 'r',encoding = "utf-8") as f:lines = f.readlines()# 大写字母转换为小写字母paragraphs = [line.strip().lower().split(' . ')for line in lines if len(line.split(' . ')) >= 2]random.shuffle(paragraphs)return paragraphs
问题3 :一直卡在load_data_wiki运行不下去
原因是上面函数load_data_wiki的多线程问题,在load_data_wiki函数里令num_workers=0(如下),即可解决。
batch_size, max_len = 512, 64
train_iter, vocab = load_data_wiki(batch_size, max_len)for (tokens_X, segments_X, valid_lens_x, pred_positions_X, mlm_weights_X,mlm_Y, nsp_y) in train_iter:print(tokens_X.shape, segments_X.shape, valid_lens_x.shape,pred_positions_X.shape, mlm_weights_X.shape, mlm_Y.shape,nsp_y.shape)break
#@save
def load_data_wiki(batch_size, max_len):"""加载WikiText-2数据集"""num_workers = d2l.get_dataloader_workers()#data_dir = = d2l.download_extract('wikitext-2', 'wikitext-2-v1')data_dir = 'D:\data\wikitext-2-v1\wikitext-2'paragraphs = _read_wiki(data_dir)train_set = _WikiTextDataset(paragraphs, max_len)train_iter = torch.utils.data.DataLoader(train_set, batch_size,shuffle=True, num_workers=0)return train_iter, train_set.vocab