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

devtools/2024/9/20 1:25:54/ 标签: pytorch

文章目录

    • 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/devtools/32915.html

相关文章

浅谈ps/2键盘

文章目录 说明基础知识操作系统中断类型工作机制优点应用 CPU对IO设备的轮询机制轮询机制的工作原理轮询机制的特点轮询机制的优、缺点与中断机制的对比 N-Key Roller(全键无冲)应用领域实现原理技术限制 PS/2接口简介USB设备&PS/2设备的工作机制PS/…

【强训笔记】day8

NO.3 思路&#xff1a;相乘除以最大公约数等于最小公倍数。最小公倍数等于gcd&#xff08;a&#xff0c;a%b&#xff09;递归直到b等于0。 代码实现&#xff1a; #include <iostream> using namespace std;int gcd(int a,int b) {if(b0) return a;return gcd(b,a%b); }…

深入学习Redis(1):Redis内存模型

Redis的五个对象类型 字符串&#xff0c;哈希&#xff0c;列表&#xff0c;集合&#xff0c;有序集合 本节有关redis的内存模型 1.估算redis的内存使用情况 目前内存的价格比较的高&#xff0c;如果对于redis的内存使用情况能够进行计算&#xff0c;就可以选用合适的设备进…

组合总和2(力扣40)

解题思路&#xff1a;因为这里不能有重复的组合&#xff0c;所以采取用下表used来判断其是否在前面出现过&#xff0c;如果出现过就直接跳过&#xff0c;同时判断是树层重复还是树枝重复&#xff0c;如果是树枝重复就不用跳过 具体代码如下&#xff1a; class Solution { pu…

Leetcode—1056. 易混淆数【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—1056. 易混淆数 &#x1f4a9;山实现代码 class Solution { public:bool confusingNumber(int n) {int arr[10] {0};int notNum 0;int arr2[12] {0};int size 0;while(n) {int x n % 10;arr[x] 1;arr2[size] x;if(…

【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数

力扣对应题目链接&#xff1a;LCR 135. 报数 - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;打印从1到最大的n位数_牛客题霸_牛客网 (nowcoder.com) 一、《剑指Offer》内容 二、分析题目 1、暴力解法 2、用字符串模拟数字加法 首先要考虑当 n 很大时&…

IoTDB 入门教程 基础篇⑦——数据库管理工具 | DBeaver 连接 IoTDB

文章目录 一、前文二、下载iotdb-jdbc三、安装DBeaver3.1 DBeaver 下载3.2 DBeaver 安装 四、安装驱动五、连接数据库六、参考 一、前文 IoTDB入门教程——导读 二、下载iotdb-jdbc 下载地址org/apache/iotdb/iotdb-jdbc&#xff1a;https://maven.proxy.ustclug.org/maven2/o…

【数学建模】矩阵微分方程

一、说明 我相信你们中的许多人都熟悉微分方程&#xff0c;或者至少知道它们。微分方程是数学中最重要的概念之一&#xff0c;也许最著名的微分方程是布莱克-斯科尔斯方程&#xff0c;它控制着任何股票价格。 ​​ 股票价格的布莱克-斯科尔斯模型 微分方程可以由数学中的许多…

MyBatisPlus @TableLogic实现全局自动逻辑删除

一、背景 有一天&#xff0c;小王在编写代码时实现了一个删除操作&#xff0c;但由于测试场景覆盖不全&#xff0c;上线后不慎删除了系统中的部分业务数据。幸运的是&#xff0c;系统已经开启了binlog日志功能&#xff0c;使得我们能够根据日志来恢复这些误删的数据。这一事故…

关于测试用例

目录 一 测试用例介绍 二 写用例的好处 三 不适合写用例的情况 一 测试用例介绍 测试用例由测试来写&#xff0c;编写时间在需求评审和设计评审&#xff08;如有&#xff09;结束后&#xff0c;需求提测前&#xff0c;用例依赖需求文档来编写。一般包含用例标题&#xff0c…

算法提高之二维费用的背包问题

算法提高之二维费用的背包问题 核心思想&#xff1a;二维01背包 每个物品只能用一次 所以是01背包模板用f[j][k] 表示第一维费用不超过V 第二维费用不超过M的方案 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const i…

OneFlow深度学习框原理、用法、案例和注意事项

本文将基于OneFlow深度学习框架&#xff0c;详细介绍其原理、用法、案例和注意事项。OneFlow是由中科院计算所自动化研究所推出的深度学习框架&#xff0c;专注于高效、易用和扩展性强。它提供了一种类似于深度学习库的接口&#xff0c;可以用于构建神经网络模型&#xff0c;并…

R和Python市场篮分析算法及行为分析模型

&#x1f3af;要点 行为数据分析&#xff1a;&#x1f3af;线性统计研究生学业表现&#xff1a;&#x1f58a;绘制测试分数配对图 | &#x1f58a;构建简单线性回归模型&#xff0c;拟合数据 | &#x1f58a;构建多线性回归&#xff0c;三维可视化数据拟合模型 | &#x1f58a…

前端 JS 异常那些事

前言 人无完人&#xff0c;所以代码总会出异常的&#xff0c;异常并不可怕&#xff0c;关键是怎么处理 什么是异常 程序发生了意想不到的情况&#xff0c;影响到了程序的正确运行 从根本上来说&#xff0c;异常就是一个普通的对象&#xff0c;其保存了异常发生的相关信息&a…

《Maven》linux中安装maven并配置环境变量

阿丹&#xff1a; 很多项目需要在服务器上使用maven来打包&#xff0c;这里就需要使用配置maven来进行运行指令&#xff0c;本文章来快速的安装和配置一下这个Maven并且来完成环境变量的配置。 步骤 1: 安装Maven 在Linux系统上安装Maven: 如果你使用的是基于Debian的系统&a…

Codeforces Round 942 (Div. 2) (A-D2)C++题解

链接 : Dashboard - Codeforces Round 942 (Div. 2) - Codeforces A. Contest Proposal 数据范围小&#xff0c;模拟就好了; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \n #define int long long typedef l…

ASP.NET网上车辆档案管理系统

摘 要 本文采用基于Web的Asp.net技术&#xff0c;并与sql server 2000数据库相结合&#xff0c;研发了一套车辆档案管理系统。该系统扩展性好&#xff0c;易于维护。简化了车辆档案设计流程&#xff0c;去除了冗余信息。汽车销售企业可以通过本系统完成整个销售及售后所有档案…

【Python】 逻辑回归:从训练到预测的完整案例

我把我唱给你听 把你纯真无邪的笑容给我吧 我们应该有快乐的 幸福的晴朗的时光 我把我唱给你听 用我炙热的感情感动你好吗 岁月是值得怀念的留恋的 害羞的红色脸庞 谁能够代替你呀 趁年轻尽情的爱吧 最最亲爱的人啊 路途遥远我们在一起吧 &#x1f3b5; 叶…

Redis 相关问题总结

Redis 相关问题 Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些&#xff1f; 单线程的redis为什么这么快 redis的数据类型&#xff0c;以及每种数据类型的使用场景&#xff0c;Redis 内…

Git推送本地项目到gitee远程仓库

Git 是一个功能强大的分布式版本控制系统&#xff0c;它允许多人协作开发项目&#xff0c;同时有效管理代码的历史版本。开发者可以克隆一个公共仓库到本地&#xff0c;进行更改后将更新推送回服务器&#xff0c;或从服务器拉取他人更改&#xff0c;实现代码的同步和版本控制。…