keras pad_sequence для строкового типа данных
У меня есть список предложений. Я хочу добавить отступы к ним; но когда я использую keras pad_sequence, как это:
from keras.preprocessing.sequence import pad_sequences
s = [["this", "is", "a", "book"], ["this", "is", "not"]]
g = pad_sequences(s, dtype='str', maxlen=10, value='_PAD_')
результат:
array([['_', '_', '_', '_', '_', '_', 't', 'i', 'a', 'b'],
['_', '_', '_', '_', '_', '_', '_', 't', 'i', 'n']], dtype='<U1')
Почему это не работает должным образом?
Я хочу использовать этот результат в качестве входных данных для вложения ELMO, и мне нужны строковые предложения, а не целочисленное кодирование.
1 ответ
+ Изменить dtype
к object
, Он сделает всю работу за вас.
from keras.preprocessing.sequence import pad_sequences
s = [["this", "is", "a", "book"], ["this", "is", "not"]]
g = pad_sequences(s, dtype=object, maxlen=10, value='_PAD_')
print(g)
Выход:
array([['_PAD_', '_PAD_', '_PAD_', '_PAD_', '_PAD_', '_PAD_', 'this',
'is', 'a', 'book'],
['_PAD_', '_PAD_', '_PAD_', '_PAD_', '_PAD_', '_PAD_', '_PAD_',
'this', 'is', 'not']], dtype=object)
Текст должен быть сначала преобразован в числовые значения. Keras предоставляет токенизатор и два метода fit_on_texts и text_to_sequence для работы с текстовыми данными.
См. Эту документацию keras здесь
Токенизатор: это помогает векторизовать корпус текста, превращая каждый текст в последовательность целых чисел (каждое целое число является индексом токена в словаре) или в вектор, в котором коэффициент для каждого токена может быть двоичным на основе слова подсчитывать
fit_on_texts: это создает словарный индекс, который основан на частоте слова.
text_to_sequence: преобразует каждый текст в текстах в последовательность целых чисел.
from keras.preprocessing import text, sequence
s = ["this", "is", "a", "book", "of my choice"]
tokenizer = text.Tokenizer(num_words=100,lower=True)
tokenizer.fit_on_texts(s)
seq_token = tokenizer.texts_to_sequences(s)
g = sequence.pad_sequences(seq_token, maxlen=10)
g
Выход
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 2],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 3],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 4],
[0, 0, 0, 0, 0, 0, 0, 5, 6, 7]], dtype=int32)