Ну, я обычно использую DocumentCategorizer OpenNLP для таких задач, но ядро StanfordNLP, я думаю, делает некоторые подобные вещи. Для этого OpenNLP использует Maximum Entropy, но есть много способов сделать это.
Сначала несколько мыслей о количестве уникальных ярлыков. В основном у вас есть только несколько образцов для каждого класса, и это, как правило, плохо: ваш классификатор будет давать сочные результаты независимо от того, что это такое, если вы попытаетесь сделать это так, как вы подразумеваете из-за перекрытия и/или недоустройства. Итак, вот что я делал раньше в подобной ситуации: отдельные концепции в разные тематические классификаторы, а затем собирать лучшие баллы для каждого. Например, основываясь на том, что вы написали выше, вы можете обнаружить OUTSIDE или INSIDE с одной классификационной моделью, а затем WATCHING CRICKET vs PLAYING CRICKET в другой. Затем во время выполнения вы передадите текст в оба классификатора и получите лучший удар для каждого, чтобы собрать одну категорию. Псевдокод:
DoccatModel outOrIn = new DoccatModel(modelThatDetectsOutsideOrInside);
DoccatModel cricketMode = new DoccatModel(modelThatDetectsPlayingOrWatchingCricket)
String stringToDetectClassOf = "Some dude is playing cricket outside, he sucks";
String outOrInCat = outOrIn.classify(stringToDetectClassOf);
String cricketModeCat = cricketMode .classify(stringToDetectClassOf);
String best = outOrInCat + " " + cricketModeCat ;
Вы получаете смысл, я думаю. Также некоторые другие случайные мысли: - Используйте текстовый индекс, чтобы узнать, сколько данных вы вернетесь, чтобы выяснить, как разбить категории. - Вы хотите, чтобы в нескольких сотнях примеров для каждой модели
дайте мне знать, если вы хотите, чтобы я дал вам некоторые примеры кода из OpenNLP, если вы делаете это в Java
ли все эти примеры, как это? (т. е. категории в основном «извлекаются из» или содержатся в сообщении). –
да, они извлекаются из самого текста какой-либо конкретный алгоритм для этого? –