torchtext库的使用!🦔

torchtext库的使用

1.vocab

1.1 build_vocab_from_iterator

build_vocab_from_iterator是TorchText库中用于构建词汇表(vocabulary)的方法之一。它允许你从一个迭代器中构建词汇表,而不是从一个已有的数据集中。

下面是使用build_vocab_from_iterator方法的一个简单示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from torchtext.vocab import Vocab
from collections import Counter

# 假设你有一个文本数据的迭代器,每个元素是一个句子或文本段落
# 这里我们简单地用一个列表模拟了一个文本迭代器
text_iterator = [
["I", "love", "natural", "language", "processing"],
["TorchText", "is", "great", "for", "NLP", "tasks"],
["I", "want", "to", "learn", "more", "about", "TorchText"]
]

# 首先,我们使用Counter来计算词频
counter = Counter()
for text in text_iterator:
counter.update(text)

# 然后,我们可以使用build_vocab_from_iterator来构建词汇表
vocab = Vocab(counter, specials=['<unk>', '<pad>', '<sos>', '<eos>'])

# 查看词汇表中的前几个词
print(vocab.itos[:10])

# 查看词汇表的大小
print(len(vocab))

tips:

build_vocab_from_iterator方法的具体参数含义如下:

  • iterator:一个迭代器,它产生文本数据的序列,每个序列可以是一个句子或文本段落。
  • min_freq:一个整数,表示词汇表中词的最小出现频率。低于这个频率的词将被视为未知词()。
  • cut_under:一个布尔值,表示是否在构建词汇表之前将低于min_freq的词剪掉。如果为True,则会剪掉低频词;如果为False,则不会剪掉。
  • specials:一个包含特殊标记的列表,如<unk>(未知词)、<pad>(填充)、<bos>(开始标记)、<eos>(结束标记)。这些特殊标记将始终包含在词汇表中。
  • special_first:一个布尔值,表示是否将特殊标记放在词汇表的开头。如果为True,则特殊标记会放在词汇表的最前面;如果为False,则会按照词频的顺序放置。
  • min_size:一个整数,表示词汇表的最小大小。如果指定了这个参数,并且词汇表的大小小于min_size,则会用未知词填充词汇表,直到词汇表的大小达到min_size。这意味着将获得索引 1、 索引 2、 索引 3,并将在词汇表中获得索引 0。

1.2 set_default_index

set_default_indextorchtext.vocab.Vocab类中的一个方法。它用于设置默认的未知词索引。

在使用TorchText构建词汇表时,如果给定的词汇表中包含未知词(即在文本数据中出现但未在词汇表中找到的词),默认情况下,这些未知词的索引会被设置为0。但是,你可以使用set_default_index方法来改变这个默认索引。这在某些情况下可能很有用,特别是当你希望将未知词的索引设置为词汇表中的一个特殊标记的索引时。

以下是set_default_index方法的使用示例:

1
2
3
4
5
6
7
from torchtext.vocab import Vocab

# 假设你已经有一个词汇表 vocab,并且已经构建好了
vocab = Vocab(counter)

# 设置默认的未知词索引为特殊标记 '<unk>' 的索引
vocab.set_default_index(vocab['<unk>'])

在这个示例中,我们首先创建了一个词汇表对象vocab,然后使用set_default_index方法将默认的未知词索引设置为词汇表中特殊标记'<unk>'的索引。这样,当词汇表中遇到未知词时,其索引将被设置为'<unk>'的索引。

1.3 get_itos

source_vocab.get_itos() 返回一个列表,其中包含基于词汇的索引中的标记。

1
print(source_vocab.get_itos()[:9])

返回:

1
['<pad>', '<sos>', '<eos>', '<unk>', '.', 'I', 'Tom', 'to', 'you']

在构建词汇表时,首先会对训练数据进行分析,统计每个单词在数据集中出现的次数,然后按照单词出现的频率进行排序,出现频率较高的单词将排在词汇表中的靠前位置。

1.4 get_stoi

