使用Pytorch中的torchtext加载和预处理文本分类任务的数据集

server/2024/9/23 4:38:50/

文章目录

    • 1. torchtext版本:0.15.0
    • 2. 导入库和模块:
    • 3. 定义分词器:
      • 3.1 一个简单的示例来进一步说明 `get_tokenizer` 函数的使用
    • 4. 下载并加载数据集
    • 5. 定义词汇表并构建
      • 5.1 `map()` 函数
        • 一个简单的map() 函数的例子
      • 5.2 `torchtext.vocab.build_vocab_from_iterator(...)` 函数
        • 一个简单的build_vocab_from_iterator例子
    • 6. 完整代码

1. torchtext版本:0.15.0

要查看当前环境中安装的 torchtext 版本,可以使用以下代码:

import torchtext
print(torchtext.__version__)

2. 导入库和模块:

import torchtext
from torchtext.datasets import AG_NEWS
from torchtext.data.utils import get_tokenizer

这里导入了 torchtext 库以及所需的模块和数据集。AG_NEWStorchtext 中的一个文本分类数据集,get_tokenizer 是用于获取分词器的实用函数。

3. 定义分词器:

tokenizer = get_tokenizer("basic_english")

这里使用了 get_tokenizer 函数,创建了一个基于英语的简单分词器。分词器的作用是将原始文本拆分成单词或标记的序列。这里basic_english 是一个预定义的简单分词器,用于英语文本的基本分词。这个分词器会将文本按照空格进行划分,但不会进行复杂的处理,如词干提取、停用词过滤等。

具体而言,basic_english 分词器的工作方式如下:

  1. 按空格分词: 它会将文本按空格进行划分,将文本分割成一个个单词或标记的序列。
  2. 简单处理: 它不会进行复杂的处理,如词干提取、停用词过滤等。每个单词都会作为一个独立的标记。

basic_english 分词器适用于简单的文本处理任务,例如对英语文本进行基本的词级别处理。但对于更复杂的任务,例如情感分析或命名实体识别,可能需要使用更复杂的分词器或进行额外的文本预处理。

3.1 一个简单的示例来进一步说明 get_tokenizer 函数的使用

from torchtext.data.utils import get_tokenizer# 获取英语基本分词器
basic_english_tokenizer = get_tokenizer("basic_english")# 待分词的文本
text = "This is a sample sentence for tokenization."# 使用分词器对文本进行分词
tokens = basic_english_tokenizer(text)# 打印分词结果
print("Original text:", text)
print("Tokenized text:", tokens)
# Original text: This is a sample sentence for tokenization.
# Tokenized text: ['this', 'is', 'a', 'sample', 'sentence', 'for', 'tokenization', '.']

4. 下载并加载数据集

train_iter = AG_NEWS(split='train')

这行代码下载并加载了 AG News 数据集的训练集部分。split='train' 参数表示加载训练集。

# 打印样本标签和文本,标签通常用于指示文本所属的类别或类别的相关信息。例如,在文本分类任务中,每个文本样本都会附带一个标签,表示该文本属于哪个类别(如新闻分类# 任务中的政治、体育、娱乐等类别)。
# 打印存储样本
texts = []
for (label, text) in train_iter:texts.append(text)print(f"Label: {label}, Text: {text}")

5. 定义词汇表并构建

# 定义词汇表并构建
vocab = torchtext.vocab.build_vocab_from_iterator(map(tokenizer, iter(texts)))
# 查看词汇表大小:
print("Vocabulary size:", len(vocab))
# Vocabulary size: 95810
  1. iter(train_iter):这是一个内置函数 iter(),它将数据集对象 train_iter 转换为一个迭代器。
  2. map(tokenizer, ...):这是 map() 函数的调用,它将分词器 tokenizer 应用于数据集的每个元素(即每个文本样本)。这样,我们就得到了一个包含分词器处理后的结果的迭代器。
  3. torchtext.vocab.build_vocab_from_iterator(...):这是 torchtext 库中的一个函数,它接受一个迭代器,并根据迭代器中的数据构建词汇表。

5.1 map() 函数

map() 函数用于对数据集中的每个文本样本应用分词器,在 Python 中,map() 函数是一个内置函数,它接受两个参数:一个函数和一个可迭代对象(通常是列表、元组等)。map() 函数会对可迭代对象中的每个元素应用指定的函数,并返回一个包含所有函数返回值的迭代器。在这里,我们使用了 map() 函数将分词器应用于数据集中的每个文本样本。具体来说,我们对数据集中的每个元素(即每个文本样本)应用了分词器函数。这样就得到了一个迭代器,其中包含了分词器处理后的每个文本样本的结果。

一个简单的map() 函数的例子

下面是一个简单的例子,演示如何使用 map() 函数将一个列表中的每个元素加上 1,

# 定义一个函数,将输入加上 1
def add_one(x):return x + 1# 定义一个列表
nums = [1, 2, 3, 4, 5]# 使用 map() 函数将列表中的每个元素加上 1
result = map(add_one, nums)# 将结果转换为列表
result_list = list(result)# 打印结果
print("Original list:", nums)
print("List after adding one to each element:", result_list)
# Original list: [1, 2, 3, 4, 5]
# List after adding one to each element: [2, 3, 4, 5, 6]

