[PYTHON] Einfache Generierung stilisierter Pakuri-Sätze mit MeCab + Gensim

Vor kurzem gab es noch einen Tag im diesjährigen Adventskalender, der eine interessante Verarbeitung in natürlicher Sprache darstellt. Deshalb dachte ich, ich sollte ihn mir ansehen, also tat ich es per Express.

Übrigens sind der Inhalt und die Ergebnisse meiner Arbeit ziemlich schrecklich, also nur als Referenz: "Dies ist, was passiert ist."

Entwicklungsabsicht

Ich habe dies und das im Detail versucht und dachte, dass es praktisch wäre, wenn der Text automatisch generiert werden könnte.

Ich war frustriert, als ich zwei große Wände traf.

Für erstere geben Sie das Lernen selbst auf und verwenden Sie ein erlerntes Modell! Das ist die Lösung, aber letztere funktioniert mit dem trainierten Modell einfach nicht.

Also: "Ich habe als Student Englisch gelernt, nicht nur gelesen und geschrieben, sondern gleichzeitig auch Grammatik gelernt, und sogar beim maschinellen Lernen, anstatt nur Sätze zu lesen und die zu generierenden Sätze zu lernen." Ich kam auf die Idee, dass es notwendig ist, die Grammatik zu lehren und noch mehr: "Ich verstehe die Grammatik nicht gut. Wenn ich also das vorhandene Meisterwerk ziehe und die Elemente entsprechend ersetze, ist es so. Ich hatte die schlimmste Idee: „Ist es nicht möglich zu schreiben?“ Ohne Stolz oder technische Fähigkeiten habe ich sie sofort in die Praxis umgesetzt, als ich keine andere Wahl hatte, als sie zu tun.

Code


import MeCab
import gensim
import re


mecab = MeCab.Tagger ("-Ochasen")
model = gensim.models.KeyedVectors.load_word2vec_format('model.vec', binary=False)

morpheme = mecab.parse("Pakuri Originaltext")
word_morphemes = morpheme.split("\n")
original = []
pakuri = []
for word_morpheme in word_morphemes:
    if word_morpheme == "EOS" or word_morpheme == "":
        continue

    word_morpheme_info = word_morpheme.split("\t")

    word = word_morpheme_info[0]
    category = word_morpheme_info[3]

    original.append(word)

    if re.findall('^[Substantiv|Adjektiv].*', category):
    # if re.findall('^[Substantiv|Adjektiv|Verb \-Unabhängigkeit].*', category):
        try:
            similars = model.most_similar(positive=[word])
            pakuri.append(similars[len(similars) - 1][0])
        except:
            pakuri.append(word)

    else:
        pakuri.append(word)

print("".join(original))
print("".join(pakuri))

Ich dachte, dass das Ersetzen der Hilfswörter und Zusatzelemente in den Bestandteilen des Satzes die Rate des Satzbruchs erhöhen würde, also entschied ich mich grundsätzlich, Nomenklatur, Adjektive und Verben als Ziel zu wählen.

Um den Satz aussagekräftiger zu machen, selbst wenn er durch "ähnliche Wörter" ersetzt wird, ist es möglicherweise besser, die Verben nicht zu ersetzen. Ich dachte irgendwie, also versuchte ich beide, wann die Verben getauscht wurden und wann nicht.

Ich habe das Modell, das ich lade, aus dem Folgenden ausgeliehen.

Das trainierte Modell von fastText wurde veröffentlicht

Außerdem wurden im obigen Artikel sowohl der mit NEologd als auch der ohne NEologd veröffentlicht, sodass ich auch verglichen habe, was passiert, wenn beide verwendet werden.

Ausführungsergebnis

Es stellte sich heraus, dass es so etwas war.

Originaltext (Soseki Natsume, Toya Yume)

Es basiert auf einer Kopie des Inhalts von Aozora Bunko, aber einige Kanji werden geöffnet.

Wenn sie mit verschränkten Armen am Bett sitzt, stirbt die auf dem Rücken liegende Frau mit leiser Stimme. Die Frau hat lange Haare auf einem Kissen und ein weich konturiertes Kürbisgesicht darin. Die Farbe der Lippen ist natürlich rot, mit der warmen Blutfarbe auf der Unterseite der weißen Wangen. Es sieht nicht so aus, als würde es sterben. Aber mit leiser Stimme erklärte die Frau klar, dass sie sterben würde. Ich dachte definitiv, das würde nicht sterben. Also fragte ich ihn, ob er sterben würde und schaute von oben hinein. Die Frau öffnete fest die Augen und sagte, dass sie sterben würde. Mit großen, feuchten Augen, die in lange Augenbrauen gehüllt waren, war alles schwarz. Hinter dem schwarzen Schwert kann ich mich lebhaft sehen.

