溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

torchtext的用法介紹

發布時間:2021-08-04 11:08:52 來源:億速云 閱讀:383 作者:chen 欄目:大數據

這篇文章主要講解了“torchtext的用法介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“torchtext的用法介紹”吧!

torchtext包含以下組件

Field :主要包含以下數據預處理的配置信息,比如指定分詞方法,是否轉成小寫,起始字符,結束字符,補全字符以及詞典等等

Dataset :繼承自pytorch的Dataset,用于加載數據,提供了TabularDataset可以指點路徑,格式,Field信息就可以方便的完成數據加載。同時torchtext還提供預先構建的常用數據集的Dataset對象,可以直接加載使用,splits方法可以同時加載訓練集,驗證集和測試集。

Iterator : 主要是數據輸出的模型的迭代器,可以支持batch定制。

Field

Field 包含一寫文本處理的通用參數的設置,同時還包含一個詞典對象,可以把文本數據表示成數字類型,進而可以把文本表示成需要的tensor類型

以下是Field對象包含的參數:

sequential: 是否把數據表示成序列,如果是False, 不能使用分詞 默認值: True.

use_vocab: 是否使用詞典對象. 如果是False 數據的類型必須已經是數值類型. 默認值: True.

init_token: 每一條數據的起始字符 默認值: None.

eos_token: 每條數據的結尾字符 默認值: None.

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: Whether to produce tensors with the batch dimension first. 默認值: False.

pad_token: 用于補全的字符. 默認值: "<pad>".

unk_token: 不存在詞典里的字符. 默認值: "<unk>".

pad_first: 是否補全第一個字符. 默認值: False.

重要的幾個方法:

pad(minibatch): 在一個batch對齊每條數據

build_vocab(): 建立詞典

numericalize(): 把文本數據數值化,返回tensor

簡單的栗子如下,建一個Field對象

TEXT = data.Field(tokenize=data.get_tokenizer('spacy'), 
                  init_token='<SOS>', eos_token='<EOS>',lower=True)

Dataset

torchtext的Dataset是繼承自pytorch的Dataset,提供了一個可以下載壓縮數據并解壓的方法(支持.zip, .gz, .tgz)

splits方法可以同時讀取訓練集,驗證集,測試集

TabularDataset可以很方便的讀取CSV, TSV, or 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

TEXT.build_vocab(train, vectors="glove.6B.100d")

Iterator

Iterator是torchtext到模型的輸出,它提供了我們對數據的一般處理方式,比如打亂,排序,等等,可以動態修改batch大小,這里也有splits方法 可以同時輸出訓練集,驗證集,測試集

參數如下:

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 IMDb

  • Question classification: TREC

  • Entailment: SNLI

  • Language modeling: WikiText-2

  • Machine translation: Multi30k, IWSLT, WMT14

完整例子如下,短短幾行就把詞典和數據batch做好了。

import spacyimport torchfrom torchtext import data, datasetsspacy_en = spacy.load('en')def tokenizer(text): # create a tokenizer functionreturn [tok.text for tok in spacy_en.tokenizer(text)]TEXT = data.Field(sequential=True, tokenize=tokenizer, lower=True, fix_length=150)LABEL = data.Field(sequential=False, use_vocab=False)train, val, test = data.TabularDataset.splits(path='./data/', train='train.tsv',validation='val.tsv', test='test.tsv', format='tsv',fields=[('Text', TEXT), ('Label', LABEL)])TEXT.build_vocab(train, vectors="glove.6B.100d")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)vocab = TEXT.vocab

感謝各位的閱讀,以上就是“torchtext的用法介紹”的內容了,經過本文的學習后,相信大家對torchtext的用法介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女