После предварительной обработки у меня есть pandas фрейм данных, как на скриншоте.
Я хочу обучить модель нейронной сети Keras для классификации векторов в намерений .
Векторы: ЛАЗЕРНЫЕ вложения предложений и в формате numpy.ndarray
. При попытке ввести эти функции в модель, я получаю ошибки, касающиеся формы данных. Я думаю, что мне нужно работать либо с Embedded Layer , либо с input_shape , либо создать матрицу встраивания перед реализацией модели.
Поскольку у меня мало знаний о нейронных сетях Кераса, мне трудно понять, что именно я должен здесь делать. Может ли кто-нибудь показать мне, как я могу сформировать эти данные и использовать для обучения последовательной модели Keras, как в здесь ..
print(df.shape) gives (2500, 2)
print(df["vector"][0].shape) gives (1, 1024)
print(df.head(2).to_dict())
дает следующие
{'intent': {0: '__label__all_barred_account', 1: '__label__all_barred_account'}, 'vector': {0: array([[-0.00013465, 0.0042192 , -0.00137651, ..., 0.00062024,
0.01850433, 0.00674227]], dtype=float32), 1: array([[ 7.9819439e-03, -2.2082901e-04, 1.5223841e-05, ...,
1.5212121e-02, 2.4543235e-03, 2.8751865e-02]], dtype=float32)}}
Я попробовал следующее, и ошибка была - ValueError: Ошибка при проверке ввода: ожидалось, что embedding_1_input будет иметь форму (50,), но получил массив с формой (1,)
df = pd.read_csv('../data/intents/sinhala_intents.csv', names=['data'])
df[['intent', 'sentence']] = df["data"].str.split(" ", 1, expand=True)
df["sentence"] = df["sentence"].str.strip("-")
df["vector"] = df["sentence"].apply(lambda x: laser.embed_sentences(x, lang='si'))
df = df.drop(columns=['data', 'sentence'])
X = df["vector"].values
y = df['intent'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)
embedding_dim = 50
model = Sequential()
model.add(layers.Embedding(input_dim=50,
output_dim=embedding_dim,
input_length=2500))
model.add(layers.GlobalMaxPool1D())
model.add(layers.Dense(10, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
model.summary()
history = model.fit(X_train, y_train,
epochs=20,
verbose=False,
validation_data=(X_test, y_test),
batch_size=10)
loss, accuracy = model.evaluate(X_train, y_train, verbose=False)
print("Training Accuracy: {:.4f}".format(accuracy))
loss, accuracy = model.evaluate(X_test, y_test, verbose=False)
print("Testing Accuracy: {:.4f}".format(accuracy))