在Gensim.Doc2Vec中应用Similar函数

时间:2017-10-04 08:09:54

标签: python gensim doc2vec

我试图让doc2vec函数在python 3中运行。 我有以下代码:

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

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

1 个答案:

答案 0 :(得分:0)

如果您获得def is_even(i): return (i % 2) == 0 def is_odd(i): return (i % 2) != 0 def get_evens_at_back(l): odds = list(filter(is_odd, l)) evens = list(filter(is_even, l)) return sorted(odds) + sorted(evens) ,则可以依赖ValueError: '10' is not in list不在列表中的事实。所以你看了一下清单,看看有什么,以及它是否符合你的期望?

从您的代码摘录中不清楚'10'是否曾被调用过,因此在向tagdocs()提供tekstdata时,不清楚Doc2Vec的形式。意图有点复杂,没有任何东西可以显示数据以原始原始形式显示的内容。

但是,您提供给tags的{​​{1}}可能不是必需的标签列表,而是一个简单的字符串,它将被解释为字符列表。因此,即使您提供TaggedDocument tags,它也会被视为'10' - 而['1', '0']只会是10(对于10)单位数字符串)。

对您的设置单独发表评论:

  • len(vectorModel.doctags)的1000个文档相当小,其中大多数发布的结果使用数万到数百万个文档
  • Doc2Vec工作中,{10}的iter更常见(对于较小的数据集,更大的值可能会有所帮助)
  • Doc2Vec通常在其可选参数中使用非默认值时效果更佳,尤其是infer_vector()更大(20-200)或起始steps&# 39;更像是批量培训默认值(alpha