Frage

Markov-Ketten sind eine (fast Standard) Art und Weise zu erzeugen zufällig Kauderwelsch , die ungeübte Auge intelligente aussieht. Wie würden Sie markov erzeugte Text aus menschlichem geschriebenem Text gehen zu identifizieren.

Es wäre fantastisch, wenn die Ressourcen, die Sie verweisen auf sind Python freundlich.

War es hilfreich?

Lösung

Sie könnten eine „Brute-Force“ -Ansatz verwenden, wobei man die erzeugte Sprache gesammelten Daten auf n-Gramm höherer Ordnung als das Markov-Modell zu vergleichen, dass es erzeugt wird.

d. Wenn die Sprache mit einem 2. Ordnung Markov-Modell generiert wurde, bis zu 3-Gramm werden die richtigen Frequenzen haben, aber 4-Gramm wahrscheinlich nicht.

Sie können bis zu 5-Gramm-Frequenzen aus dem Google-Öffentlichkeit bekommen n-gram-Datensatz es obwohl riesig - 24G Druck - Sie können es per Post auf DVDs von LDC .

EDIT: Hinzugefügt einige Implementierungsdetails

Die n-Gramm wurden bereits gezählt worden, so dass Sie nur die Zählungen müssen speichern (oder Frequenzen) in einer Weise, die die Suche schnell ist. Eine korrekt indiziert Datenbank, oder vielleicht ein Lucene Index funktionieren soll.

ein Stück Text, Scan über sie gegeben und die Frequenz jedes 5-Gramm in Ihrer Datenbank nachzuschlagen, und sehen, wo sie mit anderen 5-Gramm im Vergleich Ränge, die mit den gleichen vier Worten beginnen.

Praktisch ein größeres Hindernis könnten die Lizenzbedingungen des Datensatzes sein. könnte es für eine kommerzielle App verboten.

Andere Tipps

Ein einfacher Ansatz wäre eine große Gruppe zu haben, von Menschen Eingabetext für Sie lesen und sehen, ob der Text Sinn macht. Ich bin nur halb im Scherz, das ist ein heikles Problem.

Ich glaube, dass dies ein schwieriges Problem sein, weil Markov-Kette erzeugt Text wird eine Menge von den gleichen Eigenschaften des realen menschlichen Text haben, in Bezug auf die Worthäufigkeit und einfache Beziehungen zwischen der Ordnung von Wörtern.

Die Unterschiede zwischen realem Text und Text von einer Markov-Kette erzeugt werden, in höherer Ebene Regeln der Grammatik und in semantischer Bedeutung, die programmatisch zu kodieren sind hart. Das andere Problem ist, dass Markov-Ketten sind gut genug, um zu erzeugenden Text, dass sie manchmal mit grammatisch und semantisch korrekten Aussagen kommen.

Als Beispiel ist hier ein Aphorismus von der kantmachine :

  

Heute würde er überzeugt fühlen, dass   der menschliche Wille ist frei; Morgen,   unter Berücksichtigung der unauflöslichen Kette   Natur, würde er auf die Freiheit als ein schauen   bloße Illusion und declare Natur zu sein   All-in-all.

Während diese Zeichenfolge durch ein Computerprogramm geschrieben wurden, ist es schwer zu sagen, dass ein Mensch würde das nie sagen.

Ich glaube, dass, wenn Sie uns weitere spezifische Details über den Computer und Mensch-generierten Text geben können, dass die offensichtlichen Unterschiede aussetzen es schwierig sein wird, diese mit Computer-Programmierung zu lösen.

Ich schlage vor, eine Verallgemeinerung von Evan Antwort: ein Markov-Modell der eigenen machen und trainieren sie mit einem großen Teil des (sehr groß) Proben Sie sind gegeben, um den Rest der Probe als „Testdaten“ zu reservieren. Nun sehen, wie gut das Modell, das Sie trainiert haben funktioniert auf die Testdaten, z.B. mit einem Chi-Quadrat-Test, die Situation vorschlagen wird, in der „fit ist zu gut“ (die Testdaten darauf hindeutet, in der Tat dieses Modell erzeugt wird) sowie solche, bei denen die Passform ist sehr schlecht (was darauf hindeutet, Fehler in Modellstruktur - ein über -trained Modell mit der falschen Struktur hat eine notorisch schlechte Arbeit in solchen Fällen).

Natürlich gibt es noch viele Fragen zur Kalibrierung sind, wie die Struktur des Modells - sind zu ahnen Sie ein einfaches Modell, das auf Ntuples von Worten und wenig mehr, oder ein anspruchsvolleres eines mit Grammatik Zuständen und dergleichen. Zum Glück kann man die Dinge kalibrieren ziemlich gut durch große Korpora bekannt sein, natürliche Text mit und auch diejenigen, die Sie sich mit den Modellen verschiedener Strukturen erzeugen.

Ein anderer Ansatz ist die Verwendung nltk die Sätze analysieren Sie sind gegeben - eine kleine Anzahl von mis-Parsen ist auch in natürlichem Text zu erwarten (wie Menschen unvollkommen sind und so ist der Parser - es dieses Wort X nicht wissen kann als verb verwendet werden kann und es nur als Substantiv zu klassifizieren, etc, etc), aber die meisten Markov-Modelle (es sei denn, sie im wesentlichen die gleiche Grammatik Struktur Ihre Parser passiert sind Modellierung zu verwenden - und Sie können mehrere Parser verwenden, um zu versuchen und entgegenwirken, dass -!) wird in beträchtlichem Ausmaß mis-Parsen als auch Legastheniker Menschen verursachen. Wieder eichen, dass auf natürliche vs synthetischen Texte, und Sie werden sehen, was ich meine! -)

Wenn Sie mehr großen Markov-generierte Texte haben, könnten Sie vielleicht feststellen, dass sie durch den Vergleich der Worthäufigkeiten zwischen jedem der Proben so waren. Da Markov-Ketten auf konstante Wortwahrscheinlichkeiten abhängen, sollten die Anteile an einem bestimmten Wort grob von Probe zu Probe gleich sein.

Crowdsourcing. Verwenden Mechanical Turk und erhalten eine Reihe von Menschen Abstimmung zu diesem Thema. Es gibt sogar einige Bibliotheken zu helfen, diese abziehen. Zum Beispiel:

Hier ist eine Blog-Post von O'Reilly Radar auf Tipps für die Verwendung Mechanical Turk Ihre Arbeit zu erledigen:

Wenn Sie ein Programm schreiben, welche Markovian Übergangswahrscheinlichkeiten von jeder Folge von Symbolen erzeugt, und berechnet dann die Entropie Rate der Markow-Matrix. (Siehe http://en.wikipedia.org/wiki/Entropy_rate#Entropy_rates_for_Markov_chains ) Diese im Grunde eine Schätzung dafür, wie leicht der Text vorhergesagt werden kann nur mit der Markow-Kette (höhere Entropie Mittel härter zur Vorhersage). Deshalb würde ich denken, dass die die Entropie der markov Matrix senken ist, desto wahrscheinlicher ist, dass die Probe von Text durch eine markov Matrix gesteuert wird. Wenn Sie Fragen haben, wie dieser Code zu schreiben, passiere ich ein Programm in Python haben, das tut genau dies auf meinem Computer, so dass ich Ihnen helfen kann aus

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