在使用doc2vec
训练时,我遇到了以下错误:
AttributeError: 'list' object has no attribute 'words' in python gensim module
这是我的代码:
# 从csv文件中提取标题到列表中with open(query+'_titles.csv', 'rb') as f: reader = csv.reader(f) titlelist = list(reader)# 构建模型model = doc2vec.Doc2Vec(size=30, window=1, alpha=0.01, min_count=2, sample=1e-5, workers=100)model.build_vocab(titlelist)titlearray = np.asarray(titlelist)print 'Training Model...'
我使用的是Python 2.7.11,gensim版本是3.2.0,如果这有帮助的话。一定是我遗漏了什么重要的东西。
回答:
Doc2Vec
不仅需要句子列表,还需要带有标签的句子列表。根据DS.SE上的讨论:
在
word2vec
中,不需要给词语标记标签,因为每个词在词汇表中都有自己的语义含义。但在doc2vec
的情况下,需要指定多少个词或句子传达一个语义含义,以便算法能够将其识别为一个单一实体。因此,我们根据传达的语义含义的层次,为句子或段落指定标签或标记。
因此,Gensim期望以下输入:
sentences = [doc2vec.TaggedDocument(sentence, 'tag') for sentence in titlelist]model.build_vocab(sentences)
显然,您可能希望根据句子设置不同的标签,以获得有意义的向量。顺便问一下,您确定要以二进制模式读取CSV文件吗?