2016-09-21 3 views
4

En gensim, quand je donne une chaîne en entrée pour le modèle doc2vec de formation, je reçois cette erreur:doc2vec - Format d'entrée pour la formation doc2vec et infer_vector() en python

TypeError ('n \' KNOW t comment gérer uri% s'% rééd (uri))

Je fait référence à cette question Doc2vec : TaggedLineDocument() mais qui ont encore un doute sur le format d'entrée.

documents = TaggedLineDocument('myfile.txt')

Si les monFichier.txt ont des jetons liste des listes ou d'une liste distincte dans chaque ligne pour chaque document ou une chaîne?

For eg - J'ai 2 documents.

Doc 1: L'apprentissage automatique est un sous-domaine de l'informatique qui a évolué à partir de l'étude de la reconnaissance de formes. Doc 2: Arthur Samuel a défini l'apprentissage automatique comme un «domaine d'étude qui donne aux ordinateurs la capacité d'apprendre».

Alors, à quoi devrait ressembler le myFile.txt?

Cas 1: simple texte de chaque document dans chaque ligne

l'apprentissage de la machine est un sous-domaine de la science informatique qui a évolué à partir de l'étude de la reconnaissance des formes

Arthur Samuel apprentissage machine définie comme un champ d'étude qui donne des ordinateurs la capacité d'apprendre

cas n ° 2: une liste de listes ayant des jetons de chaque document

[ ["Machine", "learning", "is", "a", "subfield", "of", "computer", "science", "that", "evolved", "from", "the", "study", "of", "pattern", "recognition"],

["Arthur", "Samuel", "defined", "machine", "learning", "as", "a", "Field", "of", "study", "that", "gives", "computers" ,"the", "ability", "to", "learn"] ] 

Cas n ° 3: liste des jetons de chaque document sur une ligne distincte

["Machine", "learning", "is", "a", "subfield", "of", "computer", "science", "that", "evolved", "from", "the", "study", "of", "pattern", "recognition"] 

["Arthur", "Samuel", "defined", "machine", "learning", "as", "a", "Field", "of", "study", "that", "gives", "computers" ,"the", "ability", "to", "learn"] 

Et quand je suis en cours d'exécution sur les données de test, ce qui devrait être le format de la phrase que je veux prédire le vecteur doc pour? Devrait-il être comme le cas 1 ou le cas 2 ci-dessous ou quelque chose d'autre?

model.infer_vector(testSentence, alpha=start_alpha, steps=infer_epoch)

Si le testSentence être:

Cas 1: Chaîne

testSentence = "Machine learning is an evolving field" 

Cas n ° 2: liste des jetons

testSentence = ["Machine", "learning", "is", "an", "evolving", "field"] 

Répondre

3

TaggedLineDocument est une classe pratique qui attend son fichier source (ou objet semblable à un fichier) à délimiter d tokens, un par ligne. (C'est-à-dire, ce que vous appelez «Cas 1» dans votre première question.)

Mais vous pouvez écrire votre propre objet itérable pour nourrir gensim Doc2Vec comme corpus documents, tant que ce corpus (1) iterably-retours next() objets qui, comme TaggedDocument, ont words et tags listes; et (2) peut être itéré plusieurs fois, pour les passes multiples Doc2Vec exige à la fois pour l'enquête de vocabulaire initiale et ensuite iter passes de formation.

La méthode infer_vector() prend des listes de jetons, similaires à l'attribut words des objets individuels TaggedDocument. (C'est-à-dire, ce que vous appelez 'Case 2' dans votre 2ème question.)