【PyTorch】torch.data.Field 参数与方法详解 & Embedding 层浅谈

  • 以下内容基于 t o r c h t e x t   0.8.0   D o c s \rm torchtext~0.8.0~Docs torchtext 0.8.0 Docs 展开。

文章目录

  • Field类功能.
  • 构造参数.
  • 成员函数 build_vocab.
  • Embedding.

Field类功能.

  • F i e l d \rm Field Field 类对可以用张量 T e n s o r \rm Tensor Tensor 表示的常见文本处理数据类型进行处理,包含一个 V o c a b \rm Vocab Vocab 词表对象,该对象对 F i e l d \rm Field Field 中的文本数据及其向量化表示进行定义。 F i e l d \rm Field Field 对象还包含用于定义如何对数据类型进行数字化的其他参数,例如分词 T o k e n i z a t i o n \rm Tokenization Tokenization 方法和应该生成的张量类型。

构造参数.


sequential: Whether the datatype represents sequential data. If False,
            no tokenization is applied. Default: True.
  • s e q u e n t i a l \rm sequential sequential】数据是否为序列化数据,例如最常见的文本序列,如果非序列数据,则无法进行分词 T o k e n i z a t i o n . \rm Tokenization. Tokenization. 该参数默认为 T r u e . \rm True. True.

use_vocab: Whether to use a Vocab object. If False, the data in this
           field should already be numerical. Default: True.
  • u s e _ v o c a b \rm use\_vocab use_vocab】数据是否需要词表对象 V o c a b \rm Vocab Vocab,如果不需要,那么必须保证数据是已经完成数值化的。该参数默认为 T r u e . \rm True. True.

init_token: A token that will be prepended to every example using this
            field, or None for no initial token. Default: None.
            
eos_token: A token that will be appended to every example using this
           field, or None for no end-of-sentence token. Default: None.
  • i n i t _ t o k e n / e o s _ t o k e n \rm init\_token/eos\_token init_token/eos_token】分别表示每一段序列的 i n i t i a l   t o k e n \rm initial~token initial token e n d − o f − s e n t e n c e   t o k e n \rm end-of-sentence~token endofsentence token,默认为 N o n e \rm None None 表示不进行特殊的起始、终末附加。

fix_length: A fixed length that all examples using this field will be
            padded to, or None for flexible sequence lengths. Default: None.
  • f i x _ l e n g t h \rm fix\_length fix_length】设置每段文本的长度,过长会被截断,过短会进行填充。默认为 N o n e \rm None None 表示使用不等长文本。

lower: Whether to lowercase the text in this field. Default: False.
  • l o w e r \rm lower lower】是否将文本全部转化为小写。

tokenize: The function used to tokenize strings using this field into
          sequential examples. If "spacy", the SpaCy tokenizer is
          used. If a non-serializable function is passed as an argument,
          the field will not be able to be serialized. Default: string.split.
  • t o k e n i z e \rm tokenize tokenize】用于进行分词的具体方法,默认为 P y t h o n \rm Python Python 标准的字符串对象分割函数 s p l i t ( ) . \rm split(). split(). 也可以进行特殊指定,例如 t o k e n i z e = ′ s p a c y ′ \rm tokenize='spacy' tokenize=spacy 则表示使用 S p a C y \rm SpaCy SpaCy 的分词方法。

preprocessing: 	The Pipeline that will be applied to examples
            	using this field after tokenizing but before numericalizing. Many
            	Datasets replace this attribute with a custom preprocessor.
            	Default: None.
            
postprocessing: A Pipeline that will be applied to examples using
            	this field after numericalizing but before the numbers are turned
            	into a Tensor. The pipeline function takes the batch as a list, and
           		the field's Vocab.
            	Default: None.
  • p r e p r o c e s s i n g / p o s t p r o c e s s i n g \rm preprocessing/postprocessing preprocessing/postprocessing】指明该 F i e l d \rm Field Field 对象中数据在数值化前、数值化后 (转化为张量之前) 进行的流水线处理。默认均为 N o n e . \rm None. None.

tokenizer_language: The language of the tokenizer to be constructed.
            		Various languages currently supported only in SpaCy.
  • t o k e n i z e r _ l a n g u a g e \rm tokenizer\_language tokenizer_language】分词器的语言种类,目前仅有 S p a C y \rm SpaCy SpaCy 支持多种语言类型。

pad_token: The string token used as padding. Default: "".

unk_token: The string token used to represent OOV words. Default: "".
  • p a d _ t o k e n / u n k _ t o k e n \rm pad\_token/unk\_token pad_token/unk_token】分别代表用于填充时使用的 t o k e n \rm token token 和处理未知词时使用的 t o k e n . \rm token. token. 其中 O O V \rm OOV OOV o u t − o f − v a c a b u l a r y \rm out-of-vacabulary outofvacabulary 的简写,二者的默认值分别为 < p a d > , < u n k > . \rm ,. <pad>,<unk>.

