[PYTHON] Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen

Was ist die Markov-Kette?

Die einfache Erklärung der Markov-Kette ist, dass der Zustand zum vorherigen Zeitpunkt den Zustand zum nächsten Mal bestimmt. Wenn Sie sich ein konkretes Beispiel im Text ansehen und das Wort "Bauch" sehen, scheint es, als würde "leer" als nächstes kommen. Dies ist jedoch nicht die einzig richtige Antwort für "frei", sondern es können auch andere "voll" kommen. Denken wir also darüber nach, dies mit einer Wahrscheinlichkeit auszudrücken. Nehmen wir an, dass die Wörter, die auf "Bauch" folgen, eine 60% ige Chance haben, "frei" zu sein, und eine 40% ige Chance, "voll" zu sein. Diese Wahrscheinlichkeit ist die Wahrscheinlichkeit jedes der folgenden Zustände, die als Übergangswahrscheinlichkeit bezeichnet wird. Bisher ist es einfach, aber ich habe über die Markov-Kette gesprochen. Wenn Sie mehr über die Geschichte hier erfahren möchten, lesen Sie bitte Die Grundlagen der Markov-Kette und der Kormogorov-Gleichung (eine schöne Geschichte der Mathematik der High School).

Es ist jedoch nicht der Fall, wenn gesagt wird, dass die Sätze vollständig durch die Markov-Kette erklärt werden können. Wenn zum Beispiel "Ich habe Hunger", besteht eine hohe Wahrscheinlichkeit, dass ich "hungrig" bin, aber wenn ich "bereits hungrig" bin, besteht eine hohe Wahrscheinlichkeit, dass ich "voll" bin. Dies bedeutet, dass der Satz nicht nur vom vorherigen Wort, sondern auch von den früheren Wörtern abhängt. Im Übrigen kommt es auf den Kontext an. Da sich dieser Artikel jedoch mit der Markov-Kette befasst, möchte ich diesen Bereich in einem anderen Artikel vorstellen.

Programm

Der Zweck des diesmal erstellten Programms besteht darin, automatisch einen neuen Bericht mit den Daten des von mir erstellten Berichts zu erstellen. Lesen Sie also zuerst die Datei.


import random
from janome.tokenizer import Tokenizer

with open("data.csv", "rt", encoding="utf-8_sig") as f:
    text_raws = f.read()
text_raws = text_raws.replace("\n", "@\n").split("\n")

Geladene data.csv. Hier sind die Daten des Berichts des Autors, aber ich finde es etwas schlecht, dies nach außen zu veröffentlichen, deshalb werde ich es in einen entsprechenden Satz setzen, wenn ich es auf github poste. Ich habe es nach dem Lesen ersetzt, weil ich am Ende des Satzes "@" als Zeichen einfügen wollte.


text_lists = []
t = Tokenizer()
for text_raw in text_raws:
    text_list = []
    tokens = t.tokenize(text_raw, wakati=True)
    for token in tokens:
        text_list.append(token)
    text_lists.append(text_list)

Wir werden eine morphologische Analyse mit Tokenizer durchführen. Die morphologische Analyse besteht darin, einen Satz beispielsweise wie folgt in Wörter zu unterteilen.

["Ich werde einen Artikel über Qiita veröffentlichen."]] ↓ ['Ich', 'ist', 'Qiita', 'zu', 'Artikel', 'zu', 'Post', 'zu', '. ']

Außerdem werden standardmäßig zusätzliche Informationen wie Teiltexte hinzugefügt. Wenn Sie den Parameter auf "wakati = True" setzen, werden nur die Wörter extrahiert.


dic = {}
for text_list in text_lists:
    for i in range(len(text_list) - 1):
        if text_list[i] in dic:
            lists = dic[text_list[i]]
        else:
            lists = []
        lists.append(text_list[i + 1])
        dic[text_list[i]] = lists

Hier wird die Entsprechung zwischen dem vorherigen und dem nächsten Wort in einem Wörterbuchformat wie {"Tummy": ["Suita", "Full"]} generiert.


