本文主要介绍了NLP预处理步骤中的词表创建,其目的是将文本数据转换为机器可理解和处理的形式,对后续模型训练和应用效果有直接影响。计算机处理的是数字而非文本,因此词表定义了文本数据中每个唯一词与一个唯一整数索引之间的映射。创建词表可以缩减无限的词汇量为有限的词汇集合,降低数据维度,简化模型处理过程。同时,词表通常包含特殊token来表示未知词汇,使模型在一定程度上能够处理未见过的词汇。最后,本文以IMDB数据集为例,使用torchtext提供的工具演示了词表的创建过程。
创建词表主要目的是将自然语言的文本数据转换成机器可以理解和处理的形式,是NLP预处理步骤中的一个基本环节,对于后续的模型训练和应用效果有着直接的影响。
计算机处理的是数字,而不是文本。词表定义了文本数据中的每个唯一词与一个唯一的整数索引之间的映射。
所有出现在词表中的词都会被赋予一个索引。在实际应用中,模型会遇到训练期间未出现过的词汇。词表通常包含特殊 token来表示这些未知词汇,从而在某种程度上允许模型处理未见过的词汇。
自然语言是高度冗余的,存在大量的词汇。通过创建词表,可以将无限的词汇量缩减为有限的词汇集合,从而降低数据的维度,简化模型处理过程。
在torchtext中,提供了一些现成的工具来创建此表。本文已然以上一节IMDB数据集为例,演示词表的创建。
# 分词工具
from torchtext.data.utils import get_tokenizer
# 词表工具
from torchtext.vocab import build_vocab_from_iterator
train_iter, test_iter = torchtext.datasets.IMDB()
train_data, test_data = list(train_iter),list(test_iter)
# 实体化
tokenizer = get_tokenizer('basic_english')
def yield_token(data):
for (_, text) in data:
yield tokenizer(text)
# 如何理解Python中的yield用法?
# 知乎:https://zhuanlan.zhihu.com/p/268605982
# 对于未知词汇的处理
vocab.set_default_index(vocab['<unk>'])
# 封装成函数
text_pipeline = lambda x: vocab(tokenizer(x))
yield
关键词是用于创建一个迭代器:
最终实现的效果如下: