预处理

前言

keras提供的数据预处理总共有三种类型,他们分别用于处理图片数据、时间序列数据、文本数据,这一次要解析的就是文本数据地预处理,这些api将原始数据按照灵活的格式读入,输出指定格式的可直接输入到模型中的数据。用于处理时间序列数据的有两个,分别是text_dataset_from_directory``和``Tokenizer

text_dataset_from_directory function

1
tf.keras.preprocessing.text_dataset_from_directory(    directory,    labels="inferred",    label_mode="int",    class_names=None,    batch_size=32,    max_length=None,    shuffle=True,    seed=None,    validation_split=None,    subset=None,    follow_links=False,)

这个函数将原始的文本数据(目前只支持.txt格式)转换成tf.data.Dataset类型。

如果你输入的directory目录结构是这样的:

1
main_directory/...class_a/......a_text_1.txt......a_text_2.txt...class_b/......b_text_1.txt......b_text_2.txt
1
那么调用text_dataset_from_directory(main_directory, labels='inferred')将会从子目录的批量文本class_a和class_b中返回一个tf.data.Dataset,其中标签0/1分别代表class_a和class_b.

参数解释

directory:数据所在的目录。如果参数lables被设置为“inferred”,就如上述例子中一样,这个目录包含子目录,否则忽略目录结构。

labels:训练集的标签。

label_mode:标签的数据类型。

class_name:仅当labels是“inferred”时有效。这是类名称的明确列表(必须匹配子目录的名称)。用于控制类的顺序(否则使用字母数字顺序)。

batch_size:数据批次的大小,默认值32。

max_length:文本字符串最长的长度,超过这个值会被截断。

shuffle:是否将生成的序列数据打乱顺序

seed:随机种子,只有使用shuffle时才用

valiation_split:0-1之间的浮点数,保留用于验证的数据片段。

subset:“training”或“valiation”之一。表示valiation_split后的子集将被作为何种用途。

follow_links:是否访问符号链接指向的子目录。

Tokenizer class

1
tf.keras.preprocessing.text.Tokenizer(    num_words=None,    filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n',    lower=True,    split=" ",    char_level=False,    oov_token=None,    document_count=0,    **kwargs)

这个类允许对文本语料进行向量化,方法是将每个文本转换为一个整数序列(每个整数是字典中一个token的索引),或者转换为一个矢量。

参数解释

num_words:基于单词频率的保留单词的最大数量。只保留最常见的(num_word -1)个词。 filters:一个字符串,其中每个元素是将从文本中过滤掉的字符。默认是所有的标点符号,加上制表符和换行符,减去'字符。 lower:是否将文本转换为小写字母。 split:分词的分隔符。 char_level:如果为真,每个字符将被视为一个标记。 oov_token:如果给定,它将被添加到word_index中,用于替换text_to_sequence调用期间词汇表之外的单词

默认情况下,所有的标点符号都被删除,文本变成由空格分隔的单词组成的序列(单词可能包括“字符”)。然后这些序列被分割成记号列表。然后它们将被索引或向量化。