5.2 torchtext.vocab.build_vocab_from_iterator(...) 函数

build_vocab_from_iteratortorchtext 库中的一个函数,用于根据数据集中的文本构建词汇表。它接受一个迭代器作为输入,并根据迭代器中的文本数据构建词汇表。

  • 输入参数: build_vocab_from_iterator 函数接受一个迭代器作为输入,迭代器中的每个元素都应该是一个包含单词或标记序列的可迭代对象。例如,可以将文本数据集中的每个文本字符串作为迭代器的元素传递给该函数。
  • 输出结果: 函数返回一个词汇表对象,该对象包含构建的词汇表信息。词汇表通常包含以下几个重要的属性:
    • stoi:将单词映射到索引的字典。
    • itos:将索引映射到单词的列表。
    • freqs:单词的频率信息。
一个简单的build_vocab_from_iterator例子
import torchtext# 定义一个简单的文本数据集
text_data = ["This is a simple example.", "Another example for building vocabulary."]# 定义一个分词器函数
def tokenizer(text):return text.split()# 使用 build_vocab_from_iterator 构建词汇表
vocab = torchtext.vocab.build_vocab_from_iterator(map(tokenizer, text_data))# 打印词汇表
print("Vocabulary:", vocab.get_itos())

6. 完整代码

import torchtext
from torchtext.datasets import AG_NEWS
from torchtext.data.utils import get_tokenizer# 定义分词器
tokenizer = get_tokenizer("basic_english")
print(f"tokenizer: {tokenizer}")# 下载并加载数据集
train_iter = AG_NEWS(split='train')# 打印存储样本
texts = []
for (label, text) in train_iter:texts.append(text)print(f"Label: {label}, Text: {text}")# 定义词汇表并构建
vocab = torchtext.vocab.build_vocab_from_iterator(map(tokenizer, iter(texts)))# 查看词汇表大小:
print("Vocabulary size:", len(vocab))
# Vocabulary size: 95810

http://www.ppmy.cn/server/32941.html

相关文章

karpathy Let‘s build GPT

1 introduction 按照karpathy的教程,一步步的完成transformer的构建,并在这个过程中,加深对transformer设计的理解。 karpathy推荐在进行网络设计的过程中,同时利用jupyter notebook进行快速测试和python进行主要的网络的构建。 …

深入探索微信小程序:图像处理与优雅预览的艺术

深入探索微信小程序:图像处理与优雅预览的艺术 微信小程序中的图片基础一、图片上传与压缩二、图片预览技巧三、图片处理进阶:Canvas与滤镜四、性能优化与最佳实践参考资料 微信小程序中的图片基础 图片资源存储:本地资源与网络资源的使用区…

《QT实用小工具·四十九》QT开发的轮播图

1、概述 源码放在文章末尾 该项目实现了界面轮播图的效果,包含如下特点: 左右轮播 鼠标悬浮切换,无需点击 自动定时轮播 自动裁剪和缩放不同尺寸图片 任意添加、插入、删除 单击事件,支持索引和自定义文本 界面美观,圆…

微信小程序 uniapp家庭食谱菜谱食材网上商城系统小程序ko137

随着生活节奏的不断加快,越来越多的人因为工作忙而没有时间自己出去订购喜欢的菜品。随着Internet的飞速发展,网络已经成为我们日常生活中必不可少的部分,越来越多的人也接受了电子商务这种快捷、方便的交易方式。网上订餐其独有的便捷性和直…

数据仓库实验三:分类规则挖掘实验

目录 一、实验目的二、实验内容和要求三、实验步骤1、创建数据库和表2、决策树分类规则挖掘(1)新建一个 Analysis Services 项目 jueceshu(2)建立数据源视图(3)建立挖掘结构 DST.dmm(4&#xff…

用vsCode开发uni-app(vue + ts)项目流程

提示:记录项目创建流程 文章目录 前言一、安装 uni-app 插件二、ts 类型校验1.安装类型声明文件2.配置 tsconfig,json三、json 注释问题四、组件引入1. 安装 uni-app2. 组件自动引入3. 配置 ts 类型五、小程序端 Pinia 持久化六、uni.request 请求封装七、请求成功提取数据和设…

远程服务器 docker XRDP 桌面访问 记录

需求描述: 我现在在远程连接 一台服务器,由于需要实验环境需要GUI 和 桌面系统,但是又想在 docker 中运行。因此,我现在首先需要通过 ssh 连接服务器,然后再服务器中连接 docker. REF: https://github.com/danielguerra69/ubuntu-…

Topaz Video AI 5.0.3激活版 AI视频无损缩放增强

Topaz Video AI专注于很好地完成一些视频增强任务:去隔行,放大和运动插值。我们花了五年时间制作足够强大的人工智能模型,以便在真实世界的镜头上获得自然的结果。 Topaz Video AI 还将充分利用您的现代工作站,因为我们直接与硬件…