Chaîne de Markov artificielle sans cervelle avec Python + Janome (2) Introduction à la chaîne de Markov

Préface

Dernière fois Markov Chain Artificial Brainless (1) Introduction à Janome avec Python + Janome Cette fois, pour préparer la chaîne de Markov, j'utiliserai Janome pour briser les phrases et implémenter une simple chaîne de Markov.

Qu'est-ce que la chaîne de Markov?

introduction

La chaîne de Markov (chaîne de Markov) est un type de processus stochastique dans lequel les états possibles sont discrets (finis ou dénombrables) (processus de Markov à états discrets). (De Wikipedia)

Imaginez une simple épée. Lancez les dés dans une certaine case et avancez du montant du jet. Peu importe où se trouve le point de départ, les valeurs que les dés ont cédées jusqu'à ce point n'ont rien à voir avec l'événement futur de «faire quatre cases devant». C'est la propriété de Markov. Vous ne serez pas pris entre les cases, et vous atteindrez l'une des cases. C'est discret. Un tel processus de Markov est appelé par exemple une simple chaîne de Markov. "Avancez uniquement la somme de l'œil précédent et cette fois" Si vous définissez une règle comme celle-ci, ce sera une chaîne de Markov au deuxième étage.

Application à la génération de phrases

Dans la génération de phrases, la chaîne de Markov au Nième étage est utilisée. Prenons l'exemple de la phrase suivante.

Le processus de Markov est un processus stochastique avec des propriétés de Markov. C'est un processus stochastique qui a la propriété que le comportement futur n'est déterminé que par la valeur actuelle et n'a rien à voir avec le comportement passé.

Lorsque ceux-ci sont séparés à l'aide de Janome, cela ressemble à ceci.

Markov|processus|Quand|Est|、|Markov|sexe|À|Avoir|probabilité|processus|de|こQuand|À|Dire|。 futur|de|comportement|Mais|Courant|de|valeur|Seulement|alors|Décision|Sa|Ré|、|passé|de|comportement|Quand|Hors du sujet|alors|y a-t-il|Quandいう|la nature|À|Avoir|probabilité|processus|alors|y a-t-il|。

Tout d'abord, définissez le point de départ de manière arbitraire. Faisons "Markov". Déterminez le bloc suivant en référence à l'état actuel "Markov". Puisque ce sont «processus» et «sexe» qui sont liés à «Markov», choisissez l'un d'entre eux. Faisons-en un "processus". Pour une chaîne de Markov simple, sélectionnez «à», «non» et «de» en suivant le «processus». Pour la chaîne Markov du 2ème étage, sélectionnez "to" en suivant les 2 blocs "Markov" et "Process". Cette fois, implémentons facilement une simple chaîne de Markov avec N = 1.

Implémentation (processus de Markov simple)

from janome.tokenizer import Tokenizer
import random

t = Tokenizer()

s = "Le processus de Markov est un processus stochastique avec des propriétés de Markov.\
Il s'agit d'un processus stochastique qui a la propriété que le comportement futur est déterminé uniquement par la valeur actuelle et n'a rien à voir avec le comportement passé."

line = ""

for token in t.tokenize(s):
    line += token.surface
    line += "|"

word_list = line.split("|")
word_list.pop()

dictionary = {}
queue = ""
for word in word_list:
    if queue != "" and queue != "。":
        if queue not in dictionary:
            dictionary[queue] = []
            dictionary[queue].append(word)
        else:
            dictionary[queue].append(word)
    queue = word

def generator(start):
    sentence = start
    now_word = start
    for i in range (1000):
        if now_word == "。":
            break
        else:
            next_word = random.choice(dictionary[now_word])
            now_word = next_word
            sentence += next_word
    return sentence

for i in range(5):
    print(generator("Markov"))

=========== Remarque ci-dessous ===========

from janome.tokenizer import Tokenizer
import random

t = Tokenizer()

s = "Le processus de Markov est un processus stochastique avec des propriétés de Markov.\
C'est un processus stochastique qui a la propriété que le comportement futur n'est déterminé que par la valeur actuelle et n'a rien à voir avec le comportement passé."

line = ""

for token in t.tokenize(s):
    line += token.surface
    line += "|"

word_list = line.split("|")
word_list.pop()

Dans la première moitié, un tableau est généré dans lequel les phrases ci-dessus sont séparées et stockées. Comme mentionné ci-dessus|Génère une chaîne de délimitation et|Et divisé. Il reste encore des caractères vides, alors supprimez-les avec du pop.

dictionary = {}
queue = ""
for word in word_list:
    if queue != "" and queue != "。":
        if queue not in dictionary:
            dictionary[queue] = []
            dictionary[queue].append(word)
        else:
            dictionary[queue].append(word)
    queue = word