word = input("Bitte geben Sie das erste Wort ein")
generate = word
word = list(t.tokenize(word, wakati=True))[-1]
limit = 10000
cnt = 0

while cnt < limit:
    try:
        word = random.choice(dic[word])
        if word == "@":
            break
    except:
        break
    cnt += 1
    generate += word
print(generate)

Das erste Wort hat die Form der Eingabe. Dann wird das eingegebene Wort morphologisch analysiert und die Markov-Kette wird vom letzten Wort aus gestartet. Die Übergangswahrscheinlichkeit wird zufällig aus dem Wörterbuch abgerufen und ist proportional zur Anzahl der Vorkommen. Schließlich habe ich es als Zeichen am Ende des Satzes eingeführt, eine Obergrenze festgelegt, um nicht "@" oder eine unbegrenzte Schleife zu erreichen, und fertig.

Damit ist das Programm abgeschlossen. Probieren wir es aus.

Geben Sie "Heute" ein Generation "Heute gab es eine Verzögerung bei der Zusammenfassung weniger zufriedenstellender Verfahren und der Nutzung unnatürlicher Techniken."

Geben Sie "Person" ein Generation "Ich dachte, es sei notwendig, den Fluss der technischen Unterstützung für bestimmte Datenverfahren bei starkem Regen in der Zukunft zu sehen, die eher von Menschen getragen werden."

Ich weiß nicht, wovon du sprichst. Wie eingangs erwähnt, wird die Sprache nicht nur durch die unmittelbar vorhergehenden Wörter bestimmt, so dass ich eine unnatürliche Verbindung wie "viele → → →" hatte. Das nächste Mal möchte ich es verbessern, damit ich mit LSTM usw. das optimale Wort aus früheren Zuständen beurteilen kann. Quellcode hier

Verweise

Ich möchte Tweets in Python generieren! -Markov Chain Edition- Die Grundlagen der Markov-Kette und der Kormogorov-Gleichung (eine schöne Geschichte der Mathematik der High School)

Recommended Posts

Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
[Python] Ich habe versucht, automatisch einen täglichen Bericht über YWT mit Outlook-Mail zu erstellen
[Markov-Kette] Ich habe versucht, die Zitate in Python einzulesen.
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ein Memorandum beim automatischen Erwerb mit Selen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Entwicklung] (2/3) zu erstellen.
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Ausführung] (3/3) zu erstellen.
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Setup] (1/3) zu erstellen.
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich möchte manuell eine Legende mit matplotlib erstellen
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen
Ich habe versucht, mit Raspeye + Tact Switch eine Schaltfläche für Slack zu erstellen
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Ich habe versucht, eine Quip-API zu erstellen
Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet
[Markov-Kette] Ich habe versucht, negative Emotionen in Python zu laden.
Ich habe versucht, automatisch die Zeichenfolge zu generieren, die mit Python in Mr. Adjustment eingegeben werden soll
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Ich habe versucht, mit Open AI Gym eine verbesserte Lernumgebung für Othello zu schaffen
Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.
Ich habe versucht, einen Bot für die Ankündigung eines Wiire-Ereignisses zu erstellen
Ich habe versucht, eine Klasse für die Suche nach Dateien mit der Glob-Methode von Python in VBA zu erstellen
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe
Ich habe versucht, einen Artikel mit SQL Alchemy auf Wiki.js zu erstellen
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird
Ich habe versucht, einen einfachen Kredit-Score mit logistischer Regression zu erstellen.
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich wollte eine intelligente Präsentation mit Jupyter Notebook + nb present erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, automatisch Bilder von Kanna Hashimoto mit Python zu sammeln! !!
Ich habe versucht, mich automatisch mit Selen bei Twitter anzumelden (RPA, Scraping)
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht, mit Hy anzufangen
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe eine Web-API erstellt
Ich habe versucht, TSP mit QAOA zu lösen