Markov-Kette Künstlich Gehirnlos mit Python + Janome (2) Einführung in die Markov-Kette

Vorwort

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.

Was ist die Markov-Kette?

Einführung

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.

Anwendung auf die Satzerzeugung

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.

Implementierung (einfacher Markov-Prozess)

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.

Perspektiven für das nächste Mal

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

Markov Chain Artificial Brainless mit Python + Janome (1) Einführung in Janome
Markov-Kette Künstlich Gehirnlos mit Python + Janome (2) Einführung in die Markov-Kette
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
[Einführung in Python] Verwenden wir foreach mit Python
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Einführung in die künstliche Intelligenz mit Python 1 "Genetic Algorithm-Theory-"
Einführung in die künstliche Intelligenz mit Python 2 "Genetic Algorithm-Practice-"
Einführung in Tornado (1): Python Web Framework mit Tornado gestartet
Einführung in die Python-Sprache
Einführung in OpenCV (Python) - (2)
Einführung in den Formationsflug mit Tello edu (Python)
Einführung in Python mit Atom (unterwegs)
Einführung in das Generalized Linear Model (GLM) von Python
[Einführung in die Udemy Python3 + -Anwendung] 9. Drucken Sie zunächst mit print
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Einführung in die verteilte Parallelverarbeitung von Python durch Ray
Einführung in die Mathematik ab Python Study Memo Vol.1
Lesehinweis: Einführung in die Datenanalyse mit Python
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Stellen Sie mit Python eine Verbindung zu BigQuery her
Einführung in Python Django (2) Win
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
Einführung in RDB mit sqlalchemy Ⅰ
Einführung in die serielle Kommunikation [Python]
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
[Einführung in Python] <Liste> [Bearbeiten: 22.02.2020]
Einführung in Python (Python-Version APG4b)
Eine Einführung in die Python-Programmierung
Einführung in Python For, While
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
Einführung in sie gemacht mit Python ~ Tinder Automatisierungsprojekt ~ Episode 6
[Markov-Kette] Ich habe versucht, negative Emotionen in Python zu laden.
[Markov-Kette] Ich habe versucht, die Zitate in Python einzulesen.
20200329_Einführung in die Datenanalyse mit Python 2nd Edition Personal Summary
Einführung in sie gemacht mit Python ~ Tinder Automatisierungsprojekt ~ Episode 5
Einführung in Python für VBA-Benutzer - Aufrufen von Python aus Excel mit xlwings-
[Raspi4; Einführung in den Sound] Stabile Aufzeichnung der Toneingabe mit Python ♪
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
[Einführung in Udemy Python3 + Application] 51. Seien Sie vorsichtig mit Standardargumenten
[Einführung in die Udemy Python3 + -Anwendung] 58. Lambda
[Einführung in die Udemy Python3 + -Anwendung] 31. Kommentar
Python: So verwenden Sie Async mit
Link, um mit Python zu beginnen
Einführung in die Python Numerical Calculation Library NumPy
Trainieren! !! Einführung in Python Type (Type Hints)
[Einführung in Python3 Tag 1] Programmierung und Python
[Python] Mit Python in eine CSV-Datei schreiben
Schön dich mit Python zu treffen
[Einführung in Python] <numpy ndarray> [edit: 2020/02/22]
[Einführung in die Udemy Python3 + -Anwendung] 57. Decorator
Versuchen Sie, Facebook mit Python zu betreiben
Einführung in Python Hands On Teil 1
[Einführung in Python3 Tag 13] Kapitel 7 Zeichenfolgen (7.1-7.1.1.1)
Ausgabe in eine CSV-Datei mit Python