Dans la partie médiane, un dictionnaire (objet de type dict) est créé à l'aide du tableau créé dans la première moitié. Mettre le mot courant dans la file d'attente Le mot suivant est ajouté (créez-en un nouveau s'il n'y a pas d'élément). Après l'ajout, remplacez la file d'attente par le mot suivant. Le contenu du dictionnaire

{'Markov': ['processus', 'sexe'], 'processus': ['Quand', 'de', 'alors'], 'Quand': ['Est', 'Hors du sujet'], 'Est': ['、'], '、': ['Markov', 'passé'], 'sexe': ['À'], 'À': ['Avoir', 'Dire', 'Avoir'], 'Avoir': ['Certainement
taux'], '確taux': ['processus', 'processus'], 'de': ['chose', 'comportement', 'valeur', 'comportement'], 'chose': ['À'], 'Dire': ['。'], 'futur': ['de'], 'comportement': ['Mais', 'Quand'], 'Mais': ['Courant'], 'Courant': ['de'], 'valeur': ['Est
Ke'], 'だKe': ['alors'], 'alors': ['Décision', 'y a-t-il', 'y a-t-il'], 'Décision': ['Sa'], 'Sa': ['Ré'], 'Ré': ['、'], 'passé': ['de'], 'Hors du sujet': ['alors'], 'y a-t-il': ['Cette', '。'], 'Cette': ['la nature'], 'sexe
qualité': ['À'], 'Avoir': ['probabilité']}

C'est comme ça.

def generator(start):
    sentence = start
    now_word = start
    for i in range (1000):
        if now_word == "。":
            break
        else:
            next_word = random.choice(dictionary[now_word])
            now_word = next_word
            sentence += next_word
    return sentence

for i in range(5):
    print(generator("Markov"))

Dans la seconde moitié, il est enfin temps de générer des phrases. Sélectionnez au hasard le mot suivant dans le groupe de mots qui suivent le mot actuel et attachez-le à la phrase. J'ai écrit qu'il se terminera quand "." Vient, mais il est probable que "." Ne sera pas sélectionné pour toujours, il est donc précisé que la répétition se termine au plus 1000 fois. Demandez-leur d'écrire cinq phrases commençant par «Markov».

Cela n'a rien à voir avec la propriété Markov.
Cela n'a rien à voir avec le processus de probabilité d'avoir la propriété de Markov.
Le comportement du processus stochastique avec la propriété de Markov est le présent.
Il fait référence à la nature markovienne.
C'est un processus stochastique qui a un processus de Markov.

(C'est joufflu) Cependant, une telle phrase est née.

Des perspectives pour la prochaine fois

La simple chaîne de Markov a tendance à être incohérente comme ci-dessus, car elle n'a aucun lien avec le passé. De plus, cette fois, le dictionnaire était trop pauvre et les phrases se ressemblaient. La prochaine fois, la chaîne de Markov d'ordre N, qui sélectionne le mot suivant en fonction de plusieurs chaînes et génère des phrases, Je vais essayer de l'implémenter avec un dictionnaire plus grand.

Recommended Posts

Markov Chain Artificial Brainless avec Python + Janome (1) Introduction à Janome
Chaîne de Markov artificielle sans cervelle avec Python + Janome (2) Introduction à la chaîne de Markov
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator
[Introduction à Python] Utilisons foreach avec Python
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Introduction à l'intelligence artificielle avec Python 1 «Théorie des algorithmes génétiques»
Introduction à l'intelligence artificielle avec Python 2 «Pratique de l'algorithme génétique»
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
Introduction au langage Python
Introduction à OpenCV (python) - (2)
Introduction au vol en formation avec Tello edu (Python)
Introduction à Python avec Atom (en route)
Introduction au modèle linéaire généralisé (GLM) par Python
[Introduction à l'application Udemy Python3 +] 9. Tout d'abord, imprimez avec print
[Introduction à Python] Comment itérer avec la fonction range?
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
Introduction au traitement parallèle distribué Python par Ray
Introduction aux mathématiques à partir du mémo d'étude Python Vol.1
Note de lecture: Introduction à l'analyse de données avec Python
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Connectez-vous à BigQuery avec Python
Introduction à Python Django (2) Win
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3
Introduction à RDB avec sqlalchemy Ⅰ
Introduction à la communication série [Python]
Basculer python vers 2.7 avec des alternatives
Écrire en csv avec Python
[Introduction à Python] <liste> [modifier le 22/02/2020]
Introduction à Python (version Python APG4b)
Une introduction à la programmation Python
Introduction à Python pour, pendant
J'ai essayé de créer automatiquement un rapport avec la chaîne de Markov
Introduction à elle faite avec Python ~ Projet d'automatisation Tinder ~ Épisode 6
[Chaîne de Markov] J'ai essayé de charger des émotions négatives dans Python.
[Chaîne de Markov] J'ai essayé de lire les citations en Python.
20200329_Introduction à l'analyse de données avec Python 2nd Edition Personal Summary
Introduction à elle faite avec Python ~ Projet d'automatisation Tinder ~ Épisode 5
Introduction à Python pour les utilisateurs de VBA - Appeler Python depuis Excel avec xlwings -
[Raspi4; Introduction au son] Enregistrement stable de l'entrée sonore avec python ♪
[Introduction à Python] Comment obtenir des données avec la fonction listdir
[Introduction à Udemy Python3 + Application] 51. Soyez prudent avec les arguments par défaut
[Présentation de l'application Udemy Python3 +] 58. Lambda
[Présentation de l'application Udemy Python3 +] 31. Commentaire
Python: comment utiliser async avec
Lien pour commencer avec python
Introduction à la bibliothèque de calcul numérique Python NumPy
Entraine toi! !! Introduction au type Python (conseils de type)
[Introduction à Python3 Jour 1] Programmation et Python
[Python] Ecrire dans un fichier csv avec Python
Ravi de vous rencontrer avec python
[Introduction à Python] <numpy ndarray> [modifier le 22/02/2020]
[Présentation de l'application Udemy Python3 +] 57. Décorateur
Essayez d'exploiter Facebook avec Python
Introduction à Python Hands On Partie 1
[Introduction à Python3 Jour 13] Chapitre 7 Chaînes de caractères (7.1-7.1.1.1)
Sortie vers un fichier csv avec Python