torchtext学习笔记

torchtext学习笔记

  • Torchtext主要内容
    • 1.Field
    • 2.Dataset(自定义类)
    • 3.Iterator


提示:以下是本篇文章正文内容,下面案例可供参考

Torchtext主要内容

torchtext对文本数据的预处理主要包含Field、Dataset、Iterator这三个部分。

1.Field

用来定义字段处理的方法(如文本、标签字段),是否区分大小写,指定分词方法。
[常用的参数]
squential:数据是否为序列数据,Default: Ture;若为False,则不能使用分词。
lowe:是否区分大小写,Default: False。
use_vocab:是否使用词典,Default: True。若为False,那么输入的数据类型必须是数值类型。
fix_length:表示文本长度,不使用时自动将文本长度设为最大样本长度。
tokenize:必须是一个函数,作用是给定一个字符串,该函数以列表的形式返回分词结果。
stop_words:丢弃停用词,Default: None。

代码如下(示例):

from torchtext.legacy.data import Field
from torchtext.legacy.data import TabularDataset
from torchtext.legacy.data import Iterator

# 创建分词函数
def tokenizer(text):
    regex = re.compile(r'[^\u4e00-\u9fa5aA-Za-z0-9]')   #正则化:由大小写英文字母、中文、数字组成
    text = regex.sub(' ', text)   
    return [word for word in jieba.cut(text) if word.strip()]  # 以列表的形式返回 ['我''是',...]
    
# 去停用词
def get_stop_words():
    file_object = open('data/stop_words.txt', encoding='UTF-8')  # 读取停用词列表
    stop_words = []
    for line in file_object.readlines():
        line = line[:-1]    
        line = line.strip()
        stop_words.append(line)
    return stop_words

text = Field(sequential=True, lower=True, tokenize=tokenizer, stop_words=get_stop_words())
label = Field(sequential=False)

2.Dataset(自定义类)

可处理多种格式(csv,tsv,json)的数据,对于csv/tsv类型的文件,TabularDataset很容易进行处理。(注意:传入的fields的name顺序必须与源文件数据的列相同)
代码如下(示例):

train, val = TabularDataset.splits(
            path='data/',
            train='train.tsv',
            validation='val.tsv',
            format='tsv',
            skip_header=True,
            fields=[('label', label), ('text', text)],
        )
#创建词表:没有预训练词的情况下使用,在模型embedding随机初始化
text.build_vocab(train, val)
#有与训练词的情况下,将预训练的词向量加载到模型中
text.build_vocab(train, val, vectors=Vectors(name="article.vector"))  # 已有的词向量(自定义)
embedding_dim = text.vocab.vectors.size()[-1]
vectors = text.vocab.vectors

3.Iterator

对一个batch的数据进行操作,为模型提供输入,验证集和训练集合使用BucketIterator.splits()。
(注:BucketIterator相比Iterator的优势是会自动选取样本长度相似的数据来构建批数据,但是在测试集中一般不想改变样本顺序,因此测试集使用Iterator迭代器来构建)
[常用的参数]
sort_key:排序的关键字
batch_sizes:Batch的大小 # 训练集设置batch_size,验证集整个集合用于测试
device:在cpu或gpu上运行
代码如下(示例):

train_iter, val_iter = Iterator.splits(
            (train, val),
            sort_key=lambda x: len(x.text),  
            batch_sizes=(batch_size, len(val)),  # 训练集设置batch_size,验证集整个集合用于测试
            device=-1  # 表示在cpu上运行, device=0 表示gpu
    )

你可能感兴趣的:(pytorch学习笔记,pytorch)