Я работаю с классификациями коротких текстовых фрагментов (1-3 предложения). По темам набор данных содержит тексты о растениях, животных и других материалах. Во-первых, я использую классификатор (линейный SVM), чтобы пометить категорию каждого фрагмента (svm_gen: 0 - не связано, 1 - растения, 2 - животные). Работает без проблем.
Теперь у каждой категории есть подкатегории, которые я также хотел бы классифицировать с собственным алгоритмом для каждой. Скажем, для растений (svm_plant: 0 - другое, 1 - свиноматка, 2 - выращивать, 3 - урожай) и для животных (svm_animal: 0 - другое, 1 - кормить, 2 - домашнее животное, 3 - играть). Как можно выборочно применить соответствующие конвейеры к предварительно классифицированным переменным, не разбивая и не добавляя снова набор данных?
Как уже было сказано, я могу разделить набор данных на основе предварительной классификации, применить второй раунд классификаторов к новым панелям данных и затем добавить их обратно вместе. Есть ли лучший способ?
svm_gen = Pipeline([( ... )])
svm_gen.fit()
df_complete['Topic'] = svm_gen.predict(df_complete['Text'])
# write all texts concerning animals into a new df to apply the respective SVM
df_plant = df_complete[df_complete.Topic == 1]
# same for animals
# categories both individually for the sub-categories
# glue them back together
df_final = df_plant.append(df_animals, ingnore_index = True)
В принципе, я хотел бы иметь окончательный набор данных (pandas dataframe), содержащий столбец «Текст», столбец «Тема», а затем столбец «подтема». Последний был классифицирован выборочно на основе того, к какой категории относится текст в первом раунде классификации. Примерно так:
df_complete.loc[df_complete['Topic'] == 1, 'sub_Topic'] = svm_plant.predict['Text']
df_complete.loc[df_complete['Topic'] == 2, 'sub_Topic'] = svm_animals.predict['Text']
df_complete.loc[df_complete['Topic'] == 0, 'sub_Topic'] = 'n/a'