Frage

Ich mag einige Anwendungen mit n-Gramm implementieren (vorzugsweise in PHP).


Welche Art von n-Gramm ist ausreichend für die meisten Zwecke? Ein Wortebene oder eine Zeichenebene n-Gramm? Wie könnte man ein n-gram-tokenizer in PHP implementiert?


Erstens würde Ich mag wissen, was N-Gramm genau ist. Ist das richtig? Es ist, wie ich verstehe, n-Gramm:

Satz: "Ich lebe in NY."

Wortebene Bigramme (2 n): „# Ich: "Ich lebe", "leben in", "in NY", 'NY #'

Zeichenebene Bigramme (2 n): "#I", "I #", "#l", "Li", "iv", "ve", "E #", "#i", „in “, "n #", "#N", "NY", "Y #"

Wenn Sie diese Anordnung von n-gram-Teile haben, fallen Sie die doppelten Einsen und fügen Sie einen Zähler für jeden Teil der Frequenz geben:

Wortebene Bigrams: [1, 1, 1, 1, 1]

Zeichenebene Bigrams: [2, 1, 1, ...]

Ist das richtig?


Darüber hinaus möchte ich mehr darüber erfahren, was man mit n-Gramm tun können:

  • Wie kann ich die Sprache eines Textes unter Verwendung von n-Gramm identifizieren?
  • Ist es möglich, maschinelle Übersetzung unter Verwendung von n-Gramm zu tun, auch wenn Sie nicht über einen zweisprachigen Korpus haben?
  • Wie kann ich einen Spam-Filter (Spam, Schinken) bauen? Kombinieren n-Gramm mit einem Bayes-Filter?
  • Wie kann ich Thema Spek tun? Zum Beispiel: Ist ein Text über Basketball oder Hunde? Mein Ansatz (gehen Sie wie folgt mit einem Wikipedia-Artikel für „Hunde“ und „Basketball“): bauen, um die n-Gramm-Vektoren für beiden Dokumente, normalisiert sie, Manhattan / euklidischen Abstand zu berechnen, je näher das Ergebnis auf 1 ist desto höher ist die Ähnlichkeit

Was denken Sie über meine Anwendung Ansätze, vor allem der letzten?


Ich hoffe, dass Sie mir helfen können. Vielen Dank im Voraus!

War es hilfreich?

Lösung

Word-n-Gramm wird in der Regel für die meisten Textanalyseanwendungen nützlicher Sie mit der möglichen Ausnahme von Spracherkennung erwähnen, wo so etwas wie Charakter trigrams könnte bessere Ergebnisse liefern. Effektiv würden Sie n-Gramm-Vektor für einen Korpus von Text in jeder Sprache, die Sie interessiert sind bei der Erkennung und dann vergleichen Sie die Frequenzen der Trigramme in jedem Korpus auf die Trigramme im Dokument, das Sie klassifizieren erstellen. Zum Beispiel erscheint die trigram the wahrscheinlich viel häufiger auf Englisch als auf Deutsch und würde ein gewisses Maß an statistischer Korrelation liefern. Sobald Sie Ihre Dokumente in n-Gramm-Format haben, haben Sie eine Auswahl von vielen Algorithmen zur weiteren Analyse, Baysian Filter, N- Nearest Neighbor, Support Vector Machines, etc ..

Von den Anwendungen, die Sie erwähnen, maschinelle Übersetzung ist wahrscheinlich das weit hergeholt, wie n-Gramm allein wird man nicht weit bringt sehr auf dem Weg. eine Eingabedatei zu einer n-Gramm-Darstellung Umwandlung ist nur ein Weg, um die Daten in ein Format zur weiteren Merkmalsanalyse zu setzen, aber wie Sie eine Menge von Kontextinformationen zu verlieren, kann es nicht für die Übersetzung nützlich sein.

Eine Sache zu achten gilt, ist, dass es nicht genug ist, einen Vektor [1,1,1,2,1] für ein Dokument und ein Vektor [2,1,2,4] für ein anderes Dokument erstellen , wenn die Dimensionen nicht übereinstimmen. Das heißt, dass der erste Eintrag in dem Vektor nicht in einem Dokument und the in einem anderen oder die Algorithmen nicht funktionieren is werden. Sie werden aufzuwickeln mit Vektoren wie [0,0,0,0,1,1,0,0,2,0,0,1], da die meisten Dokumente werden nicht die meisten n-Gramm enthalten, die Sie interessieren. Diese ‚Futter up‘von Funktionen ist wichtig, und es erfordert, dass Sie die Zukunft‚im Voraus‘, was ngrams werden Sie in Ihrer Analyse werden inklusive. Oft wird dies als zwei Pass-Algorithmus implementiert, um zunächst die statistische Signifikanz der verschiedenen n-Gramm zu entscheiden, zu entscheiden, was zu halten. Google 'Featureauswahl' für weitere Informationen.

Word-basiertes n-Gramm plus Support Vector Machines in hervorragender Weise Thema Spek auszuführen, aber Sie brauchen einen großen Textkorpus vorge klassifizierte in ‚zum Thema‘ und ‚off topic‘ den Klassifikator zu trainieren. Sie werden eine große Anzahl von Forschungsarbeiten erläutern verschiedene Ansätze für dieses Problem auf einer Website wie CiteSeerX finden . Ich würde die euklidische Distanz Ansatz für dieses Problem nicht empfehlen, da es nicht einzelne n-Gramm ist bezogen auf eine statistische Signifikanz, so dass zwei Dokumente, die beide gehören the, a, is und of wäre ein besseres Spiel als zwei Dokumente in Betracht gezogen werden, dass beide enthalten Baysian. Entfernen von Stopp-Worten aus dem n-Gramm Interesse verbessern würde dies etwas.

Andere Tipps

Sie sind richtig über die Definition von n-Gramm.

Sie können Wortebene n-Gramm für Suchtyp-Anwendungen verwenden. Zeichenebene n-Gramm kann mehr für die Analyse der sich Text verwendet werden. Um zum Beispiel der Sprache eines Textes zu identifizieren, würde ich die Frequenzen der Buchstaben verwenden, wie die etablierten Frequenzen der Sprache verglichen. Das heißt, etwa der Text die Häufigkeit des Auftretens von Buchstaben in dieser Sprache entsprechen soll.

Ein n-Gramm tokenizer für Wörter in PHP getan werden kann strtok mit:

http://us2.php.net/manual/en/function .strtok.php

Für Zeichen Split verwenden:

http://us2.php.net/manual/en /function.str-split.php

Dann können Sie spalten nur das Array, wie Sie auf eine beliebige Anzahl von n-Gramm möchten.

Bayes-Filter müssen für die Verwendung als Spam-Filter ausgebildet werden, die in Kombination mit n-Gramm verwendet werden kann. Allerdings müssen Sie es viel Eingang geben, um es zu lernen.

Ihr letzter Ansatz klingt anständig bis den Kontext einer Seite zu lernen ... dies jedoch immer noch ziemlich schwer zu tun, aber n-Gramm klingt wie ein guter Ausgangspunkt für so tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top