2017-02-03 4 views
0

У меня есть некоторые данные пользователей чата и классифицированы по различным категориям, проблема есть много алгоритмов генерироваться категорий, см пример ниже:NLP & ML Text Extraction

Message | Category 
I want to play cricket | Play cricket 
I wish to watch cricket | Watch cricket 
I want to play cricket outside | Play cricket outside 

Как вы можете видеть Категории (по существу, фразы) извлекаются из самого текста, на основе моих данных - 10 000 сообщений с приблизительно 4,500 уникальными категориями. Есть ли подходящий алгоритм, который может дать мне хорошую точность предсказания в таких случаях.

+0

ли все эти примеры, как это? (т. е. категории в основном «извлекаются из» или содержатся в сообщении). –

+0

да, они извлекаются из самого текста какой-либо конкретный алгоритм для этого? –

ответ

1

Ну, я обычно использую 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