如何在gensim中使用cosssim

时间:2018-11-23 15:06:20

标签: python python-2.7 gensim

我的问题是关于cossim的使用。

我有一个很大的功能片段:

for elem in lList:
    temp = []
    try:
        x = dict(np.ndenumerate(np.asarray(model[elem])))
    except:
        if x not in embedDict.keys():
            x = np.random.uniform(low=0.0, high=1.0, size=300)
            embedDict[elem] = x
        else:
            x  =  dict(np.ndenumerate(np.asarray(embedDict[elem])))

    for w in ListWords:
        try:
            y =  dict(np.ndenumerate(np.asarray(model[w])))
        except:
            if y not in embedDict.keys():
                y = np.random.uniform(low=0.0, high=1.0, size=300)
                embedDict[w] = y
            else:
                y =  dict(np.ndenumerate(np.asarray(embedDict[w])))

        temp.append(gensim.matutils.cossim(x,y))

我收到以下异常:

File "./match.py", line 129, in getEmbedding
    test.append(gensim.matutils.cossim(x,y))
  File "./Python_directory/ENV2.7_new/lib/python2.7/site-packages/gensim/matutils.py", line 746, in cossim
    vec1, vec2 = dict(vec1), dict(vec2)
TypeError: cannot convert dictionary update sequence element #0 to a sequence

您能帮我解释一下此异常的含义吗?

1 个答案:

答案 0 :(得分:1)

gensim.matutils.cossim的参数应为list of (int, float)类型,但您使用的是字典。

cossim函数中,以下cossim implementation发生了异常:

vec1, vec2 = dict(vec1), dict(vec2)

使用正确的类型,dict(vec)可以工作:

dict([(1, 2.), (3, 4.), (5, 6.)])

但是,如果您没有提供正确的类型,则会引发异常,例如:

dict([1, 2, 3])