[PYTHON] Génération facile de phrases pakuri stylisées avec MeCab + gensim

Récemment, il restait un jour dans le calendrier de l'Avent de cette année, qui est un traitement du langage naturel intéressant, alors j'ai pensé que je devrais y jeter un coup d'œil, alors je l'ai fait par express.

En passant, le contenu et les résultats de ce que je fais sont assez terribles, donc juste pour référence, "C'est ce qui s'est passé".

Intention de développement

J'ai essayé ceci et cela en détail, pensant que ce serait pratique si les phrases pouvaient être générées automatiquement.

―― L'apprentissage automatique a un temps d'apprentissage long et lourd. ――Bien que cela ait pris du temps, les phrases générées sont écrasées en japonais.

J'étais frustré en heurtant deux grands murs.

Pour les premiers, renoncez à apprendre par vous-même et utilisez un modèle appris! C'est la solution, mais cette dernière ne fonctionne tout simplement pas avec le modèle entraîné.

Donc, "J'apprenais l'anglais quand j'étais étudiant, pas seulement en lecture et en écriture, mais aussi en apprenant le système de grammaire en même temps, et même en apprentissage automatique, plutôt que de simplement lire des phrases et apprendre, les phrases à générer J'ai eu l'idée qu'il est nécessaire d'enseigner la grammaire "Je ne comprends pas bien la grammaire, donc si je tire le chef-d'œuvre existant et remplace les éléments de manière appropriée, c'est comme ça." J'ai eu la pire idée: "N'est-il pas possible d'écrire une phrase?"

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("Texte original de Pakuri")
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('^[nom|adjectif].*', category):
    # if re.findall('^[nom|adjectif|Verbe \-Indépendance].*', 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))

Je pensais que le remplacement des mots auxiliaires et des compléments dans les composants d'une phrase augmenterait le taux de rupture de la phrase, alors j'ai essentiellement décidé de cibler la nomenclature, les adjectifs et les verbes.

De plus, afin de rendre la phrase plus significative même si elle est remplacée par des "mots similaires", il peut être préférable de ne pas remplacer les verbes. J'ai en quelque sorte pensé, alors j'ai essayé à la fois quand les verbes étaient échangés et quand ils ne l'étaient pas.

J'ai emprunté le modèle que je charge à ce qui suit.

Le modèle entraîné de fastText a été publié

De plus, dans l'article ci-dessus, celui avec NEologd et celui sans lui ont été publiés, j'ai donc également comparé ce qui se passe lorsque les deux sont utilisés.

Résultat d'exécution

Il s'est avéré être quelque chose comme ça.

Texte original (Soseki Natsume, Toya Yume)

Il est basé sur le copier-coller du contenu de Aozora Bunko, mais certains kanji sont ouverts.

Lorsqu'elle s'assoit au chevet, les bras croisés, la femme couchée sur le dos meurt d'une voix calme. La femme pose ses longs cheveux sur un oreiller et y pose un visage de gourde aux contours doux. La couleur du sang chaud se trouve juste au bas des joues blanches et la couleur des lèvres est bien sûr rouge. Il ne semble pas que ça meure. Mais d'une voix calme, elle a clairement déclaré qu'elle mourrait. Je pensais vraiment que cela ne mourrait pas. Alors, je lui ai demandé s'il allait mourir, en le regardant d'en haut. La femme ouvrit fermement les yeux, disant qu'elle mourrait. Avec de grands yeux hydratés, enveloppés de longs sourcils, tout était noir. Derrière le renard noir, je me vois bien.

Remplacer la nomenclature et les adjectifs

Lorsqu'il s'assoit, les bras croisés, la concubine qui dormait sur le dos meurt d'humeur détendue. Le 妾 pose un nœud fin sur le sans traversin et pose un visage de gourde noire douce à ce moment-là. La couleur de fond de la dilatation de l'estomac est modérément différente de celle du cou coloré et, bien sûr, la couleur de fond des paupières est verte. Il ne semble pas que ça meure. Cependant, la concubine était mal à l'aise et étouffée, et a clairement déclaré qu'il mourrait. Je pensais que tu ne mourrais même pas de pardon. Alors, oui, je meurs et je me demande, mais je l'ai examiné à partir de la réserve et j'ai demandé. Il ouvrit fermement la cornée, disant qu'il mourrait. Lorsqu'il était enveloppé de sourcils fins avec un grand cornée rehaussé, il n'y avait que six lignes différentes. Votre manifestation flotte en gris argenté sur l'arbre Tatara de Togawa Akibone.

C'est incohérent à bien des égards, mais cela fait étrangement bon que "Votre manifestation flotte en gris argenté sur l'arbre Tatara de Togawa Akibone." Cela semble être dans une sorte de Ranobe. (préjudice)

Les paupières sont vertes, mais je sens qu'un sens de la science-fiction émerge avec le fait que "on ne dirait pas que ça va mourir".

Remplacer la nomenclature, les adjectifs, les verbes

Je dois m'asseoir les bras croisés et j'ai peur d'avoir peur de la nuit, mais j'aimerais dire que je meurs de diverses manières. Il est sans traversin pour une cravate fine et fine, et il est noir et doux. Ayaka divers cols et guide la dilatation de l'estomac chaud et la couleur de fond mais modérément Tohsen Jordan, les paupières et la couleur de fond comme le vert. Je ne le vois jamais mourir. De plus, il existe différents types d'ambiances relaxantes et relaxantes, et il y en a certainement peu qui mourront. Pardonne à toi et aux autres, et il y a divers sentiments de mort. Immédiatement, elle est morte, et si quoi que ce soit, elle me regardait. Je meurs, et bien que ce soit ici, il y a aussi un blocage dû à la cornée serrée et serrée. Grande amélioration et beaucoup de kératines En outre, il y a des moments où les yeux minces dérivent, et même encore, avec six lignes différentes. Ses mêmes divers arbres Togawa Akibone et Tatara, vous et la manifestation mais gris argenté ne vous allongez pas.

