Как передать функции модели Keras?
Я пытаюсь получить практический опыт работы с ML и научиться обучать модели, способной предсказывать пол по имени.
Я векторизую имена (использовал три разных способа сделать это) и передаю их в качестве входных данных для модели, но, как бы я ни играл с ними, я могу только добиться того, чтобы модель была настолько точной (макс. Около 70%).
На данный момент, с 32K именами в моем корпусе, я в значительной степени истощил свои источники дополнительных имен (и, в конце концов, если я буду продолжать гоняться за дополнительными именами, мой словарь в какой-то момент станет достаточно большим, чтобы в любом случае не нуждаться в AI),
Поэтому я подумал, что смогу "помочь" своей сети, дав ей подсказки об именах, чтобы повысить уровень точности.
Если я правильно понимаю функции, я мог бы использовать их, чтобы помочь модели повысить точность, придав ей дополнительные характеристики, которые помогут прогнозировать класс с более высокой точностью.
Например эти:
<QuerySet [{'gender': 'Female', 'ends_with_a': 8089}, {'gender': 'Male', 'ends_with_a': 677}]>,
<QuerySet [{'gender': 'Female', 'ends_with_na': 1710}, {'gender': 'Male', 'ends_with_na': 93}]>
Имена, заканчивающиеся на a
чаще принадлежат женщинам. И так далее. Я не мог найти инструменты, которые автоматически синтезировали бы особенности из слов, поэтому я думаю, что мне пришлось бы придумать и извлечь их сам, как этот момент.
Чего я не понимаю, так это как передать эти функции в модель без того, чтобы модель запрашивала эти функции, когда я прошу ее предсказать класс для меня.
После того, как я подготовил свои данные, это фрейм панд:
gender gender_count name vectorized indexised nlp_vectorized
20908 1 5 jasmely [0, ..] [9, ...] [0.44732133, 0.5620067 ...]
Я использую векторизованные входы в модель для обучения:
X = names_frame["vectorized"].values
X = np.array([np.array(l) for l in X])
Y = names_frame["gender"].values
model = Sequential()
model.add(Dense(16, input_dim=26, activation='sigmoid'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=40, batch_size=500, validation_split=.2, callbacks=[PlotLossesKeras()], verbose=False)
Я могу добавить функции в мой dataframe
с данными, но как я могу кормить его к модели?