第一周-transformer详解
第一周-transformer详解
一、搭建教程的环境
49. 3.1使用Transformer构建语言模型-第1步_哔哩哔哩_bilibili
1 安装conda
详解见blogs
2 创建python指定环境
$conda create -n myenv python=3.6.6
$conda activate myenv
3 创建指定的torch环境
$conda install pytorch=1.3.1 -c pytorch
其中-c 表示从官方的pytorch通道
二、构建数据集
导入wikiText-2数据集
数据集来源
import math import torch import torch.nn as nn import torch.nn.functional as F import torchtext # 获取英文分词器,远比空格分词复杂 from torchtext.data.utils import get_tokenizer from pyitcast.transformer import TransformerModel # 构建预料域-即存放语料的数据结构-包含分词器 # 按照语料域来获取wikitext-2 -> train, test # 构建词汇表,以及统计词汇 # from torchtext.legacy.data import Field from torchtext.data import Field print("set device===") device = torch.device("cuda" if torch.cuda.is_available() else "cpu") def vocab_from_wikitext2(): print(111) tokenizer = get_tokenizer("basic_english") print(torchtext.data) TEXT = Field(tokenize=tokenizer, init_token="<sos>", eos_token="<eos>", lower=True) train_txt, val_txt, test_txt = torchtext.datasets.WikiText2.splits(TEXT) print(test_txt.examples[0].text[:10]) TEXT.build_vocab(train_txt) # vocab = '₤': 28780, '⅔': 28781, 'ストップ': 28782, '戦場のヴァルキュリア3': 28783, '攻殻機動隊': 28784}) # print(TEXT.vocab.stoi) return train_txt, val_txt, test_txt pass def batchify(data, bsz): # 使用TEXT的numericalize函数映射成对应的连续数字。 data = TEXT.numericalize([data.examples[0].text]) nbatch = data.size(0)//bsz data = data.narrow(0,0, nbatch*bsz) # 使用t() 转置后一定要分配连续内存 data = data.view(bsz,-1).t().contiguous() return data.to(device) pass vocab_from_wikitext2()
问题
问题1:老版本的torchtext无Field
AttributeError: module 'torchtext.data' has no attribute 'Field'
使用conda 环境搭建python3.6版本环境, torch 1.xx环境。