source_vocab.get_stoi() 是一个方法调用,用于获取源语言词汇表(source vocabulary)中词语到索引的映射。在机器翻译任务中,通常会构建源语言和目标语言的词汇表,以便将单词转换为对应的索引,便于在模型中进行处理。

这个方法返回一个字典,其中键是词语(或者说是单词),值是该词语在词汇表中对应的索引号。例如,如果源语言词汇表中包含单词 “hello”,并且它在词汇表中的索引号为 5,那么调用 source_vocab.get_stoi() 方法后会得到一个字典,其中包含键值对 {'hello': 5}

这个方法的调用是用于在源语言词汇表中查询单词对应的索引号,以便在训练或推断时将单词转换为索引号进行处理。

2.transforms

torchtext.transforms模块提供了一系列用于数据转换和处理的类和函数,它们可用于预处理文本数据或应用特定的转换。这些转换包括文本标记化、转换为小写、去除特定字符、截断或填充文本序列等。

2.1 AddToken

具体用法:

1
2
3
4
5
6
7
8
9
10
11
import torchtext.transforms as T

def getTransform(vocab):
text_tranform = T.Sequential(
T.VocabTransform(vocab=vocab),
T.AddToken(1, begin=True),
T.AddToken(2, begin=False)
)
return text_tranform

transformed_sentence = getTransform(source_vocab)(engTokenize(some_sentence))

返回:

1
[1, 90, 1089, 4, 2]

这段代码定义了一个名为 getTransform 的函数,该函数接受一个词汇表 vocab 作为参数,并返回一个由三个转换组成的序列。下面是对每个转换的解释:

  1. T.VocabTransform(vocab=vocab):此转换将文本数据映射到词汇表中的索引。vocab参数是一个词汇表对象,它将用于将文本转换为索引序列。
  2. T.AddToken(1, begin=True):此转换将在每个样本的开头添加一个特殊的标记。1 是要添加的标记的索引,begin=True 表示这个标记应该添加在序列的开头。
  3. T.AddToken(2, begin=False):类似地,此转换将在每个样本的末尾添加一个特殊的标记。2 是要添加的标记的索引,begin=False 表示这个标记应该添加在序列的末尾。

2.2 ToTensor

T.ToTensor(0) 是一个 TorchText 中的转换操作,它不仅将序列转换为张量形式,还会应用填充操作。在这里,0 被传递给构造函数,用于指定词汇表中 <pad> 标记的索引位置。

具体用法:

T.ToTensor(1)T.ToTensor(0)区别:

1
2
3
4
5
def applyPadding(pair_of_sequences):
return (T.ToTensor(1)(list(pair_of_sequences[0])), T.ToTensor(0)(list(pair_of_sequences[1])))

data_pipe = data_pipe.map(applyPadding)
print(list(data_pipe)[0])

输出:

1
2
3
4
(tensor([[   1,    3,  126,    2,    1 #这里是1],

如果是T.ToTensor(0)
tensor([[ 1, 4020, 4, 2, 0 #这里会用0来填充]

3.data

3.1 utils

3.1.1 get_tokenizer

get_tokenizer 函数是 TorchText 库中的一个函数,用于将文本数据进行分词,通常用于自然语言处理任务。然而,需要注意的是 TorchText 是一个与 PyTorch 结合使用的库,主要用于处理自然语言处理任务。

在 TorchText 中,以下是一些常用的分词器模型:

  1. 'basic_english':基本英文分词器,适用于英文文本数据的简单分词。
  2. 'spacy':SpaCy 分词器,通过 SpaCy 库提供的分词功能进行分词。需要安装 SpaCy 库以及相应的语言模型。
  3. 'moses':Moses 分词器,使用 Moses 工具包提供的分词功能进行分词。
  4. 'bert-base-uncased':BERT 分词器,使用 BERT 模型进行分词。需要安装 Transformers 库。

torchtext库的使用!🦔
https://yangchuanzhi20.github.io/2024/02/25/人工智能/Pytorch/库的使用/pytorch中torchtext库的使用/
作者
白色很哇塞
发布于
2024年2月25日
许可协议