Классификация текста с использованием быстрого текста - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть набор текстов (один текст - несколько предложений) и присвоенные им метки [1,0]. Мне нужно построить классификатор CNN с помощью fasttexts (я использую модель cc .300.bin) для преобразования предложений в векторы. Проблема в том, что мой ввод выглядит следующим образом:

First text
[[0.3, 1.4, 0.7., -1 ....], 
[0.3, 1.4, 0.7., -1 ....], 
[0.3, 1.4, 0.7., -1 ....] ,..... ]
Second text
[[0.3, 1.4, 0.7., -1 ....], 
[0.3, 1.4, 0.7., -1 ....], 
[0.3, 1.4, 0.7., -1 ....] ,..... ]

В этой форме CNN не хочет, чтобы я брал его, потому что у меня есть 3 измерения, и он хочет 2 (и так должно быть). Кто-нибудь знает, как его преобразовать?

Мой код:

import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
from tok import elo
import numpy as np

X, y = get_date()
#print(np.shape(X))
text_train, text_test, y_train, y_test = train_test_split(X,y, test_size=0.1)
print(type(text_train))
text_train = pad_sequences(text_train, maxlen=8)                                                                          text_test = pad_sequences(text_test, maxlen=8)                                                                            #print(text_train[0][0][0])

model = models.Sequential()
model.add(layers.Embedding(1000, 300, input_length=8))
model.add(layers.Dropout(0.2))
model.add(layers.Conv1D(250, 3, padding='valid', activation='relu'))
model.add(layers.GlobalMaxPooling1D())
model.add(layers.Dense(1, activation='relu'))
model.add(layers.Activation('sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x = text_train, y=y_train, epochs=10,  validation_data =(text_test, y_test))
model.save('first_model.h5')
...