2013-08-12 11 views
10

Ich fand diese vorherige Frage zu SO: N-grams: Explanation + 2 applications. Die OP gab dieses Beispiel und fragte, ob es richtig war:Was genau ist ein n Gramm?

Sentence: "I live in NY." 

word level bigrams (2 for n): "# I', "I live", "live in", "in NY", 'NY #' 
character level bigrams (2 for n): "#I", "I#", "#l", "li", "iv", "ve", "e#", "#i", "in", "n#", "#N", "NY", "Y#" 

When you have this array of n-gram-parts, you drop the duplicate ones and add a counter for each part giving the frequency: 

word level bigrams: [1, 1, 1, 1, 1] 
character level bigrams: [2, 1, 1, ...] 

Jemand in der Antwort Abschnitt bestätigte dies richtig war, aber leider bin ich ein bisschen darüber hinaus verloren, da ich nicht ganz alles verstand anderes, das war sagte! Ich benutze LingPipe und folge einem Tutorial, das besagt, dass ich einen Wert zwischen 7 und 12 wählen sollte - aber ohne Angabe warum.

Was ist ein guter nGram-Wert und wie sollte ich ihn bei der Verwendung eines Tools wie LingPipe berücksichtigen?

Edit: Das war das Tutorial: http://cavajohn.blogspot.co.uk/2013/05/how-to-sentiment-analysis-of-tweets.html

Antwort

13

N-Gramm sind einfach alle Kombinationen von benachbarten Wörtern oder Buchstaben Länge n, die Sie in Ihrem Quelltext finden. Wenn beispielsweise das Wort fox gegeben wird, sind alle 2 Gramm (oder "Bigramme") fo und ox. Sie können auch die Wortgrenze zählen - das würde die Liste von 2 Gramm auf #f, fo, ox und x# erweitern, wobei # eine Wortgrenze bezeichnet.

Sie können das gleiche auf der Wortebene tun. Als ein Beispiel enthält der Text hello, world! die folgenden Wortrelevante Bigramme: # hello, hello world, world #.

Der grundlegende Punkt von N-Grammen ist, dass sie die Sprachstruktur vom statistischen Standpunkt aus erfassen, wie zum Beispiel welcher Buchstabe oder welches Wort dem gegebenen folgen wird. Je länger das N-Gramm (je höher der n), desto mehr Kontext, mit dem Sie arbeiten müssen. Die optimale Länge hängt von der Anwendung ab - wenn Ihre N-Gramme zu kurz sind, können Sie wichtige Unterschiede nicht erfassen. Auf der anderen Seite, wenn sie zu lang sind, können Sie das "Allgemeinwissen" nicht erfassen und nur bei bestimmten Fällen bleiben.

+0

So desto kleiner ist die Ngram, desto mehr Vergleiche und desto genauer ist die Analyse? Ich versuche zu verstehen, warum dieses Tutorial eine Zahl zwischen 7 und 12 vorgeschlagen hat. – user2649614

+0

Also, um eine Stimmungsanalyse über Tweets zu machen, wie soll ich eine Nummer wählen? Einfach nur Glück? – user2649614

+0

Ich denke, der einfachste Weg, die beste Zahl herauszufinden, ist zu experimentieren. Zum Beispiel können Sie Ihre Trainingsdaten in zwei Hälften teilen, trainieren Sie in der ersten Hälfte und verwenden Sie dann die Nummer, die Sie am besten mit der zweiten erzielt. Oder versuchen Sie Teeblätter! – zoul

1

Ein N-Gramm ist eine n-tuple oder Gruppe von n Wörtern oder Zeichen (Gramm, für Grammatikstücke), die aufeinander folgen. Also wäre ein n von 3 für die Wörter aus Ihrem Satz wie "# Ich lebe", "Ich lebe in", "lebe in NY", "in NY #". Dies wird verwendet, um einen Index darüber zu erstellen, wie oft Wörter aufeinander folgen. Sie können dies in einem Markov Chain verwenden, um etwas zu erstellen, das Sprache ähnelt. Wenn Sie eine Zuordnung der Verteilungen von Wortgruppen oder Zeichengruppen auffüllen, können Sie sie mit der Wahrscheinlichkeit rekombinieren, dass die Ausgabe nah an der natürlichen ist, je länger das N-Gramm ist.

Zu hoch von einer Zahl, und Ihre Ausgabe wird ein Wort für Word-Kopie des Originals, zu niedrig einer Nummer, und die Ausgabe wird zu chaotisch sein.

+0

Hättest du eine Empfehlung für das nGram für die Tweet-Analyse? – user2649614

+0

Meine Bestandsantwort ist, hängt von Ihren Zielen in Ihrer Analyse ab. Suchen Sie einfach nach trendigen Hash-Tags oder nach allgemeinen Wortgruppen oder einer semantischen Analyse für Wortgruppentrends? – codethulhu

+0

Entschuldigung für Verzögerung in Antwort. Ich sammle alle Tweets, die ich mit den Worten (manchester united, man united, man utd, mufc) schreiben kann und ich möchte das allgemeine Gefühl in diesen Tweets analysieren - ob positiv oder negativ. Dies ist nur eine vereinfachte Version meines Werkzeugs (ich habe eine komplexere Version in Python). Ich habe bereits einen Klassifikator erstellt, aber in meinem erstellten Klassifikator habe ich einen nGram von 7 verwendet, ohne wirklich zu verstehen, warum. Wie gesagt, ich habe nur eine Zahl zwischen 7 und 12 gewählt, wie in meinem Tutorial empfohlen. – user2649614