Ersetzen Sie Nomenklatur und Adjektive

Wenn er sich mit verschränkten Armen hinsetzt, soll die Konkubine, die auf seinem Rücken schlief, in entspannter Stimmung sterben. Das 妾 legt einen dünnen Knoten auf das Polsterlose und legt zu diesem Zeitpunkt ein weiches schwarzes Kürbisgesicht auf. Die Grundfarbe der Magenerweiterung unterscheidet sich mäßig von der Führung des bunten Halses, und natürlich ist die Grundfarbe der Augenlider grün. Es sieht nicht so aus, als würde es sterben. Die Konkubine war jedoch unbehaglich und gedämpft und erklärte klar, dass er sterben würde. Ich dachte du würdest nicht einmal Vergebung sterben. Also, ja, ich sterbe und wundere mich, aber ich habe es unter dem Vorbehalt untersucht und gefragt. Er öffnete das Corneum fest und sagte, dass er sterben würde. Als es in dünne Augenbrauen mit einem großen, verstärkten Corneum gewickelt wurde, waren es nur sechs Linien. Ihre Manifestation schwebt silbergrau auf dem Tatara-Baum von Togawa Akibone.

Es ist in vielerlei Hinsicht inkohärent, aber es fühlt sich seltsam gut an, dass "Ihre Manifestation auf dem Tatara-Baum von Togawa Akibone in Silbergrau schwebt". Es scheint in einer Art Ranobe zu sein. (Vorurteil)

Die Augenlider sind grün, aber ich habe das Gefühl, dass ein Gefühl der Science-Fiction entsteht, zusammen mit der Tatsache, dass "es nicht so aussieht, als würde es sterben".

Ersetzen Sie Nomenklatur, Adjektive, Verben

Ich muss mich mit verschränkten Armen hinsetzen und habe Angst, dass ich Angst vor der Nacht habe, aber ich möchte sagen, dass ich auf verschiedene Weise sterbe. Es ist ohne Polster und für eine dünne und dünne Krawatte ausgelegt, und es ist schwarz und weich und hat verschiedene Melonengesichter, so dass ich es zu diesem Zeitpunkt nicht erfassen kann. Ayaka verschiedene Hälse und führt warme Magenerweiterung und Grundfarbe, aber mäßig Tohsen Jordan, Augenlider und Grundfarbe wie grün. Ich sehe es nie sterben. Darüber hinaus gibt es verschiedene Arten von entspannender und entspannender Atmosphäre, und es gibt sicherlich nur wenige, die sterben werden. Vergib dir und anderen, und es gibt verschiedene Todesgefühle. Sofort starb sie und wenn überhaupt, guckte sie in mich hinein. Ich sterbe und obwohl es hier ist, gibt es auch eine Blockade aufgrund des engen und engen Corneum. Große Verbesserung und viele Keratine Es gibt auch Zeiten, in denen dünne Augen treiben, und wieder dasselbe mit sechs verschiedenen Linien. Es ist der gleiche verschiedene Togawa Akibone und Tatara Baum, du und die Manifestation aber silbergrau und leg dich nicht hin.

Bewerten Sie den Sinn für Rhythmus.

Ist es eine Szene einer klassischen (unlesbaren) Schlacht? Eindruck.

Ersetzen Sie Nomenklatur und Adjektive (mit NEologd-Version)

Als er mit verschränkten Armen wach sitzt, stirbt seine Frau, die auf ihrem Rücken liegt, mit einem friedlichen Schrei. Meine Frau legte einen langen Knoten auf den Balken und legte damals ein glänzendes Melonengesicht mit Abstufung. Die orange Farbe der sanften Blutlinie wird mäßig in die Oberflächenschicht der Lippen eingefügt, und die orange Farbe des schmalen Vokals ist natürlich rosa. Es sieht nicht so aus, als wäre es tot. Aber seine Frau schrie friedlich und erklärte deutlich, dass sie sterben würde. Andere drängten ebenfalls vorwärts und dachten, dass es nicht sterben würde. Also fragte ich ihn, ob er sterben würde, also versuchte ich, in den Rock zu gelangen. Die Frau öffnete fest die Augenlider und sagte, dass sie sterben würde. Als es in ein langes Augenlid mit einem großen und reichen Augenlid gewickelt wurde, war es nur eine große Vene in Zeile 08. Neben der Person zweiter Klasse mit einer großen Ader schweben die Kleider der anderen Person heimlich.

Der letzte Satz davon ist auch seltsam berühmt. Ich weiß nicht was es bedeutet.

