Как вставлять только самые частые слова - PullRequest
0 голосов
/ 02 мая 2019

Я хочу реализовать вложение word2vec для 100 (или X) большинства используемых слов.

Здесь я кодирую текст в целые числа:

vocab_size = 100

data = nltk.sent_tokenize(train_text)

tokenizer = Tokenizer()
tokenizer.num_words = vocab_size
tokenizer.fit_on_texts(data)
tokenizer.oov_token = "UNK"

encoded = tokenizer.texts_to_sequences(data)

Одна проблема состоит в том, что приведенный выше код просто хранит наиболее часто используемые слова каждого предложения в закодированном векторе и отбрасывает остальные:

[1, 1, 5, 2, 15, 10, 5, 6, 28, 7, 13]
['s s in the that is in to be a with']

В то время как полное предложение:

<s>although destroyed in 1910 , the 1771 mansion that is depicted in old photographs appears to be a georgian-style brick dwelling with gambrel-roofed brick wings .</s>

Я хотел бы использовать «UNK» для слов, которые не входят в число наиболее часто встречающихся слов, и соответствующее целое число в закодированном векторе.

Моя главная проблема для встраивания детали:

embedding_matrix = np.zeros((vocab_size, 50))
for word, i in tokenizer.word_index.items():
    embedding_vector = embeddings_index.get(word)
    if embedding_vector is not None:
        embedding_matrix[i] = embedding_vector

Здесь я просто хочу использовать закодированные целые числа, а не индекс каждого слова, чтобы я мог сохранить размер vocab_size таким же, как 100

Не могли бы вы рассказать мне об одной или двух проблемах, описанных выше?

...