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.
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.
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.
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.
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