Loading...
墨滴

希仔

2021/04/10  阅读:20  主题:默认主题

序列化

序列化

import tensorflow as tf
from tensorflow import keras


from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

sentences = [
    'I love my dog',
    'I love my cat',
    'You love my dog!',
    'Do you think my dog is amazing?'
]

oov_token

表示对于不在词典中的单词进行编码, 编码值必须unique

tokenizer = Tokenizer(num_words = 100, oov_token="<OOV>")
tokenizer.fit_on_texts(sentences)
word_index = tokenizer.word_index
word_index
{'<OOV>': 1,
 'my': 2,
 'love': 3,
 'dog': 4,
 'i': 5,
 'you': 6,
 'cat': 7,
 'do': 8,
 'think': 9,
 'is': 10,
 'amazing': 11}

在上述例子中 词典中未出现的单词将被赋值1

序列化

根据词典将setences转换为编码值序列(array)

sequences = tokenizer.texts_to_sequences(sentences)
sequences
[[5, 3, 2, 4], [5, 3, 2, 7], [6, 3, 2, 4], [8, 6, 9, 2, 4, 10, 11]]

使每个sequence的长度一样: padding

padded = pad_sequences(sequences,maxlen = 8)
print(padded)
[[ 0  0  0  0  5  3  2  4]
 [ 0  0  0  0  5  3  2  7]
 [ 0  0  0  0  6  3  2  4]
 [ 0  8  6  9  2  4 10 11]]
  • 若需要0被加在后面:

    padded = pad_sequences(sequences,maxlen = 8,
    padding = 'post')
  • 若一些句子比maxlen长,则会有信息丢失。 控制信息丢失:

    padded = pad_sequences(sequences,maxlen = 8,padding = 'post',
    truncating = 'post')
    • 'pre': 丢前面的 (default)
    • 'post': 丢后面的

Try with words that the tokenizer wasn't fit to

 test_data = [
    'i really love my dog',
    'my dog loves my manatee'
]

test_seq = tokenizer.texts_to_sequences(test_data)
print("\nTest Sequence = ", test_seq)

padded = pad_sequences(test_seq,maxlen = 8)
print("\nPadded Test Sequence: ")
print(padded)
Test Sequence =  [[5, 1, 3, 2, 4], [2, 4, 1, 2, 1]]

Padded Test Sequence: 
[[0 0 0 5 1 3 2 4]
 [0 0 0 2 4 1 2 1]]

希仔

2021/04/10  阅读:20  主题:默认主题

作者介绍

希仔