batch_first: Whether to produce tensors with the batch dimension first.
            Default: False.
  • b a t c h _ f i r s t \rm batch\_first batch_first】是否将数据的批大小作为张量的第一维度,默认是 F a l s e . \rm False. False.

pad_first: Do the padding of the sequence at the beginning. Default: False.

truncate_first: Do the truncating of the sequence at the beginning. Default: False
  • p a d _ f i r s t / t r u n c a t e _ f i r s t \rm pad\_first/truncate\_first pad_first/truncate_first】分别表示是否对序列在开头进行填充和截断,默认均为 F a l s e \rm False False,填充和截断都在序列尾进行。

stop_words: Tokens to discard during the preprocessing step. Default: None
  • s t o p _ w o r d s \rm stop\_words stop_words】预处理过程中丢弃的词,往往是一些无意义的虚词。

is_target: Whether this field is a target variable.
           Affects iteration over batches. Default: False
  • i s _ t a r g e t \rm is\_target is_target】标记该 F i e l d \rm Field Field 中的数据是否为目标变量,会影响到后续批处理时的迭代,默认为 F a l s e . \rm False. False.

  • 通常在进行自然语言处理,例如情感分类器训练时,并不会用到上面的所有参数,绝大部分参数保持默认值即可。例如下面是实例化两个 F i e l d \rm Field Field 对象的代码,分别对应文本数据和标签数据:
TEXT = data.Field(lower = True,batch_first = True,fix_length = 20)
LABEL = data.Field(sequential = False)
  • 文本数据显然是序列数据,因此 s e q u e n t i a l \rm sequential sequential 保持默认值即可;而标签数据是表明输入数据情感类别的数据,其取值为 { 0 , 1 , 2 } \{0,1,2\} {0,1,2} ,表示未知、正面、负面,因此需要将 s e q u e n t i a l \rm sequential sequential F a l s e . \rm False. False.

成员函数 build_vocab.

  • 一个调用 b u i l d _ v o c a b ( ) \rm build\_vocab() build_vocab() 方法的实例如下:
TEXT.build_vocab(train,
                 vectors = GloVe(name = '6B',dim = 300),
                 max_size = 10000,
                 min_freq = 10)

LABEL.build_vocab(train)
  • 其中 G l o v e ( n a m e = ′ 6 B ′ , d i m = 300 ) \rm Glove(name='6B',dim=300) Glove(name=6B,dim=300) 用于下载并导入预训练好的词向量 g l o v e . 6 b . 300 d . \rm glove.6b.300d. glove.6b.300d.
  • b u i l d _ v o c a b ( ) \rm build\_vocab() build_vocab() 方法中通过训练数据集 t r a i n \rm train train 构建词表,并且通过 m a x _ s i z e \rm max\_size max_size 指定其中词频最大的前 10000 10000 10000 个词纳入考虑。这里 v e c t o r s = G l o V e ( . . . ) \rm vectors=GloVe(...) vectors=GloVe(...) 表示使用预训练好的词向量进行初始化。注意这里仅仅是将预训练好的词向量作为初始化,并未在模型中实际使用该预训练词向量,如果不使用形如下面的语句将 g l o v e . 6 b . 300 d \rm glove.6b.300d glove.6b.300d 等预训练词向量导入,则词向量通常会由网络中 E m b e d d i n g \rm Embedding Embedding 层负责训练。
model.embedding.weight.data = TEXT.vocab.vectors
model.embedding.weight.requires_grad = False

Embedding.

  • 构建词表时选定的词嵌入向量维度关系到网络中嵌入层 E m b e d d i n g \rm Embedding Embedding 的构造参数, P y T o r c h − E m b e d d i n g \rm PyTorch-Embedding PyTorchEmbedding 的构造参数如下所示:
    【PyTorch】torch.data.Field 参数与方法详解 & Embedding 层浅谈_第1张图片
  • 如果不指定 E m b e d d i n g \rm Embedding Embedding 层的权重参数,那么会基于标准正态分布进行随机初始化。
    在这里插入图片描述
  • E m b e d d i n g \rm Embedding Embedding 层在前向传播时可以理解为执行查表操作 —— 将序列中的单词替换为 E m b e d d i n g \rm Embedding Embedding 层的词嵌入向量(本质上就是该层权重).
    【PyTorch】torch.data.Field 参数与方法详解 & Embedding 层浅谈_第2张图片

你可能感兴趣的:(PyTorch)