Évaluez le sens du rythme.

Est-ce une scène d'une bataille classique (illisible)? Impression.

Remplacer la nomenclature et les adjectifs (en utilisant la version NEologd)

Lorsqu'il se réveille les bras croisés, sa femme, allongée sur le dos, meurt dans un cri paisible. Ma femme a posé un long nœud sur la poutre et a posé un visage de melon brillant avec des dégradés à ce moment-là. La couleur orange de la lignée douce est modérément insérée sur la couche superficielle des lèvres, et la couleur orange de la voyelle étroite est bien sûr rose. Il n'a pas l'air d'être mort. Mais sa femme a crié paisiblement, déclarant clairement qu'elle allait mourir. D'autres ont également avancé et ont pensé qu'il ne mourrait pas. Alors je lui ai demandé s'il allait mourir, alors j'ai essayé de rentrer dans la jupe. La femme ouvrit les paupières en disant qu'elle allait mourir. Lorsqu'elle était enveloppée dans une longue paupière avec une paupière large et riche, c'était juste une grosse veine sur la ligne 08. À côté de la personne de deuxième classe avec une grosse veine, les vêtements de l'autre personne flottent secrètement.

La dernière phrase de ceci est également étrangement célèbre. Je ne sais pas ce que ça veut dire.

Quand j'ai dit "Je vais mourir" avec un cri pacifique, ma femme a dit [Kudan](https://www.google.com/search?client=safari&rls=en&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 ... .0.0..0.218.283.1j0j1 ...... 0 ...... gws-wiz-img.yX0KZZBFy8s & ved = 0ahUKEwjt-LLMuKDmAhWbyIsBHf7kAYUQ4dUDCAY & uact = 5) Vraiment? Je pensais.

Remplacer la nomenclature, les adjectifs et les verbes (en utilisant la version NEologd)

Les bras croisés, je me suis réveillé et je me suis allongé, et ma femme était couchée, et elle a dit qu'elle pleurait et s'est engagée. Femme) Une cravate longue et longue, une poutre et un visage de gourde avec dégradé et brillance. Il y a une bouche appelée Mashiro, et il y a une légère lignée de sang à la surface. Elle est orange avec une différence modérée de fissures, et même avec des voyelles étroites, elle est rose). (Mafu suicide) Vous devez regarder. Après cela, ma femme) a crié et les différentes théories qu'elle s'est livrées. La façon de vivre (en allant de l'avant avec les autres). Il se trouve que je vivais seul, et je l'écoutais parce que je me plongeais dans la jupe. Quand je me suicide, ma femme) je ne peux pas ouvrir mes paupières. Il y a beaucoup de richesse, et quand il est enveloppé d'une longue paupière et d'une longue paupière, c'est une grosse veine. Il y a une personne de deuxième classe appelée la grosse veine, et il y a une autre personne, et vous pouvez nager tranquillement.

Enfin, le symbole est mélangé dans le texte. Déjà Akan.

Même dans un tel cas, la dignité du chef-d'œuvre mystérieux flottant dans la dernière phrase. (ne peut pas lire)

Rétrospective des résultats

«J'en suis satisfait. «Je pense qu'il valait mieux ne pas remplacer les verbes. Je pense qu'il était plus facile de maintenir la cohésion et l'atmosphère dans leur ensemble si les verbes étaient laissés tels quels. «Celui que j'ai choisi pour le texte original se trouvait être une phrase avec peu de nomenclatures appropriées et de nouveaux mots, mais il était surprenant que les résultats soient assez différents entre la version NEologd et la version non-NEologd. ――Lors de la sélection des mots à remplacer, je pense que de meilleures phrases peuvent être faites en incluant des jugements conditionnels tels que la correspondance des paroles et des fins de partie avec les mots originaux. Il y a place à l'amélioration dans d'autres choses, mais le chargement du modèle entraîné est ** de toute façon lourd **, ce qui a empêché d'essayer diverses choses. Si je ne conçois pas ici, ce sera probablement difficile à l'avenir, alors je veux faire quelque chose à ce sujet. Je me demande si je peux mettre les chargés en attente quelque part ...

Merci pour la lecture!

Postscript

--2019-11-09 La notation de la version NEologd et de la version non-NEologd a été inversée, elle a donc été corrigée. Je suis désolé! --2019-11-10 ... Je pensais que ce n'était pas l'inverse, alors je l'ai remis. Je suis vraiment désolé. --2019-11-10 Je suis désolé, j'ai fait une erreur dans l'expression régulière du jugement des paroles de la partie. Les parenthèses sont () au lieu de [] et la barre oblique inverse est marquée d'un . Si vous corrigez cela, cela fonctionnera un peu plus correctement.

Je regrette de ne pas être vraiment pressé.

Recommended Posts

Génération facile de phrases pakuri stylisées avec MeCab + gensim
[Blender x Python] Pensez au code avec des symboles
Génération facile de phrases pakuri stylisées avec MeCab + gensim
Convertir des phrases en vecteurs avec gensim
Introduction facile de la reconnaissance vocale avec Python
Facile! Utilisez gensim et word2vec avec MAMP.