Torchtext基礎知識

一、Torchtext組建的基本構造

Field: 主要包含以下數據預處理的配置信息,比如指定的分詞方法,是否轉成小寫,起始與結束字符,補全字符以及詞典等等
LabelField: 用於指定標籤類別的種類以及標籤的表示方式
Dateset: 它是繼承了Pytorch的Dataset,用於加載數據,提供了TabularDataset可以指定路徑,格式,Field信息就可以方便的完成數據加載。如果部分數據無法使用TabularDateset進行加載,則可以繼承Dataset類別進行自建類,但最後必須返回一個Examples夠迭代類進行劃分。同時torchtext還提供預先構建的常用數據集的Dataset對象 ,可以直接加載使用,splits方法可以同時加載訓練集,驗證集,測試集。
Iterator: 主要是數據輸出的模型的迭代器,可以支持batch定製

二、Field組建

Field 包含一些文本處理的通用的參數設置,同時還包含了一個詞典的對象,可以把文本數據表示爲數字類型,進而可以把文本表示爲需要的tensor類型。
1Field的對象主要參數包含
sequential:是否把數據表示成序列;如果是False,不能使用分詞;默認值爲True
use_vocab:是否使用詞典對象;如果是False,數據的類型必須已經是數值類型;默認值爲True
init_token:每一條數據的起始字符;默認值爲None
eos_token:每一條數據的結尾字符;默認值爲None
fix_length:修改每條數據的長度爲該值,若句子的長度小於 fix_length,則用pad_token進行補全;默認值爲None
tensor_type:將數據轉換成tensor類型;默認值爲torch.LongTensor
preprocessing:在分詞之後和數值化之前使用的管道默認值爲None
postprocessing:數值化之後和轉化成tensor之前使用的管道默認值爲None
lower:是否把數據轉化爲小寫;默認值爲False
tokenize:分詞函數;默認值爲str.split include_lengths:是否返回一個已經補全的最batch的元組和和一個包含每條數據長度的列表;默認值爲False
batch_first:是否依照第一個批次的維度去產生張量;默認值: False
pad_token:用於補全的字符;默認值爲"" unk_token:不存在詞典裏的字符;默認爲""
pad_first:是否補全第一個字符;默認值爲False

TEXT = data.Field(tokenize=data.get_tokenizer('spacy'), 
           init_token='<SOS>',eos_token='<EOS>',lower=True)
tokenize = lambda x: x.split()
# fix_length指定了每條文本的長度,截斷補長
TEXT = data.Field(sequential=True, tokenize=tokenize, lower=True, fix_length=200)
LABEL = data.Field(sequential=False, use_vocab=False)

2重要的幾個方法
pad(minibatch):在一個batch中對齊每一條數據
build_vocab():建立詞典
numericalize():文本進行數值化,返回tensor

三、Dataset

torchtext的Dataset是繼承於pytorch的Dataset,提供了一個可以下載壓縮數據並解壓的方法(支持.zip .gz .tgz)
splits方法可以同時讀取訓練集,驗證集,測試集
TabularDataset可以很方便的讀取CSV,TSV,JSON等格式的文件

train, val, test = data.TabularDataset.splits(
        path='./data/', train='train.tsv',
        validation='val.tsv', test='test.tsv', format='tsv',
        fields=[('Text', TEXT), ('Label', LABEL)])

加載數據後可以建立詞典,建立詞典的時候可以使用與訓練的word vector

#使用trochtext默認支持的預訓練向量
from torchtext.vocab import GloVe
from torchtext import data
TEXT = data.Field(sequential=True)
TEXT.build_vocab(train, vectors=GloVe(name='6B', dim=300))
#使用預訓練好的詞向量
vectors = Vectors(name='詞向量的路徑')
TEXT.build_vocab(train, vectors=vectors)

四、Iterator

Iterator是torchtext到模型的輸出,它提供了我們對數據的一般處理方式,比如打亂,排序,等等,可以動態修改batch大小,這裏也有splits方法 可以同時輸出訓練集,驗證集,測試集
1Iterator的對象主要參數包含
dataset::加載的數據集
batch_size:表示Batch的大小
batch_size_fn:產生動態的batch大小的函數sort_key:排序的key
train:是否是一個訓練集
repeat:是否在不同epoch中重複迭代
shuffle:是否打亂數據
sort:是否對數據進行排序
sort_within_batch:batch內部是否排序
device:建立batch的設備 -1:CPU;0,1…對應的GPU

train_iter, val_iter, test_iter = data.Iterator.splits(
        (train, val, test), sort_key=lambda x: len(x.Text),
        batch_sizes=(32, 256, 256), device=-1)

五、torchtext提供常用文本數據集

train,val,test = datasets.WikiText2.splits(text_field=TEXT)

包含如下數據集
Sentiment analysis: SST and IMDbQuestion
classification: TRECEntailment: SNLI
Language modeling: WikiText-2Machine
translation: Multi30k, IWSLT, WMT14

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章