Я понимаю, что вы хотите извлечь вложение для каждого слова, но я думаю, что реальный вопрос заключается в следующем: что выводит токенизатор.
Кроме того, этот токенизатор немного беспорядок , Вы увидите, что я имею в виду ниже.
Поскольку токенизатор будет фильтровать слова (предполагая нетривиальный словарь), я не хочу предполагать, что слова хранятся в том порядке, в котором они находятся , Поэтому здесь я программно определяю словарь, используя word_index
. Затем я явно проверяю, какие слова маркируются после фильтрации для наиболее часто используемых слов. (Word_index запоминает все слов; т.е. предварительно отфильтрованные значения.)
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
corpus = 'I like turtles'
num_words = len(corpus.split())
oov = 'OOV'
tokenizer = Tokenizer(num_words=num_words + 2, oov_token=oov)
tokenizer.fit_on_texts(corpus.split())
print(f'word_index: {tokenizer.word_index}')
print(f'vocabulary: {tokenizer.word_index.keys()}')
text = [key for key in tokenizer.word_index.keys()]
print(f'keys: {text}: {tokenizer.texts_to_sequences(text)}')
text = 'I like turtles'.split()
print(f'{text}: {tokenizer.texts_to_sequences(text)}')
text = 'I like marshmallows'.split()
print(f'{text}: {tokenizer.texts_to_sequences(text)}')
Это приводит к следующему выводу:
word_index: {'OOV': 1, 'i': 2, 'like': 3, 'turtles': 4}
vocabulary: dict_keys(['OOV', 'i', 'like', 'turtles'])
keys: ['OOV', 'i', 'like', 'turtles']: [[1], [2], [3], [4]]
['I', 'like', 'turtles']: [[2], [3], [4]]
['I', 'like', 'marshmallows']: [[2], [3], [1]]
Однако, если вы укажете oov_token результат выглядит следующим образом:
{'OOV': 1, 'i': 2, 'like': 3, 'turtles': 4}
Обратите внимание, как я должен был указать num_words=num_words + 2
вместо ожидаемого «+1». Это потому, что мы явно определяем токен OOV, который добавляется в словарь, что немного глупо.
Если вы задаете токен OOV и устанавливаете num_words=num_words + 1
(как задокументировано), тогда ' Я люблю черепах »получает ту же кодировку, что и« Я люблю зефир ». Также орехи.
Надеюсь, теперь вам нужны инструменты, чтобы узнать, что токенизатор подает в слой кодирования. Тогда, надеюсь, будет несложно сопоставить токены с их вложениями.
Пожалуйста, дайте нам знать, что вы найдете. :)
(Подробнее о безумии читайте это сообщение StackOverflow.)