У меня есть два каталога, из которых я хочу прочитать их текстовые файлы и пометить их, но я не знаю, как это сделать через TaggedDocument
. Я думал, что это будет работать как TaggedDocument([Strings],[Labels]), но это явно не работает.
Это мой код:
from gensim import models
from gensim.models.doc2vec import TaggedDocument
import utilities as util
import os
from sklearn import svm
from nltk.tokenize import sent_tokenize
CogPath = "./FixedCog/"
NotCogPath = "./FixedNotCog/"
SamplePath ="./Sample/"
docs = []
tags = []
CogList = [p for p in os.listdir(CogPath) if p.endswith('.txt')]
NotCogList = [p for p in os.listdir(NotCogPath) if p.endswith('.txt')]
SampleList = [p for p in os.listdir(SamplePath) if p.endswith('.txt')]
for doc in CogList:
str = open(CogPath+doc,'r').read().decode("utf-8")
docs.append(str)
print docs
tags.append(doc)
print "###########"
print tags
print "!!!!!!!!!!!"
for doc in NotCogList:
str = open(NotCogPath+doc,'r').read().decode("utf-8")
docs.append(str)
tags.append(doc)
for doc in SampleList:
str = open(SamplePath + doc, 'r').read().decode("utf-8")
docs.append(str)
tags.append(doc)
T = TaggedDocument(docs,tags)
model = models.Doc2Vec(T,alpha=.025, min_alpha=.025, min_count=1,size=50)
и это ошибка, которую я получаю:
Traceback (most recent call last):
File "/home/farhood/PycharmProjects/word2vec_prj/doc2vec.py", line 34, in <module>
model = models.Doc2Vec(T,alpha=.025, min_alpha=.025, min_count=1,size=50)
File "/home/farhood/anaconda2/lib/python2.7/site-packages/gensim/models/doc2vec.py", line 635, in __init__
self.build_vocab(documents, trim_rule=trim_rule)
File "/home/farhood/anaconda2/lib/python2.7/site-packages/gensim/models/word2vec.py", line 544, in build_vocab
self.scan_vocab(sentences, progress_per=progress_per, trim_rule=trim_rule) # initial survey
File "/home/farhood/anaconda2/lib/python2.7/site-packages/gensim/models/doc2vec.py", line 674, in scan_vocab
if isinstance(document.words, string_types):
AttributeError: 'list' object has no attribute 'words'
min_alpha
будет тем же значением, что и начальноеalpha
, это означает, что ваше обучение не выполняет надлежащий стохастический градиентный спуск. Кроме того,min_count=1
редко бывает полезен при обучении Word2Vec/Doc2Vec — сохранение таких редких слов приводит к тому, что обучение занимает больше времени и влияет на качество оставшихся векторов слов/документов. - person gojomo   schedule 16.07.2017min_alpha
я скопировал его из примера кода, за которым следует этот код:for epoch in range(10): model.train(docs) model.alpha -= 0.002 # decrease the learning rate model.min_alpha = model.alpha # fix the learning rate, no decay
и оmin_count
: мой набор данных очень ограничен, и некоторые слова не так уж часто встречаются, но имеют большое значение, также я отфильтровал большинство стоп-слова и частые ежедневные слова. - person Farhood   schedule 17.07.2017alpha
доmin_alpha
, и вам не следует вызыватьtrain()
самостоятельно. (И если вы это сделаете, как вы показали без каких-либо других подробностей, последние версии gensim выдадут ошибку, потому что это такая распространенная ошибка.) Это редкая, опытная вещь, чтобы вызватьtrain()
самостоятельно или много со значением по умолчаниюalpha
/min_alpha
. - person gojomo   schedule 18.07.2017