11
votes

Algorithmes pour identifier le contenu généré par Markov?

Les chaînes de Markov sont une façon (presque standard) de générer Gibberish aléatoire qui a l'air intelligent à un œil non entraîné. Comment allez-vous identifier le texte généré par Markov du texte écrit humain?

Ce serait génial si les ressources que vous pointez sont sympathiques python.


0 commentaires

6 Réponses :


2
votes

Si vous aviez plusieurs gros textes générés par Markov, vous pouvez éventuellement déterminer qu'ils étaient donc en comparant les fréquences de mots entre chacun des échantillons. Étant donné que les chaînes de Markov dépendent des probabilités de mots constants, les proportions de tout mot donné doivent être à peu près égales de l'échantillon à l'échantillon.


3 commentaires

Il pourrait également payer pour regarder la boîte à outils de langue naturelle basée sur Python: NLTK.SOURCEFORGE.net - Cela dit, Cela pourrait être un peu excessif si vous êtes juste intéressé par les fréquences de mots.


Si les fréquences de mots sont générées pour ressembler au texte réel, vous risquez de poser des problèmes si vous travaillez avec des fréquences de mots tels que ...


Le problème avec cette approche est que si le texte généré par la chaîne générée par l'homme est généré à partir de texte avec des fréquences de transition de mots et de mots similaires, le texte généré par la chaîne de Markov ressemblera beaucoup au texte généré par l'homme.



8
votes

Une approche simple serait d'avoir un grand groupe d'humains lire la saisie de texte pour vous et voir si le texte est logique. Je ne fais que demi-plaisantis, c'est un problème délicat.

Je crois que c'est un problème difficile, car le texte généré par la chaîne de Markov aura beaucoup de mêmes propriétés de texte humain réel en termes de fréquence de mot et de relations simples entre la commande des mots.

Les différences entre le texte réel et le texte généré par une chaîne de Markov sont dans des règles de grammaire de plus haut niveau et dans un sens sémantique, qui sont difficiles à encoder par programme. L'autre problème est que les chaînes de Markov sont assez bons au texte de production qu'ils viennent parfois avec grammaticalement et sémantiquement déclarations correctes.

À titre d'exemple, voici un aphorisme du kantmachine :

aujourd'hui, il se sentirait convaincu que la volonté humaine est libre; demain, Considérant la chaîne indissoluble de la nature, il regardait la liberté comme une simple illusion et déclarer la nature d'être tout en tout.

Bien que cette chaîne a été écrit par un programme informatique, il est difficile de dire qui un être humain jamais dire cela.

Je pense que si vous pouvez nous donner des détails plus précis sur l'ordinateur et le texte généré par l'homme qui exposent des différences plus évidentes, il sera difficile de résoudre ce problème à l'aide de la programmation informatique.


2 commentaires

Ceci est assez dérangeant, en fait. J'ai lu la critique de la raison pure (le seul travail de Kant, je pouvais réellement me faire lire / comprendre) et, je ne le dirais jamais, que l'aphorisme est généré par la machine.


@shylent - C'était le quatrième coup sur la page, et je suis d'accord, c'est beaucoup dans le style de Kant. Ce serait un très bon exemple pour un cours qui implique Markov Chains!



2
votes

crowdsourcing. Utilisez la Turc mécanique et obtenez un certain nombre d'êtres humains à voter à ce sujet. Il y a même certaines bibliothèques pour vous aider à élever cela. Par exemple:


0 commentaires

5
votes

Je suggère une généralisation de la réponse de Evan: faire un modèle de Markov de votre propre et de former avec une grande partie de la (très grande) exemple que vous avez donné, réservant le reste de l'échantillon « données de test ». Maintenant, voyez comment bien le modèle que vous avez formé sur les données fait de test, par exemple avec un test du chi carré qui suggère la situation dans laquelle « ajustement est trop bon » (ce qui suggère les données de test est en effet généré par ce modèle), ainsi que ceux dans lesquels l'ajustement est très mauvaise (suggérant une erreur dans la structure du modèle - un plus modèle -formées avec la mauvaise structure fait un travail notoirement mauvais dans ce cas).

Bien sûr, il y a encore beaucoup de problèmes pour l'étalonnage, tels que la structure du modèle - êtes-vous un modèle soupçonnant simple, basé sur Ntuples des mots et un peu plus, ou plus sophistiqué avec des états de grammaire et autres. Heureusement, vous pouvez calibrer les choses assez bien en utilisant de grands corpus de connus à être naturel texte et aussi ceux que vous vous générez avec des modèles de différentes structures.

Une autre approche consiste à utiliser NLTK pour analyser les phrases que vous avez donné - un petit nombre de mis-Parsis est à prévoir, même dans le texte naturel (comme les humains sont imparfaits et est donc l'analyseur - il ne peut pas savoir ce mot X peut être utilisé comme un verbe et ne le classer comme un nom, etc, etc), mais la plupart des modèles de Markov (à moins qu'ils ne modélisation essentiellement la même structure grammaticale votre analyseur arrive à l'aide - et vous pouvez utiliser plusieurs parseurs pour essayer de contrer cette -) provoquera beaucoup plus mis-Parsis que même les humains dyslexiques. Encore une fois, que sur Calibrer naturel vs textes de synthèse, et vous verrez ce que je veux dire -)


0 commentaires

6
votes

Vous pouvez utiliser une approche "force brute", dans laquelle vous comparez la langue générée aux données collectées sur N-grammes d'ordre supérieur au modèle Markov qui l'a généré.

I.e. Si la langue a été générée avec un modèle de markov de 2ème ordre, jusqu'à 3 grammes aura lieu les bonnes fréquences, mais 4-grammes ne le fera probablement pas.

Vous pouvez obtenir jusqu'à 5 grammes de fréquences de Google Dataset N-Gram. C'est énorme mais - 24g compressé - Vous devez l'obtenir par courrier sur des DVD de LDC .

Edit: Ajout de quelques détails de la mise en œuvre

Les N-grammes ont déjà été comptés, vous devez donc simplement stocker les comptes (ou les fréquences) d'une manière rapide à rechercher. Une base de données correctement indexée, ou peut-être un indice Lucene devrait fonctionner.

Compte tenu d'un morceau de texte, recherchez-la et recherchez la fréquence de chaque 5 gramme dans votre base de données, et voyez où il se classe par rapport aux autres grammes qui commencent par les mêmes 4 mots.

Pratiquement, un obstacle plus important pourrait être les termes de licence de l'ensemble de données. L'utilisation d'une application commerciale pourrait être interdite.


2 commentaires

J'aime cette approche, mais je pense que cela serait informellement irréalisable?


Ne vois pas comment, ajouté quelques détails à la réponse.



0
votes

Si vous écrivez un programme qui génère des probabilités de transition markoviennes de toute séquence de symboles, puis calcule le taux d'entropie de la matrice Markov. (Voir 0 commentaires