CNN с матрицей Tf-Idf в качестве входных данных, но без встраиваемого слоя? - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь работать с наборами твитов авиакомпании, и я исследовал несколько возможностей для этого. Я видел некоторые другие учебники, в которых люди использовали матрицу подсчета (из sklearn CountVectorizer), а затем использовали CNN с довольно хорошими результатами. Тем не менее, у меня получаются лучшие результаты с базовым ANN (3 * 100 плотных слоев) с матрицей Tf-IDF в качестве входных данных (из sklearn TfidfVectorizer), поэтому я хотел бы объединить два: CNN с Tf-Idf матрица в качестве входа. Я могу сделать это так:

model = Sequential()
model.add(layers.Embedding(input_dim=input_shape[1], output_dim=200, input_length=input_shape[1]))
model.add(layers.Conv1D(128, 5, activation='relu', input_shape=(90051, 1)))
[rest of model]

но я бы хотел удалить слой для встраивания, так как не думаю, что он сильно помогает с матрицей tf-idf (может быть, это неправильно, но я хотел бы попробовать). Однако, когда я запускаю это:

model = Sequential()
model.add(layers.Conv1D(128, 5, activation='relu', input_shape=(90051, 1)))

сборка и компоновка модели работает хорошо, но при подгонке я получил следующую ошибку: ValueError: Error when checking input: expected conv1d_3_input to have 3 dimensions, but got array with shape (10248, 90051) Я попытался изменить данные, как указано в этом SO-ответе , например:

tt = np.reshape(transformed, (transformed.shape[0], transformed.shape[1], 1))
print(tt.shape)
tt = transformed
tt.shape =  (transformed.shape[0], transformed.shape[1], 1)
print(tt.shape)

но форма данных остается неизменной после изменения формы (не знаю почему).

Так может кто-нибудь, пожалуйста, указать мне, почему я делаю неправильно? Это плохая идея с самого начала, или я должен покинуть слой внедрения (результаты не так хороши), или я должен попробовать изменить форму по-другому? Большое спасибо за вашу помощь

...