2016-10-27 2 views
0

Я могу использовать SciPy для классификации текста на моей машине, но мне нужно классифицировать строковые объекты из HTTP POST-запросов в или в ближайшем, реальном времени. Какие алгоритмы следует исследовать, если мои цели - высокий уровень параллелизма, близкий к выходу в реальном времени и небольшой объем памяти? Я решил, что смогу обойтись с поддержкой поддержки векторной машины (SVM) в Go, но это лучший алгоритм для моего использования?Самый дешевый способ классификации объектов HTTP post

ответ

1

Да, SVM (с линейным ядром) должна быть хорошей отправной точкой. Вы можете использовать scikit-learn (он обертывает liblinear, я считаю), чтобы обучить вашу модель. После изучения модели модель представляет собой просто список feature:weight для каждой категории, которую вы хотите классифицировать. Что-то вроде этого (предположим, у вас есть только 3 классы):

class1[feature1] = weight11 
class1[feature2] = weight12 
... 
class1[featurek] = weight1k ------- for class 1 

... different <feature, weight> ------ for class 2 
... different <feature, weight> ------ for class 3 , etc 

Во время предсказания, вам не нужно scikit учиться на всех, вы можете использовать любой язык, который вы используете на внутреннем интерфейсе сервера, чтобы сделать линейную вычисление. Предположим, что конкретный запрос POST содержит функции (feature3, feature5), что вам нужно сделать, это так:

linear_score[class1] = 0 
linear_score[class1] += lookup weight of feature3 in class1 
linear_score[class1] += lookup weight of feature5 in class1 

linear_score[class2] = 0 
linear_score[class2] += lookup weight of feature3 in class2 
linear_score[class2] += lookup weight of feature5 in class2 

..... same thing for class3 
pick class1, or class2 or class3 whichever has the highest linear_score 

Один шаг: Если бы вы могли иметь какой-то способ, чтобы определить вес объекта (например, с использованием тс-IDF счет лексем), то ваш прогноз может стать:

linear_score[class1] += class1[feature3] x feature_weight[feature3] 
so on and so forth. 

Примечание feature_weight[feature k], как правило, различны для каждого запроса. Поскольку для каждого запроса общее количество активных объектов должно быть намного меньше, чем общее количество рассмотренных объектов (рассмотрите 50 токенов или функций против всего словаря из 1 ММ токенов), предсказание должно быть очень быстрым. Я могу представить, что, как только ваша модель будет готова, реализация предсказания может быть просто записана на основе хранилища значений ключа (например, redis).

Смежные вопросы