Als ich mit einem friedlichen Schrei sagte "Ich werde sterben", sagte meine Frau [Kudan](https://www.google.com/search?client=safari&rls=de&biw=1621&bih=829&tbm=isch&sa=1&ei=e_vpXa3PDJuRr7wP_smHqAg&q E3% 81% 8F% E3% 81% A0% E3% 82% 93 & oq =% E3% 81% 8F% E3% 81% A0% E3% 82% 93 & gs_l = img.3..0l2j0i4l8.0.0..3074 .. .0.0..0.218.283.1j0j1 ...... 0 ...... gws-wiz-img.yX0KZZBFy8s & ved = 0ahUKEwjt-LLMuKDmAhWbyIsBHf7kAYUQ4dUDCAY & uact = 5) Ist es? Ich dachte.

Ersetzen Sie Nomenklatur, Adjektive und Verben (mit NEologd-Version)

Mit verschränkten Armen wachte ich auf und legte mich hin, und meine Frau legte sich hin und sagte, sie weinte und verpflichtete sich. Frau) Eine lange und lange Krawatte, ein Balken und ein glänzendes Gesicht mit Abstufung. Es gibt eine Lippe namens Mashiro und eine sanfte Blutlinie auf der Oberfläche. Sie ist orange mit einem moderaten Unterschied in den Rissen und selbst bei schmalen Vokalen ist sie rosa. (Mafu-Selbstmord) Sie müssen einen Blick darauf werfen. Danach schrie meine Frau und die verschiedenen Theorien, die sie selbst begangen hatte. Die Art zu leben (indem man mit anderen vorantreibt). Es kam vor, dass ich alleine lebte und es mir anhörte, weil ich mich in den Rock tauchte. Wenn ich Selbstmord bin, meine Frau, kann ich meine Augenlider nicht öffnen. Es gibt viel Reichtum, und wenn es mit einem langen Augenlid und einem langen Augenlid umwickelt ist, ist es eine große Vene. Es gibt eine Person zweiter Klasse, die große Vene genannt wird, und es gibt eine andere Person, und Sie können ruhig schwimmen.

Schließlich wird das Symbol im Text gemischt. Schon Akan.

Selbst in einem solchen Fall schwebt die Würde des mysteriösen Meisterwerks im letzten Satz. (kann nicht lesen)

Rückblick auf die Ergebnisse

――Ich bin damit zufrieden. ――Ich denke, es war besser, die Verben nicht zu ersetzen. Ich bin der Meinung, dass es einfacher war, den Zusammenhalt und die Atmosphäre als Ganzes aufrechtzuerhalten, wenn die Verben so belassen wurden, wie sie waren. ――Der Satz, den ich für den Originaltext ausgewählt habe, war zufällig ein Satz mit wenigen richtigen Nomenklaturen und neuen Wörtern, aber es war überraschend, dass die Ergebnisse zwischen der NEologd-Version und der Nicht-NEologd-Version sehr unterschiedlich waren. ――Wenn ich die zu ersetzenden Wörter auswähle, können meiner Meinung nach bessere Sätze gebildet werden, indem bedingte Beurteilungen vorgenommen werden, z. B. das Abgleichen der Textteile und Endungen des Teils mit den Originalwörtern. ――In anderen Dingen gibt es Raum für Verbesserungen, aber das Laden des trainierten Modells ist ** ohnehin schwer **, was das Ausprobieren verschiedener Dinge behinderte. Wenn ich hier nichts vorstelle, wird es wahrscheinlich in Zukunft schwierig sein, also möchte ich etwas dagegen tun. Ich frage mich, ob ich die geladenen irgendwo in den Standby-Modus versetzen kann ...

Danke fürs Lesen!

Nachtrag

--2019-11-09 Die Notation der NEologd-Version und der Nicht-NEologd-Version wurde umgekehrt, daher wurde sie korrigiert. Es tut mir Leid! --2019-11-10 ... Ich dachte, es wäre nicht umgekehrt, also legte ich es zurück. Es tut mir wirklich leid. --2019-11-10 Es tut mir leid, ich habe einen Fehler im regulären Ausdruck des Urteils über den Teiletext gemacht. Die Klammern sind () anstelle von [], und der hintere Schrägstrich ist mit einem \ markiert. Wenn Sie dies beheben, funktioniert es etwas besser.

Ich bedauere, dass ich es nicht wirklich eilig habe.

Recommended Posts

Einfache Generierung stilisierter Pakuri-Sätze mit MeCab + Gensim
[Blender x Python] Denken Sie an Code mit Symbolen
Einfache Generierung stilisierter Pakuri-Sätze mit MeCab + Gensim
Konvertieren Sie Sätze mit gensim in Vektoren
Einfache Einführung der Spracherkennung mit Python
Einfach! Verwenden Sie gensim und word2vec mit MAMP.