[PYTHON] [gensim] Comment utiliser Doc2Vec

Il est généralement écrit officiellement par gensim, mais il n'y a pas beaucoup de matériaux japonais, donc je vais résumer ceux de base que j'utilise souvent pour les débutants.

Préparation (installation)

pip install gensim

Formation de données d'entraînement

Le style d'écriture est différent selon les sites, mais personnellement je suis calme avec ce style d'écriture

#coding: UTF-8
from gensim.models.doc2vec import Doc2Vec
from gensim.models.doc2vec import TaggedDocument

f = open('Données d'entraînement.txt','r')#Données textuelles qui séparent les mots par des espaces et séparent les documents par des sauts de ligne

#Divisez chaque document en mots et mettez-les dans la liste[([Mot 1,Mot 2,Mot 3],Identifiant du document),...]Une telle image
#mots: Liste des mots contenus dans le document (avec des mots en double)
#balises: identifiant du document (spécifié dans une liste. Plusieurs balises peuvent être ajoutées à un document)
trainings = [TaggedDocument(words = data.split(),tags = [i]) for i,data in enumerate(f)]

D'ailleurs, ce que j'ai appris cette fois, ce sont les données de 12 millions d'avis sur Reading Meter. Recueilli en se faufilant et en grattant. Comme il dépasse 1 Go, il est assez difficile d'accéder à la mémoire en fonction du PC

Apprentissage de modèle

#Formation (plus tard sur les paramètres)
m = Doc2Vec(documents= trainings, dm = 1, size=300, window=8, min_count=10, workers=4)

#Enregistrer le modèle
m.save("model/doc2vec.model")

#Chargement du modèle(Si vous avez un modèle, vous pouvez commencer ici)
m = Doc2Vec.load('model/doc2vec2.model')

Notez que cela peut prendre un certain temps en fonction de la taille des données d'entraînement.

Fonctions fréquemment utilisées

Vérifiez les documents d'apprentissage qui présentent un degré élevé de similitude avec le document avec l'ID spécifié.

#L'argument est l'identifiant du document
print m.docvecs.most_similar(0)

#Renvoie un ensemble des 10 meilleurs identifiants de document et une similitude similaire au document 0
>> [(55893, 0.6868613362312317), (85550, 0.6866280436515808), (80831, 0.6864551305770874), (61463, 0.6863148212432861), (72602, 0.6847503185272217), (56876, 0.6835699081420898), (80847, 0.6832736134529114), (92838, 0.6829516291618347), (24495, 0.6820268630981445), (45589, 0.679581880569458)]

Examiner la similitude entre des documents arbitraires

print m.docvecs.similarity(1,307)
#Similitude entre le document 1 et le document 307
>> 0.279532733106

Utilisez le modèle entraîné pour découvrir la similitude entre les documents nouvellement donnés

#Par exemple, essayez de calculer la similitude de certaines combinaisons des quatre nouveaux documents suivants.
doc_words1 = ["dernier", "Déploiement" ,"de bonne heure" ,"autre" ,"l'oeuvre", "impact", "recevoir" ,"Derrière le dos" ,"Tsukuri", "tour" ,"À chaque fois" ,"chose", "Enlève ton chapeau", "Faire", "Lis", "Pas cher" ,"Moi" ,"Mystère"]
doc_words2 = [ "Amour d'initiation", "De même" ,"dernier", "Quelques lignes", "Ne reviens pas", "Aller", "Temps", "Temps", "divers", "scène", "Faire" ,"Être", "Ligne cachée" ,"Saupoudrer", "らÊtre" ,"Est", "chose", "remarquer"]
doc_words3 = ["dernier", "Déploiement" ,"de bonne heure" ,"autre" ,"l'oeuvre", "impact", "recevoir" ,"Derrière le dos" ,"Tsukuri","Mystère"]
doc_words4 = ["Unique", "Vue du monde", "Tous les jours" ,"Partir","Calmez-vous","Temps","Lis","Livre"]

print "1-2 sim"
sim_value = m.docvecs.similarity_unseen_docs(m, doc_words1, doc_words2, alpha=1, min_alpha=0.0001, steps=5)
print sim_value

print "1-3 sim"
print m.docvecs.similarity_unseen_docs(m, doc_words1, doc_words3, alpha=1, min_alpha=0.0001, steps=5)

print "1-4 sim"
print m.docvecs.similarity_unseen_docs(m, doc_words1, doc_words4, alpha=1, min_alpha=0.0001, steps=5)

print "2-3 sim"
print m.docvecs.similarity_unseen_docs(m, doc_words2, doc_words3, alpha=1, min_alpha=0.0001, steps=5)

>> 1-2 sim
   0.10429317017
   1-3 sim
   0.472984922936
   1-4 sim
   -0.02320307339
   2-3 sim
   0.228117846023

Même si les gens le regardent, il est clair que les documents 1-3 et 2-3 sont similaires, et au contraire, les documents 1-4 ne sont pas similaires, donc la similitude est assez bonne.

Sortie du vecteur de compression du nouveau document (sortie comme vecteur du nombre de dimensions spécifié par taille lors de l'apprentissage)

newvec = m.infer_vector(doc_words1)

print newvec

>> [  1.19107231e-01  -4.06390838e-02  -2.55129002e-02   1.16982162e-01
  -1.47758834e-02   1.07912444e-01  -4.76960577e-02  -9.73785818e-02
   #...(Omission)
  -1.61364377e-02  -9.76370368e-03   4.98018935e-02  -8.88026431e-02
   1.34409174e-01  -1.01136886e-01  -4.24979888e-02   7.16169327e-02]

Ce que je veux ajouter à l'avenir

Aussi, concernant l'algorithme doc2vec lui-même J'ai trouvé un article expliqué dans le blog de Kitayama Lab of Engineering University [Algorithme de doc2vec (vecteur de paragraphe)](https://kitayamalab.wordpress.com/2016/12/10/algorithm de doc2vec paragraph-vector- /)

Recommended Posts

[gensim] Comment utiliser Doc2Vec
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment utiliser Pandas 2
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment utiliser pytest_report_header
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment utiliser IPython
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment utiliser la liste []
Comment utiliser python-kabusapi
Comment utiliser OptParse
Comment utiliser le retour
Comment utiliser pyenv-virtualenv
Comment utiliser imutils
Comment utiliser Qt Designer
Comment utiliser la recherche triée
python3: Comment utiliser la bouteille (2)
Comprendre comment utiliser django-filter
Comment utiliser le générateur
[Python] Comment utiliser la liste 1
Comment utiliser FastAPI ③ OpenAPI
Comment utiliser Python Argparse
Comment utiliser IPython Notebook
Comment utiliser Pandas Rolling
[Note] Comment utiliser virtualenv
Comment utiliser les dictionnaires redis-py
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Aller] Comment utiliser "... (3 périodes)"
Comment faire fonctionner GeoIp2 de Django
[Python] Comment utiliser input ()
Comment utiliser le décorateur
[Introduction] Comment utiliser open3d
Comment utiliser Python lambda
Comment utiliser Jupyter Notebook
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser Google Colaboratory
Comment utiliser les octets Python