2017-10-04 35 views
1
应用类似的功能

我试图让doc2vec功能在Python 3 工作,我有以下代码:在Gensim.Doc2Vec

tekstdata = [[ index, str(row["StatementOfTargetFiguresAndPoliciesForTheUnderrepresentedGender"])] for index, row in data.iterrows()] 
def prep (x): 
    low = x.lower() 
    return word_tokenize(low) 

def cleanMuch(data, clean): 
    output = [] 
    for x, y in data: 
     z = clean(y) 
     output.append([str(x), z]) 
    return output 

tekstdata = cleanMuch(tekstdata, prep) 

def tagdocs(docs): 
    output = []  
    for x,y in docs: 
     output.append(gensim.models.doc2vec.TaggedDocument(y, x)) 
    return output 
    tekstdata = tagdocs(tekstdata) 

    print(tekstdata[100]) 

vectorModel = gensim.models.doc2vec.Doc2Vec(tekstdata, size = 100, window = 4,min_count = 3, iter = 2) 


ranks = [] 
second_ranks = [] 
for x, y in tekstdata: 
print (x) 
print (y) 
inferred_vector = vectorModel.infer_vector(y) 
sims = vectorModel.docvecs.most_similar([inferred_vector], topn=1001, restrict_vocab = None) 
rank = [docid for docid, sim in sims].index(y) 
ranks.append(rank) 

所有作品,只要我能理解,直到排名功能。 我得到的错误是我的列表中没有零例如我输入的文件中没有10个列表:

File "C:/Users/Niels Helsø/Documents/github/Speciale/Test/Data prep.py", line 59, in <module> 
rank = [docid for docid, sim in sims].index(y) 

ValueError: '10' is not in list 

在我看来,它是类似的功能,不工作。 该模型训练我的数据(1000个文档)并构建一个被标记的词汇。 我主要使用了该文档是这样的: Gensim dokumentation Torturial

我希望有人可以提供帮助。如果需要其他信息,请告诉我。 最好 尼尔斯

回答

0

如果您收到ValueError: '10' is not in list,你可以依靠的事实是'10'不在列表中。那么你看过这个清单,看看有什么,如果它符合你的期望?

从代码摘录中不清楚tagdocs()是否曾被调用,因此不清楚tekstdata提供给Doc2Vec时所处的形式。意图有点复杂,没有什么可以显示数据显示的原始形式。

但是,您提供给TaggedDocumenttags可能不是所需的标签列表,而是一个简单的字符串,它将被解释为字符列表。因此,即使您提供的tags'10',它将被视为['1', '0'] - 而len(vectorModel.doctags)将仅为10(10个单位数字符串)。

你的设置独立意见:

  • 1000文档是Doc2Vec,大部分公布的结果用数万的-十万到数百万个文档
  • 10-20的iter是比较常见的非常小在Doc2Vec工作(甚至更大的值可能有助于较小的数据集)
  • infer_vector()通常在其可选参数中非默认值更好,尤其是steps更大(20-200)或起始alpha这更像是批量训练默认值(0.025
+1

谢谢gojomo。你提示工作。最好 –