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.
pip install gensim
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
#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.
#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)]
print m.docvecs.similarity(1,307)
#Similitude entre le document 1 et le document 307
>> 0.279532733106
#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.
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]
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