Keras 序列数据预处理

一个原本的序列化数据为:

1
I want to learning NLP

Tokenize化

首先将原本我们可以认识的句子,进行向量化。由于这里只有一句话,所以向量化起来非常的简单,即:

1
[1, 2, 3, 4, 5]

1代表当前单词的位置。

具体使用模板:

1
2
3
tokenizer = Tokenizer()
tokenizer.fit_on_texts(text)
tokenizer.texts_to_sequences(text)
  • 这里fit_on_texts会按照词频来对字典进行排序
  • texts_to_sequences是在构建好词典后,将输入进行向量化

一个实例:

1
2
3
4
x = ['I want to learning NLP to go to the BAT', 'I must be a good boy']
tokenizer = Tokenizer()
tokenizer.fit_on_texts(x)
x = tokenizer.texts_to_sequences(x)

结果x输出为:

1
[[2, 3, 1, 4, 5, 1, 6, 1, 7, 8], [2, 9, 10, 11, 12, 13]]

pad_sequences

在将句子转化成向量以后,我们还需要将所有的数据长度处理一致,这里用的就是pad_sequences

具体使用的模板是:

1
text = pad_sequences(text, maxlen)

接上面的一个实例是:

1
x = pad_sequences(x, maxlen=7)

此时x输出是:

1
2
array([[ 4,  5,  1,  6,  1,  7,  8],
[ 0, 2, 9, 10, 11, 12, 13]], dtype=int32)

和上面例子进行对比,我们发现,它是进行了补齐和删减前面位置的元素。

处理成one-hot

使用tokenizer的方法texts_to_matrix可以直接将一个原生的句子处理成一个one-hot。

一个例子:

1
2
x = ['I want to learning NLP to go to the BAT', 'I must be a good boy']
x = tokenizer.texts_to_matrix(x, mode='binary')

得到的结果是:

1
2
array([[0., 1., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1.]])

每个1代表的是在词表中的位置