Я пытаюсь получить практический опыт работы с ML и узнаю, как обучить модель, способную предсказать пол по имени.
Я векторизовал имена (использовал три разных способа сделать это)и передать их в качестве входных данных для модели, но сколько бы я ни играл с ней, я могу только добиться того, чтобы модель была настолько точной (около 70% макс.).
На данный момент, с 32K именами в моем корпусе,Я в значительной степени истощил свои источники дополнительных имен (и, в конце концов, если я буду продолжать гоняться за дополнительными именами, мой словарь в какой-то момент станет достаточно большим, чтобы в любом случае не нуждаться в ИИ).
Поэтому я подумал, чтоЯ мог бы «помочь» моей сети, дав ей подсказки об именах, чтобы помочь ей повысить уровень точности.
Если я правильно понимаю функции, я мог бы использовать их, чтобы помочь модели повысить точность, придав ей дополнительные характеристики, которыепомогите предсказать класс с более высокой точностью.
Например, эти:
<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
с данными, но как мне передать его в модель?