本文为 AI 研习社社区用户 @Dendi 独家投稿内容,欢迎扫描底部社区名片访问 @Dendi 的主页,查看更多内容。
01.概述
在处理NLP任务时除了需要优秀的神经网络还需要方便、高效的数据预处理工具。今天介绍一款优秀的NLP数据处理工具torchtext。
NLP常见的数据预处理工作如下:
Load File
:数据文件加载;Tokenization
:分词;Create Vocabulary
:创建字典;Indexify
:将词与索引进行映射;Word Vectors
:创建或加载词向量;Padding or Fix Length
:按长度对文本进行补齐或截取;Dataset Splits
:划分数据集(如将数据集划分问训练集、验证集、测试集);Batching and Iterators
:将数据集按固定大小划分成Batch;
使用torchtext
完成以上工作:
- 使用
torchtext.data.Field
定义样本各个字段的处理流程(分词、数据预处理等); - 使用
torchtext.data.Example
将torchtext.data.Field
处理成一条样本; - 使用
torchtext.data.Dataset
将torchtext.data.Example
处理成数据集,也可对数据集进行划分等工作; - 使用
torchtext.data.Iterators
将torchtext.data.Dataset
按照batch_size
组装成Batch
供模型训练使用; - 使用
torchtext.data.vocab
和torchtext.data.Vectors
创建词典、词和索引的一一对应、下载或使用预训练的词向量等;
02.安装
- 使用如下命令安装:
pip install torchtext
03.文档
- 官方教程:https://torchtext.readthedocs.io/en/latest/index.html
04.主要的Package
torchtext.data
torchtext.data.Dataset
:数据集;torchtext.data.Example
:样本;torchtext.data.Fields
:样本的属性(如:content、label);torchtext.data.Iterators
:将数据集封装成Batch,并提供迭代器;
tochtext.vocab
torchtext.vocab.Vocab
:词典相关;torchtext.vocab.Vectors
:词向量相关;
05.实践
- 05-1.Field
API
代码语言:javascript复制class torchtext.data.Field(
重要的参数:
sequential
:是否是可序列化数据(类似于字符串数据),默认值是True
;user_vocab
:是否使用Vocab
对象,如果取False
,则该字段必须是数值类型;默认值是True
;tokenize
:是一个function
类型的对象(如string.cut
、jieba.cut
等),用于对字符串进行分词;batch_first
:如果该属性的值取True
,则该字段返回的Tensor
对象的第一维度是batch
的大小;默认值是False
;fix_length
:该字段是否是定长,如果取None
则按同batch
该字段的最大长度进行pad;
重要函数:
build_vocab
:为该Field
创建Vocab
;
Code Demo
数据集(第一个字段是 label
, 第二个字段是 content
):
0 我不退我也不买。我就看戏
代码:
代码语言:javascript复制# 分词函数
- 05-2.Example
API
代码语言:javascript复制class torchtext.data.Example:
该类有5个类函数,可以从 csv
、json
、dict
、list
、tree
等数据结构中创建Example
,常用的是 fromlist
;
- 05-3.Dataset
API
代码语言:javascript复制class torchtext.data.Dataset(examples, fields, filter_pred=None)
重要参数:
examples
:Example对象列表;fields
:格式是List(tuple(str, Field))
,其中str
是Field
对象的描述;
Code Demo
代码语言:javascript复制# 读取数据
- 05-4.Vocab
API
代码语言:javascript复制class torchtext.vocab.Vocab(
重要参数:
counter
:collections.Counter
类型的对象,用于保存数据(如:单词)的频率;vectors
:预训练的词向量,可以是torch.vocab.Vectors
类型,也可以是其他类型;
Code Demo
代码语言:javascript复制# 为 CONTENT 字段创建词向量
- 05-5.Vectors
API
代码语言:javascript复制class torchtext.vocab.Vectors(name, cache=None, url=None, unk_init=None, max_vectors=None)
重要参数:
name
:保存word vectors的文件;catch
:word vectors文件的缓存目录,默认是.vector_cache
;url
:如果缓存文件夹中不存在 word vectors文件,则去该url下载;unk_init
:是一个function
类型的对象,用来初始化词典中不存在的词向量;默认是Tensor.zero_
;max_vecotrs
:int
类型的数据,限制词典的大小;
Code Demo
代码语言:javascript复制# 使用预训练词向量
结果:
06.结语
torchtext
是一个很好用的文本处理工具,本文只是介绍了torchtext
常用的功能,可以查看官方文档进一步学习。
* 封面图来源:https://www.developereconomics.com/nlp-wit-luis-api-ai