Letztes Mal Markov Chain Artificial Brainless (1) Einführung in Janome mit Python + Janome Dieses Mal werde ich als Vorbereitung für die Markov-Kette Janome verwenden, um die Sätze aufzubrechen und eine einfache einfache Markov-Kette zu implementieren.
Die Markov-Kette (Markov-Kette) ist eine Art stochastischer Prozess, bei dem die möglichen Zustände diskret (endlich oder zählbar) sind (diskreter Markov-Prozess). (Aus Wikipedia)
Stellen Sie sich ein einfaches Schwert vor. Wirf die Würfel in einem bestimmten Feld und bewege dich um den Betrag des Würfels vorwärts. Egal wo der Startpunkt ist, die Werte, die die Würfel bis zu diesem Punkt gegeben haben, haben nichts mit dem zukünftigen Ereignis zu tun, "vier Quadrate voraus zu gehen". Dies ist Markov Eigentum. Sie werden nicht zwischen den Feldern gefangen und erreichen eines der Felder. Das ist diskret. Ein solcher Markov-Prozess wird beispielsweise als einfache Markov-Kette bezeichnet. "Nur die Summe des vorherigen Auges und diesmal vorrücken" Wenn Sie eine solche Regel festlegen, handelt es sich um eine Markov-Kette im zweiten Stock.
Bei der Satzgenerierung wird die Markov-Kette im N-ten Stock verwendet. Betrachten Sie den folgenden Satz als Beispiel.
Der Markov-Prozess ist ein stochastischer Prozess mit Markov-Eigenschaften. Es ist ein stochastischer Prozess, der die Eigenschaft hat, dass zukünftiges Verhalten nur durch den aktuellen Wert bestimmt wird und nichts mit vergangenem Verhalten zu tun hat.
Wenn diese mit Janome getrennt werden, sieht es so aus.
Markov|Prozess|Wann|Ist|、|Markov|Sex|Zu|Haben|Wahrscheinlichkeit|Prozess|von|こWann|Zu|Sagen|。 Zukunft|von|Verhalten|Aber|Aktuell|von|Wert|Nur|damit|Entscheidung|Sa|Re|、|Vergangenheit|von|Verhalten|Wann|Irrelevant|damit|Gibt es|Wannいう|Natur|Zu|Haben|Wahrscheinlichkeit|Prozess|damit|Gibt es|。
Stellen Sie zunächst den Startpunkt beliebig ein. Machen wir es "Markov". Bestimmen Sie den nächsten Block anhand des aktuellen Status "Markov".
Wählen Sie für eine einfache Markov-Kette nach dem "Prozess" zwischen "bis", "nein" und "de". Wählen Sie für die Markov-Kette im 2. Stock "bis" aus und folgen Sie dabei den beiden Blöcken "Markov" und "Prozess". Lassen Sie uns dieses Mal einfach eine einfache Markov-Kette mit N = 1 implementieren.
from janome.tokenizer import Tokenizer
import random
t = Tokenizer()
s = "Der Markov-Prozess ist ein stochastischer Prozess mit Markov-Eigenschaften.\
Es ist ein stochastischer Prozess, der die Eigenschaft hat, dass zukünftiges Verhalten nur durch den aktuellen Wert bestimmt wird und nichts mit vergangenem Verhalten zu tun hat."
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"))
=========== Hinweis unten ===========
from janome.tokenizer import Tokenizer
import random
t = Tokenizer()
s = "Der Markov-Prozess ist ein stochastischer Prozess mit Markov-Eigenschaften.\
Es ist ein stochastischer Prozess, der die Eigenschaft hat, dass zukünftiges Verhalten nur durch den aktuellen Wert bestimmt wird und nichts mit vergangenem Verhalten zu tun hat."
line = ""
for token in t.tokenize(s):
line += token.surface
line += "|"
word_list = line.split("|")
word_list.pop()
In der ersten Hälfte wird ein Array erzeugt, in dem die obigen Sätze getrennt und gespeichert werden. Wie oben erwähnt|Generieren Sie eine Trennzeichenfolge und|Und spalten. Es sind noch leere Zeichen übrig, entfernen Sie sie also mit 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
Im mittleren Teil wird mit dem in der ersten Hälfte erstellten Array ein Wörterbuch (Objekt vom Typ dikt) erstellt. Stellen Sie das aktuelle Wort in die Warteschlange Das folgende Wortwort wird hinzugefügt (erstellen Sie ein neues, wenn kein Element vorhanden ist). Ersetzen Sie die Warteschlange nach dem Hinzufügen durch das folgende Wortwort. Der Inhalt des Wörterbuchs
{'Markov': ['Prozess', 'Sex'], 'Prozess': ['Wann', 'von', 'damit'], 'Wann': ['Ist', 'Irrelevant'], 'Ist': ['、'], '、': ['Markov', 'Vergangenheit'], 'Sex': ['Zu'], 'Zu': ['Haben', 'Sagen', 'Haben'], 'Haben': ['Bestimmt
Bewertung'], '確Bewertung': ['Prozess', 'Prozess'], 'von': ['Ding', 'Verhalten', 'Wert', 'Verhalten'], 'Ding': ['Zu'], 'Sagen': ['。'], 'Zukunft': ['von'], 'Verhalten': ['Aber', 'Wann'], 'Aber': ['Aktuell'], 'Aktuell': ['von'], 'Wert': ['Ist
Ke'], 'だKe': ['damit'], 'damit': ['Entscheidung', 'Gibt es', 'Gibt es'], 'Entscheidung': ['Sa'], 'Sa': ['Re'], 'Re': ['、'], 'Vergangenheit': ['von'], 'Irrelevant': ['damit'], 'Gibt es': ['Das', '。'], 'Das': ['Natur'], 'Sex
Qualität': ['Zu'], 'Haben': ['Wahrscheinlichkeit']}
Es ist so.
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"))
In der zweiten Hälfte ist es endlich Zeit, Sätze zu generieren. Wählen Sie zufällig das nächste Wort aus der Gruppe der Wörter aus, die dem aktuellen Wort folgen, und hängen Sie es an den Satz an. Ich habe geschrieben, dass es enden wird, wenn "." Kommt, aber es ist wahrscheinlich, dass "." Nicht für immer ausgewählt wird, daher habe ich angegeben, dass die Wiederholung höchstens 1000 Mal enden soll. Bitten Sie sie, fünf Sätze zu schreiben, die mit "Markov" beginnen.
Es hat nichts mit der Markov-Eigenschaft zu tun.
Es hat nichts mit dem Wahrscheinlichkeitsprozess zu tun, eine Markov-Eigenschaft zu haben.
Das Verhalten des stochastischen Prozesses mit Markov-Eigenschaft ist die Gegenwart.
Es bezieht sich auf Markov Natur.
Es ist ein stochastischer Prozess, der einen Markov-Prozess hat.
(Es ist mollig) Ein solcher Satz wurde jedoch geboren.
Die einfache Markov-Kette neigt dazu, wie oben inkohärent zu sein, da sie keinen Zusammenhang mit der Vergangenheit hat. Auch diesmal war das Wörterbuch zu schlecht und die Sätze waren einander ähnlich. Das nächste Mal wird die Markov-Kette N-ter Ordnung, die das nächste Wort basierend auf mehreren Ketten auswählt und Sätze generiert, Ich werde versuchen, es mit einem größeren Wörterbuch zu implementieren.
Recommended Posts