2016-10-27 1 views
0

Je peux utiliser SciPy pour classer le texte sur ma machine, mais j'ai besoin de catégoriser les objets chaîne à partir des requêtes HTTP POST à, ou près, en temps réel. Quels algorithmes devrais-je rechercher si mes objectifs sont une simultanéité élevée, une sortie quasi-en temps réel et une faible empreinte mémoire? Je me suis dit que je pourrais me débrouiller avec l'implémentation SVM (Support Vector Machine) dans Go, mais est-ce le meilleur algorithme pour mon cas d'utilisation?Le moyen le moins coûteux de classer les objets post HTTP

Répondre

1

Oui, SVM (avec un noyau linéaire) devrait être un bon point de départ. Vous pouvez utiliser scikit-learn (il enveloppe liblinear je crois) pour former votre modèle. Une fois le modèle appris, le modèle est simplement une liste de feature:weight pour chaque catégorie que vous souhaitez classer. Quelque chose comme ça (supposons que vous avez seulement 3 classes):

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 

Au moment de la prédiction, vous n'avez pas besoin scikit-learn du tout, vous pouvez utiliser la langue que vous utilisez sur le back-end serveur pour faire linéaire calcul. Supposons une requête POST spécifique contient des fonctions (Caractéristique3, Caractéristiques5), ce que vous devez faire est comme ceci:

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 

Un pas de plus: Si vous pouviez avoir un moyen de définir le poids de fonction (par exemple, en utilisant le score tf-idf de jetons), alors votre prédiction pourrait devenir:

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

Remarque feature_weight[feature k] est généralement différente pour chaque demande. Étant donné que pour chaque requête, le nombre total d'entités actives doit être beaucoup plus petit que le nombre total d'entités considérées (comptez 50 jetons ou fonctionnalités par rapport à votre vocabulaire entier de jetons 1 MM), la prédiction devrait être très rapide. Je peux imaginer une fois que votre modèle est prêt, une implémentation de la prédiction pourrait être simplement écrite sur la base d'un magasin de valeurs-clés (par exemple, redis).