2016-04-10 19 views
2

Ich bin Teil einer Gruppe, die an einem Big-Data-Kurs-Projekt arbeitet, und wir sind in das geraten, was wir als ein Problem für NLP sehen. Derzeit haben wir Gruppen von in JSON als solche formatiert Daten:Natural Language Verarbeitung von Themen

"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 
    } 

Die Tags werden Themen mit relevanten Informationen verbunden sind (eine Kategorie, die Popularität der Gäste, und eine Kategorie/Thema ID #). Wir haben Kategorien für jedes Thema bereits zugeordnet, seit die API, aus der wir ziehen, sie handhabt. Unser Problem ist jedoch, dass die Kategorien mit 33 nur zu breit sind, um irgendwelche bedeutungsvollen Trends zu identifizieren, und die Themen sind zu spezifisch mit Überlappungen (z. B. Drachen/legendäre Kreaturen) und es gibt zu viele mit ungefähr 22.000.

Hier kommt NLP ins Spiel; Wir wollen eine Art von Super-Themen erstellen, die nicht so breit wie "Kategorie" sind, aber nicht so spezifisch wie die aktuellen Themen. Ein Beispiel, das "Drachen" und "Legandarkreaturen" wieder verwendet, würde sowohl zusammen mit anderen in ein Superthema von "Fantasie" passen.

Ein wenig mehr Hintergrund, wir verwenden Python, um unsere Daten zu erfassen/zu verarbeiten, wir möchten es weiterhin dafür verwenden, und keiner von uns hat praktische Erfahrungen mit NLP.

In diesem Sinne würden wir gerne einige Vorschläge und Hilfe in diesem Bereich des Kampfes haben. Wenn es bessere Wege gibt oder vielleicht mit NLP nicht machbar ist, sind wir offen für sie. Was wir versuchen zu vermeiden, ist jedoch eine Art Tabelle zur Kategorisierung.

TL; DR: Wir versuchen, eine Menge von 22.000 Themen zu geeigneten "Super-Themen" zu kategorisieren, die spezifischer sind als die aktuellen, aber weniger breit als die aktuellen Kategorien. Wir versuchen dies mit NLP zu tun, während wir Python benutzen, wissen aber nicht, wie wir vorgehen sollen und sind auch offen für Vorschläge.

+0

einen Blick auf http://stackoverflow.com/a/22905260/610569 Nehmen – alvas

Antwort

1

Ich werde TextBlob vorschlagen, da es den Prozess vereinfacht den Klassifikator zu trainieren. Weitere Informationen zum Erstellen des Textklassifikators finden Sie im Lernprogramm here. In Ihrem speziellen Problem müssen Sie natürlich herausfinden, wie viele verschiedene Kategorien Sie klassifizieren möchten. Sie müssen dann das Einreichen eines signifikanten Trainingssatzes trainieren (nicht zu viel, um eine Überanpassung des Datensatzes zu vermeiden); An diesem Punkt ist Ihr Klassifikator bereit, neue Daten vom Typ

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

zu erhalten und zu klassifizieren. An diesem Punkt müssen Sie Ihre Klassifizierung anhand eines Testdatensatzes auswerten. Das ist nicht so offensichtlich, wie es durch die Art und Weise scheint bei diesem Mini-Datensatz suchen (könnte auf einen Blick ein größeres bieten würde es Seetang), so scheint es, dass Sie einige Cluster von Daten wie haben:

ersten Cluster als lifestyle getaggt

"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, 
    } 

zweiten Cluster markiert socializing

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

Sie Super Kategorie zu definieren, müssen Sie den Klassifikator sagen, dass Begriffe wie dragons und legendarycreatures sein sehnt sich nach dem gleichen Datensatz, nennen wir das fantasy.Dies ist also nicht nur eine Sache oder Klassifizierung, sondern auch Textanalyse und Semantik: legendarycreatures =>legendary + creatures (Tasche von Wörtern) hat eine Distanz zum Begriff dragons, die näher als andere Wörter ist, so dass Word2Vec hier helfen könnte um Vektoren dieser Namen zu bewerten und um die Metriken dahinter und den Abstand zwischen ihnen zu definieren. Eine gute Implementierung wird von gensim bereitgestellt.

Ich erwähne word2vec da es funktioniert, wenn Sie den Text/die Beschreibung für jeden dieser Einträge haben oder nicht. Im letzten Fall können Sie einfach eine Metrik für den Titel des Elements wie dragons oder legendarycreatures definieren.

[UPDATE] Also, ich versuche, herauszufinden, wie man den richtigen Klassifikationsalgorithmus finden eine ganz neue Technik „die automatisch erstellt und maschinelles Lernen optimiert Pipeline mit genetischer Programmierung“, benannt Tpot von @rhiever gemacht

In diesem Fall benötigt das Werkzeug die Merkmalsvektoren (aus word2vec) als Eingabe, die im Format des überwachten Datensatzes bereitgestellt werden müssen. Hier ist die discussion, das ist ein guter Ausgangspunkt.

+0

Hier sind paar verschiedene Datensätze Ich habe: (http://txt.do/5wvo8) (http: // txt. do/5wvj6) Dies sind die kleinsten, die wir haben; mit anderen erreicht GB in Größe und viel mehr Vielfalt. –

+0

ok mal schauen ... – loretoparisi

+0

@AustinHoller Ich habe gerade diesen Thread mit weiterer Analyse aktualisiert, es gibt jetzt einen guten Ausgangspunkt. – loretoparisi

1

Dies ist ein typisches Klassifizierungsproblem. Wenn Sie Python verwenden möchten, würde ich Ihnen empfehlen, das Natural Language ToolKit (NLTK) zu verwenden, insbesondere das nltk.classify-Paket. Eine gute Einführung und einen Überblick über die Verwendung von NLTK für die Klassifizierung finden Sie hier: http://www.nltk.org/book/ch06.html. Um weitere Informationen zu erhalten nltk.classify:

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