Как создать независимую (X) переменную, используя Word2ve c? - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть набор данных проверки mov ie, который имеет два столбца Review (Sentences) и Sentiment (1 или 0).

Я хочу создать модель классификации, используя word2ve c для встраивания и CNN для классификации.

Я искал учебники на YouTube, но все, что они делают, это создают векторы для каждого слова и показывают мне похожие слова. Как это -

model= gensim.models.Word2Vec(cleaned_dataset, min_count = 2,  size = 100, window = 5)     
words= model.wv.vocab
simalar= model.wv.most_similar("bad")

У меня уже есть моя зависимая переменная (y), которая является моим столбцом «Чувство», все, что мне нужно, - это независимая переменная (X), которую я могу передать своей модели CNN.

Перед использованием word2ve c я использовал модель Bag Of Words (BOW), которая генерировала разреженную матрицу, которая была моей независимой (X) переменной. Как мне добиться чего-то подобного, используя word2ve c?

Пожалуйста, поправьте меня, если я делаю что-то не так.

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Чтобы получить слово вектор, вы должны сделать это:

model['word_that_you_want'] 

Вы также можете обработать KeyError, который может возникнуть, если вы не найдете данное слово в вашей модели. Вы также можете прочитать о том, что такое embedding layer, которое обычно используется в качестве первого уровня нейронной сети (для NLP в целом) и в основном представляет собой поиск соответствия слова соответствующему вектору слова.

Чтобы получить векторы слов для всего предложения, вам нужно сначала инициализировать массив нулей numpy в соответствии с размерами, которые вы хотите.

Вам могут потребоваться другие переменные, такие как длина самого длинного предложения, чтобы что вы можете дополнить все предложения до этой длины. Документация по методу pad_sequences для Keras здесь .

Простой пример получения предложения векторов слов:

import numpy as np

embedding_matrix = np.zeros((vocab_len, size_of_your_word_vector))

Тогда Выполните итерацию по индексу embedding_matrix и добавьте к нему, если вы найдете слово vector в вашей модели.

Я использую этот ресурс , в котором есть много примеров, и я сослался на него часть кода там (который я тоже иногда использовал сам):

embedding_matrix = np.zeros((vocab_length, 100))
for word, index in word_tokenizer.word_index.items():
    embedding_vector = model[word] # using your w2v model, KeyError possible
    if embedding_vector is not None:
        embedding_matrix[index] = embedding_vector

И в вашей модели (я предполагаю, что Tensorflow с Keras)

embedding_layer = Embedding(vocab_length, 100, weights=[embedding_matrix], input_length=length_long_sentence, trainable=False)

Надеюсь, это поможет .

0 голосов
/ 09 февраля 2020

Word2Vec по сути не создает векторы для текста (набора слов) - только отдельные слова.

Но иногда не очень плохой вектор для многословного текста является средним для всех его слов-векторов.

Если list_of_words - это список слов в вашем тексте, а все слова в модели Word2Vec, простой способ получить среднее значение векторов этих слов:

avg_vector_of_words = model.wv[list_of_words].mean(axis=0)

(Если некоторых слов нет, вам нужно отфильтровать их, прежде чем пытаться это сделать, чтобы избежать KeyError s. Если вы хотите пропустить некоторые слова, или использовать словосочетания с нормированной единицей, или нормализовать единицу конечного вектора, вам понадобится больше кода.)

Тогда avg_vector_of_words - это небольшой, плотный / встроенный векторный элемент для текста list_of-words.

You может передать эти векторы, по одному на текст, в другой нижестоящий классификатор, такой как ваш CNN, точно так же, как вы ранее использовали редкие векторы BOW.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...