2016-04-10 3 views
2

Je fais partie d'un groupe qui travaille sur un projet de cours de données volumineuses et nous avons rencontré ce que nous considérons comme un problème pour la PNL. À l'heure actuelle, nous avons des groupes de données formatées en JSON en tant que tel:Traitement du langage naturel des sujets

"wine": { 
     "category": "socializing", 
     "category_id": 31, 
     "score": 0.0, 
     "topic_id": 611 
    } 
    "dragons": { 
     "category": "lifestyle", 
     "category_id": 17, 
     "score": 0.279108277990115, 
     "topic_id": 2137 
    }, 
    "furry-fandom": { 
     "category": "lifestyle", 
     "category_id": 17, 
     "score": 0.279108277990115, 
     "topic_id": 48595 
    }, 
    "legendarycreatures": { 
     "category": "lifestyle", 
     "category_id": 17, 
     "score": 0.279108277990115, 
     "topic_id": 10523 
    } 

Les balises sont sujets associés aux informations pertinentes (catégorie, cote de popularité, et une catégorie/sujet ID #). Nous avons déjà associé des catégories pour chaque sujet depuis que l'API que nous tirons le gère. Notre problème est cependant que les catégories sont trop larges, avec seulement 33, pour identifier les tendances significatives et les sujets sont trop spécifiques w/chevauchement (par exemple dragons/légendairescreatures) et il y en a trop avec environ 22 000.

C'est là qu'intervient le PNL; nous voulons créer une sorte de super-sujet qui ne soit pas aussi large que «catégorie» mais pas aussi spécifique que les sujets actuels. Un exemple utilisant des «dragons» et des «légendes légendaires» serait de nouveau, avec d'autres, s'intégrant dans un super-sujet de «fantaisie». Un peu plus d'arrière-plan, nous utilisons Python pour saisir/traiter nos données, nous aimerions continuer à l'utiliser pour cela, et aucun d'entre nous n'a d'expérience pratique avec la PNL.

Avec cela en tête, nous aimerions avoir des suggestions et de l'aide dans ce domaine de lutte. S'il y a de meilleurs moyens ou peut-être que ce n'est pas faisable avec la PNL, nous sommes ouverts à eux. Ce que nous essayons d'éviter est de coder en dur une sorte de tableau pour la catégorisation. TL: DR: Nous essayons de catégoriser un ensemble de 22 000 sujets en «super-sujets» appropriés qui sont plus spécifiques que les actuels mais moins larges que les catégories actuelles. Nous essayons de le faire avec la PNL tout en utilisant Python mais nous ne savons pas comment s'y prendre et nous sommes également ouverts aux suggestions.

+0

Jetez un oeil à http://stackoverflow.com/a/22905260/610569 – alvas

Répondre

1

Je proposerai TextBlob, car il simplifie le processus pour former le classificateur. Voir le tutoriel here sur la façon de construire le classificateur de texte. Bien sûr, dans votre problème spécifique, vous devez savoir combien de catégories différentes vous voulez classer; vous devez ensuite vous entraîner à soumettre un ensemble de formation important (pas trop pour éviter de trop ajuster l'ensemble de données); à ce stade, votre classificateur sera prêt à obtenir de nouvelles données de type

"dragons": { 
"category": "lifestyle", 
"category_id": 17, 
"score": 0.279108277990115, 
"topic_id": 2137 
} 

et de le classifier. À ce stade, vous devez évaluer votre classification par rapport à un jeu de données de test. Ce n'est pas si évident que cela puisse paraître en passant regardant ce mini jeu de données (pourriez-vous fournir un plus gros il varech), il semble que vous avez des groupes de données comme:

premier groupe dans la catégorie lifestyle

"dragons": { 
    "category": "lifestyle", 
    "category_id": 17, 
    "score": 0.279108277990115, 
    "topic_id": 2137 
}, 
"furry-fandom": { 
    "category": "lifestyle", 
    "category_id": 17, 
    "score": 0.279108277990115, 
    "topic_id": 48595 
}, 
"legendarycreatures": { 
    "category": "lifestyle", 
    "category_id": 17, 
    "score": 0.279108277990115, 
    } 

deuxième groupe tagués socializing pour vous définir la catégorie super

"wine": { 
     "category": "socializing", 
     "category_id": 31, 
     "score": 0.0, 
     "topic_id": 611 
    } 

, vous devez dire au classificateur que des termes comme dragons et legendarycreatures être aspire au même ensemble de données, appelons cela fantasy.Donc, ce n'est pas seulement une question ou le classement, mais l'analyse de texte et sémantique ainsi: legendarycreatures =>legendary + creatures (sac de mots) a une distance au terme dragons qui est plus proche que d'autres termes, si word2vec pourrait aider ici aux vecteurs évalués de ces noms et de définir les métriques derrière eux et la distance entre eux. Une bonne implémentation est fournie par gensim.

Je mentionne word2vec car cela fonctionnera si vous avez le texte/description pour chacune de ces entrées ou non. Dans le dernier cas, vous pouvez simplement définir une métrique pour le titre de l'article comme dragons ou legendarycreatures.

[UPDATE] Donc, je suis en train de comprendre comment trouver l'algorithme de classification à droite en utilisant une nouvelle technique « qui crée et optimise automatiquement les pipelines d'apprentissage de la machine en utilisant la programmation génétique », du nom Tpot faite par @rhiever

Dans ce cas, l'outil a besoin des vecteurs de caractéristiques (à partir de word2vec) en entrée, qui doivent être fournis dans le format de jeu de données supervisé. Voici le discussion, c'est un bon point de départ.

+0

Voici les ensembles de données autre couple que j'ai: (http://txt.do/5wvo8) (http: // txt. do/5wvj6) Ce sont les plus petits que nous avons; avec d'autres atteignant près de Go en taille et beaucoup plus de variété. –

+0

ok jetons un oeil ... – loretoparisi

+0

@AustinHoller Je viens de mettre à jour ce fil avec une analyse plus approfondie, il y a un bon point de départ maintenant. – loretoparisi

1

Ceci est un problème de classification typique. Si vous voulez utiliser Python, je vous recommande d'utiliser le NaturalKit ToolKit (NLTK), en particulier le paquet nltk.classify. Une bonne introduction et un aperçu de l'utilisation de NLTK pour la classification peuvent être trouvés ici: http://www.nltk.org/book/ch06.html. Pour obtenir plus d'informations sur nltk.classify:

>>> import nltk 
>>> help(nltk.classify)